LLVM API Documentation

Classes | Defines | Functions | Variables
regcomp.c File Reference
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <stdlib.h>
#include "regex_impl.h"
#include "regutils.h"
#include "regex2.h"
#include "regcclass.h"
#include "regcname.h"
Include dependency graph for regcomp.c:

Go to the source code of this file.

Classes

struct  parse

Defines

#define NPAREN   10 /* we need to remember () 1-9 for back refs */
#define PEEK()   (*p->next)
#define PEEK2()   (*(p->next+1))
#define MORE()   (p->next < p->end)
#define MORE2()   (p->next+1 < p->end)
#define SEE(c)   (MORE() && PEEK() == (c))
#define SEETWO(a, b)   (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b))
#define EAT(c)   ((SEE(c)) ? (NEXT(), 1) : 0)
#define EATTWO(a, b)   ((SEETWO(a, b)) ? (NEXT2(), 1) : 0)
#define NEXT()   (p->next++)
#define NEXT2()   (p->next += 2)
#define NEXTn(n)   (p->next += (n))
#define GETNEXT()   (*p->next++)
#define SETERROR(e)   seterr(p, (e))
#define REQUIRE(co, e)   (void)((co) || SETERROR(e))
#define MUSTSEE(c, e)   (REQUIRE(MORE() && PEEK() == (c), e))
#define MUSTEAT(c, e)   (REQUIRE(MORE() && GETNEXT() == (c), e))
#define MUSTNOTSEE(c, e)   (REQUIRE(!MORE() || PEEK() != (c), e))
#define EMIT(op, sopnd)   doemit(p, (sop)(op), (size_t)(sopnd))
#define INSERT(op, pos)   doinsert(p, (sop)(op), HERE()-(pos)+1, pos)
#define AHEAD(pos)   dofwd(p, pos, HERE()-(pos))
#define ASTERN(sop, pos)   EMIT(sop, HERE()-pos)
#define HERE()   (p->slen)
#define THERE()   (p->slen - 1)
#define THERETHERE()   (p->slen - 2)
#define DROP(n)   (p->slen -= (n))
#define DUPMAX   255
#define INFINITY   (DUPMAX + 1)
#define never   0 /* some <assert.h>s have bugs too */
#define GOODFLAGS(f)   ((f)&~REG_DUMP)
#define BACKSL   (1<<CHAR_BIT)
#define N   2
#define INF   3
#define REP(f, t)   ((f)*8 + (t))
#define MAP(n)   (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)

Functions

static void p_ere (struct parse *, int)
static void p_ere_exp (struct parse *)
static void p_str (struct parse *)
static void p_bre (struct parse *, int, int)
static int p_simp_re (struct parse *, int)
static int p_count (struct parse *)
static void p_bracket (struct parse *)
static void p_b_term (struct parse *, cset *)
static void p_b_cclass (struct parse *, cset *)
static void p_b_eclass (struct parse *, cset *)
static char p_b_symbol (struct parse *)
static char p_b_coll_elem (struct parse *, int)
static char othercase (int)
static void bothcases (struct parse *, int)
static void ordinary (struct parse *, int)
static void nonnewline (struct parse *)
static void repeat (struct parse *, sopno, int, int)
static int seterr (struct parse *, int)
static csetallocset (struct parse *)
static void freeset (struct parse *, cset *)
static int freezeset (struct parse *, cset *)
static int firstch (struct parse *, cset *)
static int nch (struct parse *, cset *)
static void mcadd (struct parse *, cset *, const char *)
static void mcinvert (struct parse *, cset *)
static void mccase (struct parse *, cset *)
static int isinsets (struct re_guts *, int)
static int samesets (struct re_guts *, int, int)
static void categorize (struct parse *, struct re_guts *)
static sopno dupl (struct parse *, sopno, sopno)
static void doemit (struct parse *, sop, size_t)
static void doinsert (struct parse *, sop, size_t, sopno)
static void dofwd (struct parse *, sopno, sop)
static void enlarge (struct parse *, sopno)
static void stripsnug (struct parse *, struct re_guts *)
static void findmust (struct parse *, struct re_guts *)
static sopno pluscount (struct parse *, struct re_guts *)
int llvm_regcomp (llvm_regex_t *preg, const char *pattern, int cflags)

