mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
sundry accessors/cast-ers; RE_Matcher's track their construction values
This commit is contained in:
parent
17affdb858
commit
d53d2ac755
8 changed files with 50 additions and 3 deletions
|
@ -96,6 +96,7 @@ class IndexAssignExpr;
|
||||||
class IndexExpr;
|
class IndexExpr;
|
||||||
class IsExpr;
|
class IsExpr;
|
||||||
class InlineExpr;
|
class InlineExpr;
|
||||||
|
class LambdaExpr;
|
||||||
class ListExpr;
|
class ListExpr;
|
||||||
class NameExpr;
|
class NameExpr;
|
||||||
class RefExpr;
|
class RefExpr;
|
||||||
|
@ -216,6 +217,7 @@ public:
|
||||||
ZEEK_EXPR_ACCESSOR_DECLS(IndexExpr)
|
ZEEK_EXPR_ACCESSOR_DECLS(IndexExpr)
|
||||||
ZEEK_EXPR_ACCESSOR_DECLS(IsExpr)
|
ZEEK_EXPR_ACCESSOR_DECLS(IsExpr)
|
||||||
ZEEK_EXPR_ACCESSOR_DECLS(InlineExpr)
|
ZEEK_EXPR_ACCESSOR_DECLS(InlineExpr)
|
||||||
|
ZEEK_EXPR_ACCESSOR_DECLS(LambdaExpr)
|
||||||
ZEEK_EXPR_ACCESSOR_DECLS(ListExpr)
|
ZEEK_EXPR_ACCESSOR_DECLS(ListExpr)
|
||||||
ZEEK_EXPR_ACCESSOR_DECLS(NameExpr)
|
ZEEK_EXPR_ACCESSOR_DECLS(NameExpr)
|
||||||
ZEEK_EXPR_ACCESSOR_DECLS(RefExpr)
|
ZEEK_EXPR_ACCESSOR_DECLS(RefExpr)
|
||||||
|
@ -1304,7 +1306,9 @@ public:
|
||||||
LambdaExpr(std::unique_ptr<function_ingredients> ingredients,
|
LambdaExpr(std::unique_ptr<function_ingredients> ingredients,
|
||||||
IDPList outer_ids);
|
IDPList outer_ids);
|
||||||
|
|
||||||
|
const std::string& Name() const { return my_name; }
|
||||||
const IDPList& OuterIDs() const { return outer_ids; }
|
const IDPList& OuterIDs() const { return outer_ids; }
|
||||||
|
const function_ingredients& Ingredients() const { return *ingredients; }
|
||||||
|
|
||||||
ValPtr Eval(Frame* f) const override;
|
ValPtr Eval(Frame* f) const override;
|
||||||
TraversalCode Traverse(TraversalCallback* cb) const override;
|
TraversalCode Traverse(TraversalCallback* cb) const override;
|
||||||
|
@ -1427,7 +1431,7 @@ class IsExpr final : public UnaryExpr {
|
||||||
public:
|
public:
|
||||||
IsExpr(ExprPtr op, TypePtr t);
|
IsExpr(ExprPtr op, TypePtr t);
|
||||||
|
|
||||||
TypePtr TestType() const { return t; }
|
const TypePtr& TestType() const { return t; }
|
||||||
|
|
||||||
// Optimization-related:
|
// Optimization-related:
|
||||||
ExprPtr Duplicate() override;
|
ExprPtr Duplicate() override;
|
||||||
|
|
|
@ -479,7 +479,7 @@ RE_Matcher::RE_Matcher()
|
||||||
re_exact = new detail::Specific_RE_Matcher(detail::MATCH_EXACTLY);
|
re_exact = new detail::Specific_RE_Matcher(detail::MATCH_EXACTLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
RE_Matcher::RE_Matcher(const char* pat)
|
RE_Matcher::RE_Matcher(const char* pat) : orig_text(pat)
|
||||||
{
|
{
|
||||||
re_anywhere = new detail::Specific_RE_Matcher(detail::MATCH_ANYWHERE);
|
re_anywhere = new detail::Specific_RE_Matcher(detail::MATCH_ANYWHERE);
|
||||||
re_exact = new detail::Specific_RE_Matcher(detail::MATCH_EXACTLY);
|
re_exact = new detail::Specific_RE_Matcher(detail::MATCH_EXACTLY);
|
||||||
|
@ -511,6 +511,8 @@ void RE_Matcher::MakeCaseInsensitive()
|
||||||
{
|
{
|
||||||
re_anywhere->MakeCaseInsensitive();
|
re_anywhere->MakeCaseInsensitive();
|
||||||
re_exact->MakeCaseInsensitive();
|
re_exact->MakeCaseInsensitive();
|
||||||
|
|
||||||
|
is_case_insensitive = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RE_Matcher::Compile(bool lazy)
|
bool RE_Matcher::Compile(bool lazy)
|
||||||
|
|
9
src/RE.h
9
src/RE.h
|
@ -197,6 +197,7 @@ public:
|
||||||
|
|
||||||
// Makes the matcher as specified to date case-insensitive.
|
// Makes the matcher as specified to date case-insensitive.
|
||||||
void MakeCaseInsensitive();
|
void MakeCaseInsensitive();
|
||||||
|
bool IsCaseInsensitive() const { return is_case_insensitive; }
|
||||||
|
|
||||||
bool Compile(bool lazy = false);
|
bool Compile(bool lazy = false);
|
||||||
|
|
||||||
|
@ -227,6 +228,10 @@ public:
|
||||||
const char* PatternText() const { return re_exact->PatternText(); }
|
const char* PatternText() const { return re_exact->PatternText(); }
|
||||||
const char* AnywherePatternText() const { return re_anywhere->PatternText(); }
|
const char* AnywherePatternText() const { return re_anywhere->PatternText(); }
|
||||||
|
|
||||||
|
// Original text used to construct this matcher. Empty unless
|
||||||
|
// the main ("explicit") constructor was used.
|
||||||
|
const char* OrigText() const { return orig_text.c_str(); }
|
||||||
|
|
||||||
unsigned int MemoryAllocation() const
|
unsigned int MemoryAllocation() const
|
||||||
{
|
{
|
||||||
return padded_sizeof(*this)
|
return padded_sizeof(*this)
|
||||||
|
@ -235,8 +240,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
std::string orig_text;
|
||||||
|
|
||||||
detail::Specific_RE_Matcher* re_anywhere;
|
detail::Specific_RE_Matcher* re_anywhere;
|
||||||
detail::Specific_RE_Matcher* re_exact;
|
detail::Specific_RE_Matcher* re_exact;
|
||||||
|
|
||||||
|
bool is_case_insensitive = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace zeek
|
} // namespace zeek
|
||||||
|
|
12
src/Type.cc
12
src/Type.cc
|
@ -147,6 +147,18 @@ FuncType* Type::AsFuncType()
|
||||||
return (FuncType*) this;
|
return (FuncType*) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const FileType* Type::AsFileType() const
|
||||||
|
{
|
||||||
|
CHECK_TYPE_TAG(TYPE_FILE, "Type::AsFileType");
|
||||||
|
return (const FileType*) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileType* Type::AsFileType()
|
||||||
|
{
|
||||||
|
CHECK_TYPE_TAG(TYPE_FILE, "Type::AsFileType");
|
||||||
|
return (FileType*) this;
|
||||||
|
}
|
||||||
|
|
||||||
const EnumType* Type::AsEnumType() const
|
const EnumType* Type::AsEnumType() const
|
||||||
{
|
{
|
||||||
CHECK_TYPE_TAG(TYPE_ENUM, "Type::AsEnumType");
|
CHECK_TYPE_TAG(TYPE_ENUM, "Type::AsEnumType");
|
||||||
|
|
|
@ -219,6 +219,9 @@ public:
|
||||||
const FuncType* AsFuncType() const;
|
const FuncType* AsFuncType() const;
|
||||||
FuncType* AsFuncType();
|
FuncType* AsFuncType();
|
||||||
|
|
||||||
|
const FileType* AsFileType() const;
|
||||||
|
FileType* AsFileType();
|
||||||
|
|
||||||
const EnumType* AsEnumType() const;
|
const EnumType* AsEnumType() const;
|
||||||
EnumType* AsEnumType();
|
EnumType* AsEnumType();
|
||||||
|
|
||||||
|
@ -595,6 +598,7 @@ public:
|
||||||
// Given an offset, returns the field's name.
|
// Given an offset, returns the field's name.
|
||||||
const char* FieldName(int field) const;
|
const char* FieldName(int field) const;
|
||||||
|
|
||||||
|
const type_decl_list* Types() const { return types; }
|
||||||
type_decl_list* Types() { return types; }
|
type_decl_list* Types() { return types; }
|
||||||
|
|
||||||
// Given an offset, returns the field's TypeDecl.
|
// Given an offset, returns the field's TypeDecl.
|
||||||
|
|
|
@ -71,6 +71,8 @@ Val::~Val()
|
||||||
CONVERTER(tag, ctype, name) \
|
CONVERTER(tag, ctype, name) \
|
||||||
CONST_CONVERTER(tag, ctype, name)
|
CONST_CONVERTER(tag, ctype, name)
|
||||||
|
|
||||||
|
CONVERTERS(TYPE_FUNC, FuncVal*, Val::AsFuncVal)
|
||||||
|
CONVERTERS(TYPE_FILE, FileVal*, Val::AsFileVal)
|
||||||
CONVERTERS(TYPE_PATTERN, PatternVal*, Val::AsPatternVal)
|
CONVERTERS(TYPE_PATTERN, PatternVal*, Val::AsPatternVal)
|
||||||
CONVERTERS(TYPE_PORT, PortVal*, Val::AsPortVal)
|
CONVERTERS(TYPE_PORT, PortVal*, Val::AsPortVal)
|
||||||
CONVERTERS(TYPE_SUBNET, SubNetVal*, Val::AsSubNetVal)
|
CONVERTERS(TYPE_SUBNET, SubNetVal*, Val::AsSubNetVal)
|
||||||
|
|
|
@ -61,6 +61,8 @@ class PortVal;
|
||||||
class AddrVal;
|
class AddrVal;
|
||||||
class SubNetVal;
|
class SubNetVal;
|
||||||
class IntervalVal;
|
class IntervalVal;
|
||||||
|
class FuncVal;
|
||||||
|
class FileVal;
|
||||||
class PatternVal;
|
class PatternVal;
|
||||||
class TableVal;
|
class TableVal;
|
||||||
class RecordVal;
|
class RecordVal;
|
||||||
|
@ -143,6 +145,12 @@ UNDERLYING_ACCESSOR_DECL(PatternVal, const RE_Matcher*, AsPattern)
|
||||||
UNDERLYING_ACCESSOR_DECL(TableVal, const PDict<TableEntryVal>*, AsTable)
|
UNDERLYING_ACCESSOR_DECL(TableVal, const PDict<TableEntryVal>*, AsTable)
|
||||||
UNDERLYING_ACCESSOR_DECL(TypeVal, zeek::Type*, AsType)
|
UNDERLYING_ACCESSOR_DECL(TypeVal, zeek::Type*, AsType)
|
||||||
|
|
||||||
|
FuncVal* AsFuncVal();
|
||||||
|
const FuncVal* AsFuncVal() const;
|
||||||
|
|
||||||
|
FileVal* AsFileVal();
|
||||||
|
const FileVal* AsFileVal() const;
|
||||||
|
|
||||||
PatternVal* AsPatternVal();
|
PatternVal* AsPatternVal();
|
||||||
const PatternVal* AsPatternVal() const;
|
const PatternVal* AsPatternVal() const;
|
||||||
|
|
||||||
|
|
|
@ -85,6 +85,12 @@ const AnyIndexExpr* Expr::AsAnyIndexExpr() const
|
||||||
return (const AnyIndexExpr*) this;
|
return (const AnyIndexExpr*) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const LambdaExpr* Expr::AsLambdaExpr() const
|
||||||
|
{
|
||||||
|
CHECK_TAG(tag, EXPR_LAMBDA, "ExprVal::AsLambdaExpr", expr_name)
|
||||||
|
return (const LambdaExpr*) this;
|
||||||
|
}
|
||||||
|
|
||||||
ExprPtr Expr::GetOp1() const { return nullptr; }
|
ExprPtr Expr::GetOp1() const { return nullptr; }
|
||||||
ExprPtr Expr::GetOp2() const { return nullptr; }
|
ExprPtr Expr::GetOp2() const { return nullptr; }
|
||||||
ExprPtr Expr::GetOp3() const { return nullptr; }
|
ExprPtr Expr::GetOp3() const { return nullptr; }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue