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