Variables

static char nuls [10]

Define Documentation

#define AHEAD (   pos)    dofwd(p, pos, HERE()-(pos))

Definition at line 133 of file regcomp.c.

Referenced by p_ere(), p_ere_exp(), and repeat().

#define ASTERN (   sop,
  pos 
)    EMIT(sop, HERE()-pos)

Definition at line 134 of file regcomp.c.

Referenced by p_ere(), p_ere_exp(), p_simp_re(), and repeat().

#define BACKSL   (1<<CHAR_BIT)

Referenced by p_simp_re().

#define DROP (   n)    (p->slen -= (n))

Definition at line 138 of file regcomp.c.

Referenced by p_bre(), and repeat().

#define DUPMAX   255

Definition at line 143 of file regcomp.c.

Referenced by p_count().

#define EAT (   c)    ((SEE(c)) ? (NEXT(), 1) : 0)

Definition at line 120 of file regcomp.c.

Referenced by p_b_term(), p_bracket(), p_bre(), p_ere(), p_ere_exp(), and p_simp_re().

#define EATTWO (   a,
 
)    ((SEETWO(a, b)) ? (NEXT2(), 1) : 0)

Definition at line 121 of file regcomp.c.

Referenced by p_b_symbol(), p_b_term(), and p_simp_re().

#define EMIT (   op,
  sopnd 
)    doemit(p, (sop)(op), (size_t)(sopnd))
#define GETNEXT ( )    (*p->next++)

Definition at line 125 of file regcomp.c.

Referenced by p_b_symbol(), p_count(), p_ere_exp(), p_simp_re(), and p_str().

#define GOODFLAGS (   f)    ((f)&~REG_DUMP)

Referenced by llvm_regcomp(), and llvm_regexec().

#define HERE ( )    (p->slen)

Definition at line 135 of file regcomp.c.

Referenced by doinsert(), dupl(), p_bre(), p_ere(), p_ere_exp(), p_simp_re(), and repeat().

#define INF   3

Referenced by repeat().

#define INFINITY   (DUPMAX + 1)

Definition at line 145 of file regcomp.c.

Referenced by p_ere_exp(), and p_simp_re().

#define INSERT (   op,
  pos 
)    doinsert(p, (sop)(op), HERE()-(pos)+1, pos)

Definition at line 132 of file regcomp.c.

Referenced by p_ere(), p_ere_exp(), p_simp_re(), and repeat().

#define MAP (   n)    (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)

Referenced by repeat().

#define MORE ( )    (p->next < p->end)
#define MORE2 ( )    (p->next+1 < p->end)

Definition at line 117 of file regcomp.c.

Referenced by p_b_term(), and p_ere_exp().

#define MUSTEAT (   c,
 
)    (REQUIRE(MORE() && GETNEXT() == (c), e))

Definition at line 129 of file regcomp.c.

Referenced by p_bracket(), and p_ere_exp().

#define MUSTNOTSEE (   c,
 
)    (REQUIRE(!MORE() || PEEK() != (c), e))

Definition at line 130 of file regcomp.c.

#define MUSTSEE (   c,
 
)    (REQUIRE(MORE() && PEEK() == (c), e))

Definition at line 128 of file regcomp.c.

#define N   2

