Mark a large number of common types as final that shouldn't be overrideden

This commit is contained in:
Tim Wojtulewicz 2020-04-03 15:24:40 -04:00
parent c2375fc88d
commit 9c89cd4a47
11 changed files with 93 additions and 93 deletions

View file

@ -34,7 +34,7 @@ typedef enum {
#define NUM_ATTRS (int(ATTR_DEPRECATED) + 1) #define NUM_ATTRS (int(ATTR_DEPRECATED) + 1)
} attr_tag; } attr_tag;
class Attr : public BroObj { class Attr final : public BroObj {
public: public:
Attr(attr_tag t, IntrusivePtr<Expr> e); Attr(attr_tag t, IntrusivePtr<Expr> e);
explicit Attr(attr_tag t); explicit Attr(attr_tag t);
@ -71,7 +71,7 @@ protected:
}; };
// Manages a collection of attributes. // Manages a collection of attributes.
class Attributes : public BroObj { class Attributes final : public BroObj {
public: public:
Attributes(attr_list* a, IntrusivePtr<BroType> t, bool in_record, bool is_global); Attributes(attr_list* a, IntrusivePtr<BroType> t, bool in_record, bool is_global);
~Attributes() override; ~Attributes() override;

View file

@ -59,7 +59,7 @@ static inline int addr_port_canon_lt(const IPAddr& addr1, uint32_t p1,
namespace analyzer { class Analyzer; } namespace analyzer { class Analyzer; }
class Connection : public BroObj { class Connection final : public BroObj {
public: public:
Connection(NetSessions* s, const ConnIDKey& k, double t, const ConnID* id, Connection(NetSessions* s, const ConnIDKey& k, double t, const ConnID* id,
uint32_t flow, const Packet* pkt, const EncapsulationStack* arg_encap); uint32_t flow, const Packet* pkt, const EncapsulationStack* arg_encap);

View file

@ -14,7 +14,7 @@
class EventMgr; class EventMgr;
class Event : public BroObj { class Event final : public BroObj {
public: public:
Event(EventHandlerPtr handler, zeek::Args args, Event(EventHandlerPtr handler, zeek::Args args,
SourceID src = SOURCE_LOCAL, analyzer::ID aid = 0, SourceID src = SOURCE_LOCAL, analyzer::ID aid = 0,

View file

@ -202,7 +202,7 @@ public:
return (IndexExpr*) this; return (IndexExpr*) this;
} }
void Describe(ODesc* d) const override; void Describe(ODesc* d) const override final;
virtual TraversalCode Traverse(TraversalCallback* cb) const = 0; virtual TraversalCode Traverse(TraversalCallback* cb) const = 0;
@ -232,7 +232,7 @@ protected:
bool paren; bool paren;
}; };
class NameExpr : public Expr { class NameExpr final : public Expr {
public: public:
explicit NameExpr(IntrusivePtr<ID> id, bool const_init = false); explicit NameExpr(IntrusivePtr<ID> id, bool const_init = false);
@ -252,7 +252,7 @@ protected:
bool in_const_init; bool in_const_init;
}; };
class ConstExpr : public Expr { class ConstExpr final : public Expr {
public: public:
explicit ConstExpr(IntrusivePtr<Val> val); explicit ConstExpr(IntrusivePtr<Val> val);
@ -350,7 +350,7 @@ protected:
IntrusivePtr<Expr> op2; IntrusivePtr<Expr> op2;
}; };
class CloneExpr : public UnaryExpr { class CloneExpr final : public UnaryExpr {
public: public:
explicit CloneExpr(IntrusivePtr<Expr> op); explicit CloneExpr(IntrusivePtr<Expr> op);
IntrusivePtr<Val> Eval(Frame* f) const override; IntrusivePtr<Val> Eval(Frame* f) const override;
@ -359,7 +359,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class IncrExpr : public UnaryExpr { class IncrExpr final : public UnaryExpr {
public: public:
IncrExpr(BroExprTag tag, IntrusivePtr<Expr> op); IncrExpr(BroExprTag tag, IntrusivePtr<Expr> op);
@ -368,7 +368,7 @@ public:
bool IsPure() const override; bool IsPure() const override;
}; };
class ComplementExpr : public UnaryExpr { class ComplementExpr final : public UnaryExpr {
public: public:
explicit ComplementExpr(IntrusivePtr<Expr> op); explicit ComplementExpr(IntrusivePtr<Expr> op);
@ -376,7 +376,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class NotExpr : public UnaryExpr { class NotExpr final : public UnaryExpr {
public: public:
explicit NotExpr(IntrusivePtr<Expr> op); explicit NotExpr(IntrusivePtr<Expr> op);
@ -384,7 +384,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class PosExpr : public UnaryExpr { class PosExpr final : public UnaryExpr {
public: public:
explicit PosExpr(IntrusivePtr<Expr> op); explicit PosExpr(IntrusivePtr<Expr> op);
@ -392,7 +392,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class NegExpr : public UnaryExpr { class NegExpr final : public UnaryExpr {
public: public:
explicit NegExpr(IntrusivePtr<Expr> op); explicit NegExpr(IntrusivePtr<Expr> op);
@ -400,7 +400,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class SizeExpr : public UnaryExpr { class SizeExpr final : public UnaryExpr {
public: public:
explicit SizeExpr(IntrusivePtr<Expr> op); explicit SizeExpr(IntrusivePtr<Expr> op);
IntrusivePtr<Val> Eval(Frame* f) const override; IntrusivePtr<Val> Eval(Frame* f) const override;
@ -409,36 +409,36 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class AddExpr : public BinaryExpr { class AddExpr final : public BinaryExpr {
public: public:
AddExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); AddExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override; void Canonicize() override;
}; };
class AddToExpr : public BinaryExpr { class AddToExpr final : public BinaryExpr {
public: public:
AddToExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); AddToExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
IntrusivePtr<Val> Eval(Frame* f) const override; IntrusivePtr<Val> Eval(Frame* f) const override;
}; };
class RemoveFromExpr : public BinaryExpr { class RemoveFromExpr final : public BinaryExpr {
public: public:
RemoveFromExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); RemoveFromExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
IntrusivePtr<Val> Eval(Frame* f) const override; IntrusivePtr<Val> Eval(Frame* f) const override;
}; };
class SubExpr : public BinaryExpr { class SubExpr final : public BinaryExpr {
public: public:
SubExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); SubExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
}; };
class TimesExpr : public BinaryExpr { class TimesExpr final : public BinaryExpr {
public: public:
TimesExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); TimesExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override; void Canonicize() override;
}; };
class DivideExpr : public BinaryExpr { class DivideExpr final : public BinaryExpr {
public: public:
DivideExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); DivideExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
@ -446,12 +446,12 @@ protected:
IntrusivePtr<Val> AddrFold(Val* v1, Val* v2) const override; IntrusivePtr<Val> AddrFold(Val* v1, Val* v2) const override;
}; };
class ModExpr : public BinaryExpr { class ModExpr final : public BinaryExpr {
public: public:
ModExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); ModExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
}; };
class BoolExpr : public BinaryExpr { class BoolExpr final : public BinaryExpr {
public: public:
BoolExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); BoolExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
@ -459,12 +459,12 @@ public:
IntrusivePtr<Val> DoSingleEval(Frame* f, IntrusivePtr<Val> v1, Expr* op2) const; IntrusivePtr<Val> DoSingleEval(Frame* f, IntrusivePtr<Val> v1, Expr* op2) const;
}; };
class BitExpr : public BinaryExpr { class BitExpr final : public BinaryExpr {
public: public:
BitExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); BitExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
}; };
class EqExpr : public BinaryExpr { class EqExpr final : public BinaryExpr {
public: public:
EqExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); EqExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override; void Canonicize() override;
@ -473,13 +473,13 @@ protected:
IntrusivePtr<Val> Fold(Val* v1, Val* v2) const override; IntrusivePtr<Val> Fold(Val* v1, Val* v2) const override;
}; };
class RelExpr : public BinaryExpr { class RelExpr final : public BinaryExpr {
public: public:
RelExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); RelExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override; void Canonicize() override;
}; };
class CondExpr : public Expr { class CondExpr final : public Expr {
public: public:
CondExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2, IntrusivePtr<Expr> op3); CondExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2, IntrusivePtr<Expr> op3);
@ -500,7 +500,7 @@ protected:
IntrusivePtr<Expr> op3; IntrusivePtr<Expr> op3;
}; };
class RefExpr : public UnaryExpr { class RefExpr final : public UnaryExpr {
public: public:
explicit RefExpr(IntrusivePtr<Expr> op); explicit RefExpr(IntrusivePtr<Expr> op);
@ -530,14 +530,14 @@ protected:
IntrusivePtr<Val> val; // optional IntrusivePtr<Val> val; // optional
}; };
class IndexSliceAssignExpr : public AssignExpr { class IndexSliceAssignExpr final : public AssignExpr {
public: public:
IndexSliceAssignExpr(IntrusivePtr<Expr> op1, IndexSliceAssignExpr(IntrusivePtr<Expr> op1,
IntrusivePtr<Expr> op2, bool is_init); IntrusivePtr<Expr> op2, bool is_init);
IntrusivePtr<Val> Eval(Frame* f) const override; IntrusivePtr<Val> Eval(Frame* f) const override;
}; };
class IndexExpr : public BinaryExpr { class IndexExpr final : public BinaryExpr {
public: public:
IndexExpr(IntrusivePtr<Expr> op1, IndexExpr(IntrusivePtr<Expr> op1,
IntrusivePtr<ListExpr> op2, bool is_slice = false); IntrusivePtr<ListExpr> op2, bool is_slice = false);
@ -567,7 +567,7 @@ protected:
bool is_slice; bool is_slice;
}; };
class FieldExpr : public UnaryExpr { class FieldExpr final : public UnaryExpr {
public: public:
FieldExpr(IntrusivePtr<Expr> op, const char* field_name); FieldExpr(IntrusivePtr<Expr> op, const char* field_name);
~FieldExpr() override; ~FieldExpr() override;
@ -594,7 +594,7 @@ protected:
// "rec?$fieldname" is true if the value of $fieldname in rec is not nil. // "rec?$fieldname" is true if the value of $fieldname in rec is not nil.
// "rec?$$attrname" is true if the attribute attrname is not nil. // "rec?$$attrname" is true if the attribute attrname is not nil.
class HasFieldExpr : public UnaryExpr { class HasFieldExpr final : public UnaryExpr {
public: public:
HasFieldExpr(IntrusivePtr<Expr> op, const char* field_name); HasFieldExpr(IntrusivePtr<Expr> op, const char* field_name);
~HasFieldExpr() override; ~HasFieldExpr() override;
@ -610,7 +610,7 @@ protected:
int field; int field;
}; };
class RecordConstructorExpr : public UnaryExpr { class RecordConstructorExpr final : public UnaryExpr {
public: public:
explicit RecordConstructorExpr(IntrusivePtr<ListExpr> constructor_list); explicit RecordConstructorExpr(IntrusivePtr<ListExpr> constructor_list);
~RecordConstructorExpr() override; ~RecordConstructorExpr() override;
@ -622,7 +622,7 @@ protected:
void ExprDescribe(ODesc* d) const override; void ExprDescribe(ODesc* d) const override;
}; };
class TableConstructorExpr : public UnaryExpr { class TableConstructorExpr final : public UnaryExpr {
public: public:
TableConstructorExpr(IntrusivePtr<ListExpr> constructor_list, attr_list* attrs, TableConstructorExpr(IntrusivePtr<ListExpr> constructor_list, attr_list* attrs,
IntrusivePtr<BroType> arg_type = nullptr); IntrusivePtr<BroType> arg_type = nullptr);
@ -640,7 +640,7 @@ protected:
Attributes* attrs; Attributes* attrs;
}; };
class SetConstructorExpr : public UnaryExpr { class SetConstructorExpr final : public UnaryExpr {
public: public:
SetConstructorExpr(IntrusivePtr<ListExpr> constructor_list, attr_list* attrs, SetConstructorExpr(IntrusivePtr<ListExpr> constructor_list, attr_list* attrs,
IntrusivePtr<BroType> arg_type = nullptr); IntrusivePtr<BroType> arg_type = nullptr);
@ -658,7 +658,7 @@ protected:
Attributes* attrs; Attributes* attrs;
}; };
class VectorConstructorExpr : public UnaryExpr { class VectorConstructorExpr final : public UnaryExpr {
public: public:
explicit VectorConstructorExpr(IntrusivePtr<ListExpr> constructor_list, explicit VectorConstructorExpr(IntrusivePtr<ListExpr> constructor_list,
IntrusivePtr<BroType> arg_type = nullptr); IntrusivePtr<BroType> arg_type = nullptr);
@ -671,7 +671,7 @@ protected:
void ExprDescribe(ODesc* d) const override; void ExprDescribe(ODesc* d) const override;
}; };
class FieldAssignExpr : public UnaryExpr { class FieldAssignExpr final : public UnaryExpr {
public: public:
FieldAssignExpr(const char* field_name, IntrusivePtr<Expr> value); FieldAssignExpr(const char* field_name, IntrusivePtr<Expr> value);
@ -686,7 +686,7 @@ protected:
string field_name; string field_name;
}; };
class ArithCoerceExpr : public UnaryExpr { class ArithCoerceExpr final : public UnaryExpr {
public: public:
ArithCoerceExpr(IntrusivePtr<Expr> op, TypeTag t); ArithCoerceExpr(IntrusivePtr<Expr> op, TypeTag t);
@ -695,7 +695,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class RecordCoerceExpr : public UnaryExpr { class RecordCoerceExpr final : public UnaryExpr {
public: public:
RecordCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<RecordType> r); RecordCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<RecordType> r);
~RecordCoerceExpr() override; ~RecordCoerceExpr() override;
@ -710,7 +710,7 @@ protected:
int map_size; // equivalent to Type()->AsRecordType()->NumFields() int map_size; // equivalent to Type()->AsRecordType()->NumFields()
}; };
class TableCoerceExpr : public UnaryExpr { class TableCoerceExpr final : public UnaryExpr {
public: public:
TableCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<TableType> r); TableCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<TableType> r);
~TableCoerceExpr() override; ~TableCoerceExpr() override;
@ -719,7 +719,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override; IntrusivePtr<Val> Fold(Val* v) const override;
}; };
class VectorCoerceExpr : public UnaryExpr { class VectorCoerceExpr final : public UnaryExpr {
public: public:
VectorCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<VectorType> v); VectorCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<VectorType> v);
~VectorCoerceExpr() override; ~VectorCoerceExpr() override;
@ -730,7 +730,7 @@ protected:
// An internal operator for flattening array indices that are records // An internal operator for flattening array indices that are records
// into a list of individual values. // into a list of individual values.
class FlattenExpr : public UnaryExpr { class FlattenExpr final : public UnaryExpr {
public: public:
explicit FlattenExpr(IntrusivePtr<Expr> op); explicit FlattenExpr(IntrusivePtr<Expr> op);
@ -752,7 +752,7 @@ protected:
zeek::Args args; zeek::Args args;
}; };
class ScheduleExpr : public Expr { class ScheduleExpr final : public Expr {
public: public:
ScheduleExpr(IntrusivePtr<Expr> when, IntrusivePtr<EventExpr> event); ScheduleExpr(IntrusivePtr<Expr> when, IntrusivePtr<EventExpr> event);
@ -772,7 +772,7 @@ protected:
IntrusivePtr<EventExpr> event; IntrusivePtr<EventExpr> event;
}; };
class InExpr : public BinaryExpr { class InExpr final : public BinaryExpr {
public: public:
InExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2); InExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
@ -781,7 +781,7 @@ protected:
}; };
class CallExpr : public Expr { class CallExpr final : public Expr {
public: public:
CallExpr(IntrusivePtr<Expr> func, IntrusivePtr<ListExpr> args, CallExpr(IntrusivePtr<Expr> func, IntrusivePtr<ListExpr> args,
bool in_hook = false); bool in_hook = false);
@ -808,7 +808,7 @@ protected:
* On evaluation, captures the frame that it is evaluated in. This becomes * On evaluation, captures the frame that it is evaluated in. This becomes
* the closure for the instance of the function that it creates. * the closure for the instance of the function that it creates.
*/ */
class LambdaExpr : public Expr { class LambdaExpr final : public Expr {
public: public:
LambdaExpr(std::unique_ptr<function_ingredients> ingredients, LambdaExpr(std::unique_ptr<function_ingredients> ingredients,
id_list outer_ids); id_list outer_ids);
@ -828,7 +828,7 @@ private:
std::string my_name; std::string my_name;
}; };
class EventExpr : public Expr { class EventExpr final : public Expr {
public: public:
EventExpr(const char* name, IntrusivePtr<ListExpr> args); EventExpr(const char* name, IntrusivePtr<ListExpr> args);
@ -880,12 +880,12 @@ protected:
}; };
class RecordAssignExpr : public ListExpr { class RecordAssignExpr final : public ListExpr {
public: public:
RecordAssignExpr(const IntrusivePtr<Expr>& record, const IntrusivePtr<Expr>& init_list, bool is_init); RecordAssignExpr(const IntrusivePtr<Expr>& record, const IntrusivePtr<Expr>& init_list, bool is_init);
}; };
class CastExpr : public UnaryExpr { class CastExpr final : public UnaryExpr {
public: public:
CastExpr(IntrusivePtr<Expr> op, IntrusivePtr<BroType> t); CastExpr(IntrusivePtr<Expr> op, IntrusivePtr<BroType> t);
@ -894,7 +894,7 @@ protected:
void ExprDescribe(ODesc* d) const override; void ExprDescribe(ODesc* d) const override;
}; };
class IsExpr : public UnaryExpr { class IsExpr final : public UnaryExpr {
public: public:
IsExpr(IntrusivePtr<Expr> op, IntrusivePtr<BroType> t); IsExpr(IntrusivePtr<Expr> op, IntrusivePtr<BroType> t);

View file

@ -19,7 +19,7 @@ class Attributes;
class BroType; class BroType;
class RecordVal; class RecordVal;
class BroFile : public BroObj { class BroFile final : public BroObj {
public: public:
explicit BroFile(FILE* arg_f); explicit BroFile(FILE* arg_f);
BroFile(FILE* arg_f, const char* filename, const char* access); BroFile(FILE* arg_f, const char* filename, const char* access);

View file

@ -118,7 +118,7 @@ protected:
}; };
class BroFunc : public Func { class BroFunc final : public Func {
public: public:
BroFunc(ID* id, IntrusivePtr<Stmt> body, id_list* inits, size_t frame_size, int priority); BroFunc(ID* id, IntrusivePtr<Stmt> body, id_list* inits, size_t frame_size, int priority);
~BroFunc() override; ~BroFunc() override;
@ -193,7 +193,7 @@ private:
using built_in_func = Val* (*)(Frame* frame, const zeek::Args* args); using built_in_func = Val* (*)(Frame* frame, const zeek::Args* args);
class BuiltinFunc : public Func { class BuiltinFunc final : public Func {
public: public:
BuiltinFunc(built_in_func func, const char* name, bool is_pure); BuiltinFunc(built_in_func func, const char* name, bool is_pure);
~BuiltinFunc() override; ~BuiltinFunc() override;

View file

@ -21,7 +21,7 @@ class Attributes;
typedef enum { INIT_NONE, INIT_FULL, INIT_EXTRA, INIT_REMOVE, } init_class; typedef enum { INIT_NONE, INIT_FULL, INIT_EXTRA, INIT_REMOVE, } init_class;
typedef enum { SCOPE_FUNCTION, SCOPE_MODULE, SCOPE_GLOBAL } IDScope; typedef enum { SCOPE_FUNCTION, SCOPE_MODULE, SCOPE_GLOBAL } IDScope;
class ID : public BroObj, public notifier::Modifiable { class ID final : public BroObj, public notifier::Modifiable {
public: public:
ID(const char* name, IDScope arg_scope, bool arg_is_export); ID(const char* name, IDScope arg_scope, bool arg_is_export);
~ID() override; ~ID() override;

View file

@ -103,7 +103,7 @@ protected:
IntrusivePtr<ListExpr> l; IntrusivePtr<ListExpr> l;
}; };
class PrintStmt : public ExprListStmt { class PrintStmt final : public ExprListStmt {
public: public:
template<typename L> template<typename L>
explicit PrintStmt(L&& l) : ExprListStmt(STMT_PRINT, std::forward<L>(l)) { } explicit PrintStmt(L&& l) : ExprListStmt(STMT_PRINT, std::forward<L>(l)) { }
@ -136,7 +136,7 @@ protected:
IntrusivePtr<Expr> e; IntrusivePtr<Expr> e;
}; };
class IfStmt : public ExprStmt { class IfStmt final : public ExprStmt {
public: public:
IfStmt(IntrusivePtr<Expr> test, IntrusivePtr<Stmt> s1, IntrusivePtr<Stmt> s2); IfStmt(IntrusivePtr<Expr> test, IntrusivePtr<Stmt> s1, IntrusivePtr<Stmt> s2);
~IfStmt() override; ~IfStmt() override;
@ -156,7 +156,7 @@ protected:
IntrusivePtr<Stmt> s2; IntrusivePtr<Stmt> s2;
}; };
class Case : public BroObj { class Case final : public BroObj {
public: public:
Case(IntrusivePtr<ListExpr> c, id_list* types, IntrusivePtr<Stmt> arg_s); Case(IntrusivePtr<ListExpr> c, id_list* types, IntrusivePtr<Stmt> arg_s);
~Case() override; ~Case() override;
@ -180,9 +180,9 @@ protected:
IntrusivePtr<Stmt> s; IntrusivePtr<Stmt> s;
}; };
typedef PList<Case> case_list; using case_list = PList<Case>;
class SwitchStmt : public ExprStmt { class SwitchStmt final : public ExprStmt {
public: public:
SwitchStmt(IntrusivePtr<Expr> index, case_list* cases); SwitchStmt(IntrusivePtr<Expr> index, case_list* cases);
~SwitchStmt() override; ~SwitchStmt() override;
@ -223,7 +223,7 @@ protected:
std::vector<std::pair<ID*, int>> case_label_type_list; std::vector<std::pair<ID*, int>> case_label_type_list;
}; };
class AddStmt : public ExprStmt { class AddStmt final : public ExprStmt {
public: public:
explicit AddStmt(IntrusivePtr<Expr> e); explicit AddStmt(IntrusivePtr<Expr> e);
@ -233,7 +233,7 @@ public:
TraversalCode Traverse(TraversalCallback* cb) const override; TraversalCode Traverse(TraversalCallback* cb) const override;
}; };
class DelStmt : public ExprStmt { class DelStmt final : public ExprStmt {
public: public:
explicit DelStmt(IntrusivePtr<Expr> e); explicit DelStmt(IntrusivePtr<Expr> e);
@ -243,7 +243,7 @@ public:
TraversalCode Traverse(TraversalCallback* cb) const override; TraversalCode Traverse(TraversalCallback* cb) const override;
}; };
class EventStmt : public ExprStmt { class EventStmt final : public ExprStmt {
public: public:
explicit EventStmt(IntrusivePtr<EventExpr> e); explicit EventStmt(IntrusivePtr<EventExpr> e);
@ -255,7 +255,7 @@ protected:
IntrusivePtr<EventExpr> event_expr; IntrusivePtr<EventExpr> event_expr;
}; };
class WhileStmt : public Stmt { class WhileStmt final : public Stmt {
public: public:
WhileStmt(IntrusivePtr<Expr> loop_condition, IntrusivePtr<Stmt> body); WhileStmt(IntrusivePtr<Expr> loop_condition, IntrusivePtr<Stmt> body);
@ -274,7 +274,7 @@ protected:
IntrusivePtr<Stmt> body; IntrusivePtr<Stmt> body;
}; };
class ForStmt : public ExprStmt { class ForStmt final : public ExprStmt {
public: public:
ForStmt(id_list* loop_vars, IntrusivePtr<Expr> loop_expr); ForStmt(id_list* loop_vars, IntrusivePtr<Expr> loop_expr);
// Special constructor for key value for loop. // Special constructor for key value for loop.
@ -303,7 +303,7 @@ protected:
IntrusivePtr<ID> value_var; IntrusivePtr<ID> value_var;
}; };
class NextStmt : public Stmt { class NextStmt final : public Stmt {
public: public:
NextStmt() : Stmt(STMT_NEXT) { } NextStmt() : Stmt(STMT_NEXT) { }
@ -317,7 +317,7 @@ public:
protected: protected:
}; };
class BreakStmt : public Stmt { class BreakStmt final : public Stmt {
public: public:
BreakStmt() : Stmt(STMT_BREAK) { } BreakStmt() : Stmt(STMT_BREAK) { }
@ -331,7 +331,7 @@ public:
protected: protected:
}; };
class FallthroughStmt : public Stmt { class FallthroughStmt final : public Stmt {
public: public:
FallthroughStmt() : Stmt(STMT_FALLTHROUGH) { } FallthroughStmt() : Stmt(STMT_FALLTHROUGH) { }
@ -345,7 +345,7 @@ public:
protected: protected:
}; };
class ReturnStmt : public ExprStmt { class ReturnStmt final : public ExprStmt {
public: public:
explicit ReturnStmt(IntrusivePtr<Expr> e); explicit ReturnStmt(IntrusivePtr<Expr> e);
@ -374,7 +374,7 @@ protected:
stmt_list stmts; stmt_list stmts;
}; };
class EventBodyList : public StmtList { class EventBodyList final : public StmtList {
public: public:
EventBodyList() : StmtList() EventBodyList() : StmtList()
{ topmost = false; tag = STMT_EVENT_BODY_LIST; } { topmost = false; tag = STMT_EVENT_BODY_LIST; }
@ -391,7 +391,7 @@ protected:
bool topmost; bool topmost;
}; };
class InitStmt : public Stmt { class InitStmt final : public Stmt {
public: public:
explicit InitStmt(id_list* arg_inits); explicit InitStmt(id_list* arg_inits);
@ -409,7 +409,7 @@ protected:
id_list* inits; id_list* inits;
}; };
class NullStmt : public Stmt { class NullStmt final : public Stmt {
public: public:
NullStmt() : Stmt(STMT_NULL) { } NullStmt() : Stmt(STMT_NULL) { }
@ -421,7 +421,7 @@ public:
TraversalCode Traverse(TraversalCallback* cb) const override; TraversalCode Traverse(TraversalCallback* cb) const override;
}; };
class WhenStmt : public Stmt { class WhenStmt final : public Stmt {
public: public:
// s2 is null if no timeout block given. // s2 is null if no timeout block given.
WhenStmt(IntrusivePtr<Expr> cond, WhenStmt(IntrusivePtr<Expr> cond,

View file

@ -25,7 +25,7 @@ using std::map;
class TriggerTimer; class TriggerTimer;
class TriggerTraversalCallback; class TriggerTraversalCallback;
class Trigger : public BroObj, public notifier::Receiver { class Trigger final : public BroObj, public notifier::Receiver {
public: public:
// Don't access Trigger objects; they take care of themselves after // Don't access Trigger objects; they take care of themselves after
// instantiation. Note that if the condition is already true, the // instantiation. Note that if the condition is already true, the

View file

@ -345,7 +345,7 @@ private:
static TypeAliasMap type_aliases; static TypeAliasMap type_aliases;
}; };
class TypeList : public BroType { class TypeList final : public BroType {
public: public:
explicit TypeList(IntrusivePtr<BroType> arg_pure_type = nullptr) explicit TypeList(IntrusivePtr<BroType> arg_pure_type = nullptr)
: BroType(TYPE_LIST), pure_type(std::move(arg_pure_type)) : BroType(TYPE_LIST), pure_type(std::move(arg_pure_type))
@ -424,7 +424,7 @@ protected:
TypeList* ExpandRecordIndex(RecordType* rt) const; TypeList* ExpandRecordIndex(RecordType* rt) const;
}; };
class SetType : public TableType { class SetType final : public TableType {
public: public:
SetType(IntrusivePtr<TypeList> ind, IntrusivePtr<ListExpr> arg_elements); SetType(IntrusivePtr<TypeList> ind, IntrusivePtr<ListExpr> arg_elements);
~SetType() override; ~SetType() override;
@ -437,7 +437,7 @@ protected:
IntrusivePtr<ListExpr> elements; IntrusivePtr<ListExpr> elements;
}; };
class FuncType : public BroType { class FuncType final : public BroType {
public: public:
FuncType(IntrusivePtr<RecordType> args, IntrusivePtr<BroType> yield, FuncType(IntrusivePtr<RecordType> args, IntrusivePtr<BroType> yield,
function_flavor f); function_flavor f);
@ -472,7 +472,7 @@ protected:
function_flavor flavor; function_flavor flavor;
}; };
class TypeType : public BroType { class TypeType final : public BroType {
public: public:
explicit TypeType(IntrusivePtr<BroType> t) : BroType(TYPE_TYPE), type(std::move(t)) {} explicit TypeType(IntrusivePtr<BroType> t) : BroType(TYPE_TYPE), type(std::move(t)) {}
TypeType* ShallowClone() override { return new TypeType(type); } TypeType* ShallowClone() override { return new TypeType(type); }
@ -501,7 +501,7 @@ public:
typedef PList<TypeDecl> type_decl_list; typedef PList<TypeDecl> type_decl_list;
class RecordType : public BroType { class RecordType final : public BroType {
public: public:
explicit RecordType(type_decl_list* types); explicit RecordType(type_decl_list* types);
RecordType* ShallowClone() override; RecordType* ShallowClone() override;
@ -565,13 +565,13 @@ protected:
type_decl_list* types; type_decl_list* types;
}; };
class SubNetType : public BroType { class SubNetType final : public BroType {
public: public:
SubNetType(); SubNetType();
void Describe(ODesc* d) const override; void Describe(ODesc* d) const override;
}; };
class FileType : public BroType { class FileType final : public BroType {
public: public:
explicit FileType(IntrusivePtr<BroType> yield_type); explicit FileType(IntrusivePtr<BroType> yield_type);
FileType* ShallowClone() override { return new FileType(yield); } FileType* ShallowClone() override { return new FileType(yield); }
@ -585,7 +585,7 @@ protected:
IntrusivePtr<BroType> yield; IntrusivePtr<BroType> yield;
}; };
class OpaqueType : public BroType { class OpaqueType final : public BroType {
public: public:
explicit OpaqueType(const std::string& name); explicit OpaqueType(const std::string& name);
OpaqueType* ShallowClone() override { return new OpaqueType(name); } OpaqueType* ShallowClone() override { return new OpaqueType(name); }
@ -602,7 +602,7 @@ protected:
std::string name; std::string name;
}; };
class EnumType : public BroType { class EnumType final : public BroType {
public: public:
typedef std::list<std::pair<std::string, bro_int_t> > enum_name_list; typedef std::list<std::pair<std::string, bro_int_t> > enum_name_list;
@ -655,7 +655,7 @@ protected:
bro_int_t counter; bro_int_t counter;
}; };
class VectorType : public BroType { class VectorType final : public BroType {
public: public:
explicit VectorType(IntrusivePtr<BroType> t); explicit VectorType(IntrusivePtr<BroType> t);
VectorType* ShallowClone() override; VectorType* ShallowClone() override;

View file

@ -458,7 +458,7 @@ extern ValManager* val_mgr;
#define Hours (60*Minutes) #define Hours (60*Minutes)
#define Days (24*Hours) #define Days (24*Hours)
class IntervalVal : public Val { class IntervalVal final : public Val {
public: public:
IntervalVal(double quantity, double units); IntervalVal(double quantity, double units);
@ -469,7 +469,7 @@ protected:
}; };
class PortVal : public Val { class PortVal final : public Val {
public: public:
IntrusivePtr<Val> SizeVal() const override; IntrusivePtr<Val> SizeVal() const override;
@ -505,7 +505,7 @@ protected:
IntrusivePtr<Val> DoClone(CloneState* state) override; IntrusivePtr<Val> DoClone(CloneState* state) override;
}; };
class AddrVal : public Val { class AddrVal final : public Val {
public: public:
explicit AddrVal(const char* text); explicit AddrVal(const char* text);
explicit AddrVal(const std::string& text); explicit AddrVal(const std::string& text);
@ -524,7 +524,7 @@ protected:
IntrusivePtr<Val> DoClone(CloneState* state) override; IntrusivePtr<Val> DoClone(CloneState* state) override;
}; };
class SubNetVal : public Val { class SubNetVal final : public Val {
public: public:
explicit SubNetVal(const char* text); explicit SubNetVal(const char* text);
SubNetVal(const char* text, int width); SubNetVal(const char* text, int width);
@ -549,7 +549,7 @@ protected:
IntrusivePtr<Val> DoClone(CloneState* state) override; IntrusivePtr<Val> DoClone(CloneState* state) override;
}; };
class StringVal : public Val { class StringVal final : public Val {
public: public:
explicit StringVal(BroString* s); explicit StringVal(BroString* s);
explicit StringVal(const char* s); explicit StringVal(const char* s);
@ -579,7 +579,7 @@ protected:
IntrusivePtr<Val> DoClone(CloneState* state) override; IntrusivePtr<Val> DoClone(CloneState* state) override;
}; };
class PatternVal : public Val { class PatternVal final : public Val {
public: public:
explicit PatternVal(RE_Matcher* re); explicit PatternVal(RE_Matcher* re);
~PatternVal() override; ~PatternVal() override;
@ -597,7 +597,7 @@ protected:
// ListVals are mainly used to index tables that have more than one // ListVals are mainly used to index tables that have more than one
// element in their index. // element in their index.
class ListVal : public Val { class ListVal final : public Val {
public: public:
explicit ListVal(TypeTag t); explicit ListVal(TypeTag t);
~ListVal() override; ~ListVal() override;
@ -691,7 +691,7 @@ class CompositeHash;
class HashKey; class HashKey;
class Frame; class Frame;
class TableVal : public Val, public notifier::Modifiable { class TableVal final : public Val, public notifier::Modifiable {
public: public:
explicit TableVal(IntrusivePtr<TableType> t, IntrusivePtr<Attributes> attrs = nullptr); explicit TableVal(IntrusivePtr<TableType> t, IntrusivePtr<Attributes> attrs = nullptr);
~TableVal() override; ~TableVal() override;
@ -878,7 +878,7 @@ protected:
static ParseTimeTableStates parse_time_table_states; static ParseTimeTableStates parse_time_table_states;
}; };
class RecordVal : public Val, public notifier::Modifiable { class RecordVal final : public Val, public notifier::Modifiable {
public: public:
explicit RecordVal(RecordType* t, bool init_fields = true); explicit RecordVal(RecordType* t, bool init_fields = true);
~RecordVal() override; ~RecordVal() override;
@ -947,7 +947,7 @@ protected:
static RecordTypeValMap parse_time_records; static RecordTypeValMap parse_time_records;
}; };
class EnumVal : public Val { class EnumVal final : public Val {
public: public:
IntrusivePtr<Val> SizeVal() const override; IntrusivePtr<Val> SizeVal() const override;
@ -964,7 +964,7 @@ protected:
}; };
class VectorVal : public Val, public notifier::Modifiable { class VectorVal final : public Val, public notifier::Modifiable {
public: public:
explicit VectorVal(VectorType* t); explicit VectorVal(VectorType* t);
~VectorVal() override; ~VectorVal() override;