44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
// Copyright 2009 The RE2 Authors. All Rights Reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
#include "util/test.h"
|
|
#include "re2/regexp.h"
|
|
#include "re2/walker-inl.h"
|
|
|
|
namespace re2 {
|
|
|
|
// Null walker. For benchmarking the walker itself.
|
|
|
|
class NullWalker : public Regexp::Walker<bool> {
|
|
public:
|
|
NullWalker() { }
|
|
bool PostVisit(Regexp* re, bool parent_arg, bool pre_arg,
|
|
bool* child_args, int nchild_args);
|
|
|
|
bool ShortVisit(Regexp* re, bool a) {
|
|
// Should never be called: we use Walk not WalkExponential.
|
|
LOG(DFATAL) << "NullWalker::ShortVisit called";
|
|
return a;
|
|
}
|
|
|
|
private:
|
|
DISALLOW_EVIL_CONSTRUCTORS(NullWalker);
|
|
};
|
|
|
|
// Called after visiting re's children. child_args contains the return
|
|
// value from each of the children's PostVisits (i.e., whether each child
|
|
// can match an empty string). Returns whether this clause can match an
|
|
// empty string.
|
|
bool NullWalker::PostVisit(Regexp* re, bool parent_arg, bool pre_arg,
|
|
bool* child_args, int nchild_args) {
|
|
return false;
|
|
}
|
|
|
|
// Returns whether re can match an empty string.
|
|
void Regexp::NullWalk() {
|
|
NullWalker w;
|
|
w.Walk(this, false);
|
|
}
|
|
|
|
} // namespace re2
|