Referenced by llvm::AAMDNodes::AAMDNodes(), llvm::DwarfUnit::addBlockByrefAddress(), llvm::AddCatchInfo(), llvm::MachineModuleInfo::addCatchTypeInfo(), llvm::DwarfUnit::addComplexAddress(), llvm::bfi_detail::IrreducibleGraph::addNodesInLoop(), llvm::SUnit::addPred(), adjustForFNeg(), adjustForLTGFR(), adjustForSubtraction(), llvm::IntervalMapImpl::NodeBase< std::pair< KeyT, KeyT >, ValT, N >::adjustFromLeftSib(), llvm::array_lengthof(), llvm::APInt::byteSwap(), llvm::Calculate(), llvm::DomTreeNodeBase< MachineBasicBlock >::compare(), llvm::DIELoc::ComputeSize(), llvm::DIEBlock::ComputeSize(), llvm::DwarfFile::computeSizeAndOffset(), ConstantFold(), llvm::DwarfUnit::constructSubprogramArguments(), llvm::DwarfUnit::constructTypeDIE(), llvm::IntervalMapImpl::NodeBase< std::pair< KeyT, KeyT >, ValT, N >::copy(), llvm::StringRef::count(), countOperands(), llvm::InstrEmitter::CountResults(), llvm::DIBuilder::createArtificialType(), createIrreducibleLoop(), llvm::DIBuilder::createObjectPointerType(), llvm::AArch64_AM::decodeLogicalImmediate(), decodeTestingFormat(), llvm::DIBasicType::DIBasicType(), llvm::DICompileUnit::DICompileUnit(), llvm::DICompositeType::DICompositeType(), llvm::DIDerivedType::DIDerivedType(), llvm::DIDescriptor::DIDescriptor(), llvm::DIEnumerator::DIEnumerator(), llvm::DIFile::DIFile(), llvm::DIGlobalVariable::DIGlobalVariable(), llvm::DILexicalBlock::DILexicalBlock(), llvm::DILexicalBlockFile::DILexicalBlockFile(), llvm::DINameSpace::DINameSpace(), llvm::DIScope::DIScope(), llvm::DISubprogram::DISubprogram(), llvm::DISubrange::DISubrange(), llvm::DISubroutineType::DISubroutineType(), llvm::DITemplateTypeParameter::DITemplateTypeParameter(), llvm::DITemplateValueParameter::DITemplateValueParameter(), llvm::DIType::DIType(), llvm::DITypedArray< T >::DITypedArray(), llvm::DIVariable::DIVariable(), llvm::ArrayRef< uint64_t >::drop_back(), llvm::StringRef::drop_back(), llvm::LexicalScope::dump(), llvm::SelectionDAG::dump(), llvm::DIEAbbrev::Emit(), llvm::OnDiskChainedHashTableGenerator< Info >::Emit(), llvm::EHStreamer::emitExceptionTable(), llvm::MachineCodeEmitter::emitString(), llvm::DIELoc::EmitValue(), llvm::DIEBlock::EmitValue(), llvm::SmallVectorImpl< MachineInstr * >::erase(), llvm::StringRef::find(), llvm::IntervalMapImpl::LeafNode< KeyT, ValT, N, Traits >::findFrom(), llvm::IntervalMapImpl::BranchNode< KeyT, ValT, RootBranchCap, Traits >::findFrom(), FoldCondBranchOnPHI(), foldUDivShl(), llvm::ArrayRecycler< T, Align >::Capacity::get(), llvm::TypeBuilder< T[N], cross >::get(), llvm::LazyCallGraph::get(), llvm::ScaledNumber< uint64_t >::get(), llvm::SDLoc::getDebugLoc(), llvm::DominatorTreeBase< MachineBasicBlock >::getDescendants(), llvm::BranchProbabilityInfo::getEdgeProbability(), llvm::MachineBranchProbabilityInfo::getEdgeProbability(), getFoldedOffsetOf(), getFoldedSizeOf(), llvm::SDNode::getGluedMachineNode(), llvm::SDLoc::getIROrder(), llvm::RegisterClassInfo::getLastCalleeSavedAlias(), llvm::LoopBase< BlockT, LoopT >::getLoopLatch(), llvm::LoopBase< BlockT, LoopT >::getLoopPredecessor(), llvm::SelectionDAGBuilder::getNonRegisterValue(), getNumOperandsNoGlue(), llvm::AArch64CC::getNZCVToSatisfyCondCode(), llvm::MachineModuleInfo::getOrCreateLandingPadInfo(), llvm::DbgVariable::getType(), llvm::MachineModuleInfo::getTypeIDFor(), llvm::opt::Arg::getValue(), llvm::SelectionDAGBuilder::getValue(), llvm::ScalarEvolution::getZeroExtendExpr(), hasMoreThanOneUseOtherThanLLVMUsed(), llvm::bfi_detail::IrreducibleGraph::initialize(), llvm::ResourcePriorityQueue::initNumRegDefsLeft(), llvm::SmallSet< unsigned, 16 >::insert(), llvm::IntervalMapImpl::BranchNode< KeyT, ValT, RootBranchCap, Traits >::insert(), llvm::IntervalMapImpl::LeafNode< KeyT, ValT, N, Traits >::insertFrom(), llvm::IntEqClasses::IntEqClasses(), Is_PostInc_S4_Offset(), isImmMskBitp(), llvm::isInt(), IsS11_0_Offset(), IsS11_1_Offset(), IsS11_2_Offset(), IsS11_3_Offset(), IsU6_0_Offset(), IsU6_1_Offset(), IsU6_2_Offset(), llvm::isUInt(), llvm::AArch64_AM::isValidDecodeLogicalImmediate(), isZero(), llvm::SelectionDAG::Legalize(), LLVMAddNamedMetadataOperand(), LLVMGetMDNodeOperands(), LLVMGetNamedMetadataNumOperands(), LLVMGetNamedMetadataOperands(), llvm::XCoreInstrInfo::loadImmediate(), llvm::AliasAnalysis::Location::Location(), llvm::MSP430TargetLowering::LowerShifts(), llvm::makeSubprogramMap(), llvm::IntervalMapImpl::NodeBase< std::pair< KeyT, KeyT >, ValT, N >::moveRight(), llvm::ScaledNumbers::multiply64(), llvm::opt::operator<(), llvm::InlineAsm::ConstraintInfo::Parse(), llvm::format_object_base::print(), llvm::DIEAbbrev::print(), llvm::DIE::print(), llvm::DebugInfoFinder::processDeclare(), llvm::AArch64_AM::processLogicalImmediate(), llvm::DebugInfoFinder::processValue(), llvm::DIEAbbrev::Profile(), llvm::coverage::RawCoverageReader::readULEB128(), llvm::ImutAVLFactory< ImutInfo >::recoverNodes(), llvm::SelectionDAG::RemoveDeadNodes(), llvm::cl::parser< const PassInfo * >::removeLiteralOption(), llvm::MachineInstr::RemoveOperand(), llvm::SUnit::removePred(), repeat(), llvm::LiveRangeCalc::reset(), llvm::StringRef::rfind(), llvm::CGSCCToFunctionPassAdaptor< FunctionPassT >::run(), llvm::RegisterClassInfo::runOnMachineFunction(), llvm::IntervalMapImpl::LeafNode< KeyT, ValT, N, Traits >::safeFind(), llvm::IntervalMapImpl::BranchNode< KeyT, ValT, RootBranchCap, Traits >::safeFind(), llvm::FastISel::selectGetElementPtr(), llvm::DICompositeType::setContainingType(), llvm::yaml::Input::setCurrentDocument(), llvm::SelectionDAGBuilder::setUnusedArgValue(), llvm::SelectionDAGBuilder::setValue(), llvm::SmallString< 256 >::slice(), llvm::StringRef::slice(), llvm::SmallVector< Inst, 7 >::SmallVector(), SolveQuadraticEquation(), llvm::opt::StrCmpOptionName(), llvm::StrInStrNoCase(), llvm::ResourcePriorityQueue::SUSchedulingCost(), llvm::ScaledNumber< DigitsT >::toInt(), llvm::APInt::toString(), unwrapLoop(), llvm::LoopBase< BlockT, LoopT >::verifyLoop(), llvm::InstCombiner::visitAdd(), llvm::yaml::BinaryRef::writeAsBinary(), WriteFunctionLocalMetadata(), llvm::WriteGraph(), and WriteModuleMetadata().

