12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)diff --git a/re2/compile.cc b/re2/compile.cc 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index adb45fd..14e401a 100644 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)--- a/re2/compile.cc 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)+++ b/re2/compile.cc 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -44,7 +44,7 @@ struct PatchList { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static PatchList Append(Prog::Inst *inst0, PatchList l1, PatchList l2); 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-static PatchList nullPatchList; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+static PatchList nullPatchList = { 0 }; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns patch list containing just p. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PatchList PatchList::Mk(uint32 p) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -106,12 +106,13 @@ struct Frag { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 begin; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PatchList end; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- explicit Frag(LinkerInitialized) {} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Frag() : begin(0) { end.p = 0; } // needed so Frag can go in vector 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Frag(uint32 begin, PatchList end) : begin(begin), end(end) {} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-static Frag kNullFrag(LINKER_INITIALIZED); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+static Frag NullFrag() { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+ return Frag(); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Input encodings. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Encoding { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -684,13 +685,13 @@ Frag Compiler::PreVisit(Regexp* re, Frag, bool* stop) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (failed_) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *stop = true; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- return kNullFrag; // not used by caller 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+ return NullFrag(); // not used by caller 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Frag Compiler::Literal(Rune r, bool foldcase) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (encoding_) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- return kNullFrag; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+ return NullFrag(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kEncodingLatin1: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ByteRange(r, r, foldcase); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -1006,7 +1007,7 @@ Prog* Compiler::Compile(Regexp* re, bool reversed, int64 max_mem) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_anchor_end = IsAnchorEnd(&sre, 0); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generate fragment for entire regexp. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- Frag f = c.WalkExponential(sre, kNullFrag, 2*c.max_inst_); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+ Frag f = c.WalkExponential(sre, NullFrag(), 2*c.max_inst_); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sre->Decref(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (c.failed_) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -1097,7 +1098,7 @@ Prog* Compiler::CompileSet(const RE2::Options& options, RE2::Anchor anchor, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c.Setup(pf, options.max_mem(), anchor); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compile alternation of fragments. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- Frag all = c.WalkExponential(re, kNullFrag, 2*c.max_inst_); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+ Frag all = c.WalkExponential(re, NullFrag(), 2*c.max_inst_); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->Decref(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (c.failed_) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)diff --git a/re2/re2.cc b/re2/re2.cc 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)index 0da886d..b9e44fc 100644 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)--- a/re2/re2.cc 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)+++ b/re2/re2.cc 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@@ -32,10 +32,10 @@ namespace re2 { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kMaxArgs = 16; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kVecSize = 1+kMaxArgs; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::FullMatchN> RE2::FullMatch; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::PartialMatchN> RE2::PartialMatch; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::ConsumeN> RE2::Consume; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)-const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::FindAndConsumeN> RE2::FindAndConsume; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::FullMatchN> RE2::FullMatch = {}; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::PartialMatchN> RE2::PartialMatch = {}; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::ConsumeN> RE2::Consume = {}; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::FindAndConsumeN> RE2::FindAndConsume = {}; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define kDefaultMaxMem (8<<20) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)diff --git a/re2/variadic_function.h b/re2/variadic_function.h 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)index 8d2b763..7c7d6d5 100644 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)--- a/re2/variadic_function.h 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)+++ b/re2/variadic_function.h 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@@ -11,8 +11,6 @@ template <typename Result, typename Param0, typename Param1, typename Arg, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result (*Func)(Param0, Param1, const Arg* const [], int count)> 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class VariadicFunction2 { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- VariadicFunction2() {} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Result operator()(Param0 p0, Param1 p1) const { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Func(p0, p1, 0, 0); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 96