#define never   0 /* some <assert.h>s have bugs too */

Definition at line 150 of file regcomp.c.

#define NEXT ( )    (p->next++)

Definition at line 122 of file regcomp.c.

Referenced by p_b_cclass(), p_b_coll_elem(), p_b_term(), p_ere_exp(), and p_simp_re().

#define NEXT2 ( )    (p->next += 2)

Definition at line 123 of file regcomp.c.

Referenced by p_b_term().

#define NEXTn (   n)    (p->next += (n))

Definition at line 124 of file regcomp.c.

Referenced by p_bracket().

#define NPAREN   10 /* we need to remember () 1-9 for back refs */

Definition at line 65 of file regcomp.c.

Referenced by doinsert(), llvm_regcomp(), p_ere_exp(), and p_simp_re().

#define PEEK ( )    (*p->next)

Definition at line 114 of file regcomp.c.

Referenced by p_b_cclass(), p_b_term(), p_bracket(), p_count(), p_ere(), p_ere_exp(), and p_simp_re().

#define PEEK2 ( )    (*(p->next+1))

Definition at line 115 of file regcomp.c.

Referenced by p_b_term(), and p_ere_exp().

#define REP (   f,
 
)    ((f)*8 + (t))

Referenced by repeat().

#define REQUIRE (   co,
 
)    (void)((co) || SETERROR(e))

Definition at line 127 of file regcomp.c.

Referenced by p_b_symbol(), p_b_term(), p_bre(), p_count(), p_ere(), p_ere_exp(), p_simp_re(), and p_str().

#define SEE (   c)    (MORE() && PEEK() == (c))

Definition at line 118 of file regcomp.c.

Referenced by p_b_term(), p_ere(), and p_ere_exp().

#define SEETWO (   a,
 
)    (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b))

Definition at line 119 of file regcomp.c.

Referenced by p_b_coll_elem(), p_bracket(), p_bre(), and p_simp_re().

#define SETERROR (   e)    seterr(p, (e))
#define THERE ( )    (p->slen - 1)

Definition at line 136 of file regcomp.c.

Referenced by llvm_regcomp(), p_ere(), p_ere_exp(), and repeat().

#define THERETHERE ( )    (p->slen - 2)

Definition at line 137 of file regcomp.c.

Referenced by p_ere_exp(), and repeat().


Function Documentation

static cset * allocset ( struct parse p) [static]
static void bothcases ( struct parse p,
int  ch 
) [static]

Definition at line 911 of file regcomp.c.

References parse::end, parse::next, othercase(), and p_bracket().

Referenced by ordinary().

static void categorize ( struct parse p,
struct re_guts g 
) [static]

Definition at line 1286 of file regcomp.c.

References re_guts::categories, parse::error, isinsets(), re_guts::ncategories, and samesets().

Referenced by llvm_regcomp().

static void doemit ( struct parse p,
sop  op,
size_t  opnd 
) [static]

Definition at line 1337 of file regcomp.c.

References enlarge(), parse::error, OPSHIFT, parse::slen, SOP, parse::ssize, and parse::strip.

static void dofwd ( struct parse p,
sopno  pos,
sop  value 
) [static]

Definition at line 1394 of file regcomp.c.

References parse::error, OP, OPSHIFT, and parse::strip.

static void doinsert ( struct parse p,
sop  op,
size_t  opnd,
sopno  pos 
) [static]
static sopno dupl ( struct parse p,
sopno  start,
sopno  finish 
) [static]

Definition at line 1311 of file regcomp.c.

References enlarge(), HERE, llvm::LibFunc::memmove, parse::slen, parse::ssize, and parse::strip.

Referenced by p_ere_exp(), p_simp_re(), and repeat().

static void enlarge ( struct parse p,
sopno  size 
) [static]

Definition at line 1408 of file regcomp.c.

References llvm::LibFunc::realloc, REG_ESPACE, SETERROR, parse::ssize, and parse::strip.

Referenced by doemit(), and dupl().

static void findmust ( struct parse p,
struct re_guts g 
) [static]
static int firstch ( struct parse p,
cset cs 
) [static]

Definition at line 1170 of file regcomp.c.

References CHIN, re_guts::csetsize, and parse::g.

Referenced by p_bracket().

static void freeset ( struct parse p,
cset cs 
) [static]

Definition at line 1117 of file regcomp.c.

References CHsub, re_guts::csetsize, parse::g, re_guts::ncsets, and re_guts::sets.

Referenced by freezeset(), and p_bracket().

static int freezeset ( struct parse p,
cset cs 
) [static]

Definition at line 1139 of file regcomp.c.

References CHIN, re_guts::csetsize, freeset(), parse::g, cset::hash, re_guts::ncsets, and re_guts::sets.

Referenced by p_bracket().

static int isinsets ( struct re_guts g,
int  c 
) [static]

Definition at line 1251 of file regcomp.c.

References re_guts::ncsets, and re_guts::setbits.

Referenced by categorize().

int llvm_regcomp ( llvm_regex_t preg,
const char *  pattern,
int  cflags 
)
static void mcadd ( struct parse p,
cset cs,
const char *  cp 
) [static]
static void mccase ( struct parse p,
cset cs 
) [static]

Definition at line 1242 of file regcomp.c.

References cset::multis.

Referenced by p_bracket().

static void mcinvert ( struct parse p,
cset cs 
) [static]

Definition at line 1229 of file regcomp.c.

References cset::multis.

Referenced by p_bracket().

static int nch ( struct parse p,
cset cs 
) [static]

Definition at line 1186 of file regcomp.c.

References CHIN, re_guts::csetsize, and parse::g.

Referenced by p_bracket().

static void nonnewline ( struct parse p) [static]

Definition at line 953 of file regcomp.c.

References parse::end, parse::next, and p_bracket().

Referenced by p_ere_exp(), and p_simp_re().

static void ordinary ( struct parse p,
int  ch 
) [static]
static char othercase ( int  ch) [static]

Definition at line 893 of file regcomp.c.

Referenced by bothcases(), ordinary(), and p_bracket().

static void p_b_cclass ( struct parse p,
cset cs 
) [static]
static char p_b_coll_elem ( struct parse p,
int  endc 
) [static]
static void p_b_eclass ( struct parse p,
cset cs 
) [static]

Definition at line 836 of file regcomp.c.

References CHadd, and p_b_coll_elem().

Referenced by p_b_term().

static char p_b_symbol ( struct parse p) [static]

Definition at line 848 of file regcomp.c.

References EATTWO, GETNEXT, MORE, p_b_coll_elem(), REG_EBRACK, REG_ECOLLATE, and REQUIRE.

Referenced by p_b_term().

static void p_b_term ( struct parse p,
cset cs 
) [static]
static void p_bracket ( struct parse p) [static]
static void p_bre ( struct parse p,
int  end1,
int  end2 
) [static]
static int p_count ( struct parse p) [static]

Definition at line 640 of file regcomp.c.

References DUPMAX, GETNEXT, llvm::LibFunc::isdigit, MORE, PEEK, REG_BADBR, and REQUIRE.

Referenced by p_ere_exp(), and p_simp_re().

static void p_ere ( struct parse p,
int  stop 
) [static]

Definition at line 257 of file regcomp.c.

References AHEAD, ASTERN, EAT, EMIT, HERE, INSERT, MORE, O_CH, OCH_, OOR1, OOR2, p_ere_exp(), PEEK, REG_EMPTY, REQUIRE, SEE, and THERE.

Referenced by llvm_regcomp(), and p_ere_exp().

static void p_ere_exp ( struct parse p) [static]
static int p_simp_re ( struct parse p,
int  starordinary 
) [static]
static void p_str ( struct parse p) [static]

Definition at line 475 of file regcomp.c.

References GETNEXT, MORE, ordinary(), REG_EMPTY, and REQUIRE.

Referenced by llvm_regcomp().

static sopno pluscount ( struct parse p,
struct re_guts g 
) [static]

Definition at line 1526 of file regcomp.c.

References parse::error, re_guts::iflags, O_PLUS, OEND, OP, OPLUS_, REGEX_BAD, and re_guts::strip.

Referenced by llvm_regcomp().

static void repeat ( struct parse p,
sopno  start,
int  from,
int  to 
) [static]

Definition at line 975 of file regcomp.c.

References AHEAD, ASTERN, DROP, dupl(), EMIT, parse::error, HERE, INF, INSERT, MAP, N, O_CH, O_PLUS, OCH_, OOR1, OOR2, OPLUS_, REG_ASSERT, REP, SETERROR, THERE, and THERETHERE.

Referenced by p_ere_exp(), and p_simp_re().

static int samesets ( struct re_guts g,
int  c1,
int  c2 
) [static]

Definition at line 1268 of file regcomp.c.

References re_guts::ncsets, and re_guts::setbits.

Referenced by categorize().

static int seterr ( struct parse p,
int  e 
) [static]

Definition at line 1045 of file regcomp.c.

References parse::end, parse::error, parse::next, and nuls.

static void stripsnug ( struct parse p,
struct re_guts g 
) [static]

Variable Documentation

char nuls[10] [static]

Definition at line 108 of file regcomp.c.

Referenced by seterr().