diff --git a/src/Attr.h b/src/Attr.h index f09b3a7a6e..7271bdd1f6 100644 --- a/src/Attr.h +++ b/src/Attr.h @@ -34,7 +34,7 @@ typedef enum { #define NUM_ATTRS (int(ATTR_DEPRECATED) + 1) } attr_tag; -class Attr : public BroObj { +class Attr final : public BroObj { public: Attr(attr_tag t, IntrusivePtr e); explicit Attr(attr_tag t); @@ -71,7 +71,7 @@ protected: }; // Manages a collection of attributes. -class Attributes : public BroObj { +class Attributes final : public BroObj { public: Attributes(attr_list* a, IntrusivePtr t, bool in_record, bool is_global); ~Attributes() override; diff --git a/src/Conn.h b/src/Conn.h index 4211520525..53ece49bef 100644 --- a/src/Conn.h +++ b/src/Conn.h @@ -59,7 +59,7 @@ static inline int addr_port_canon_lt(const IPAddr& addr1, uint32_t p1, namespace analyzer { class Analyzer; } -class Connection : public BroObj { +class Connection final : public BroObj { public: Connection(NetSessions* s, const ConnIDKey& k, double t, const ConnID* id, uint32_t flow, const Packet* pkt, const EncapsulationStack* arg_encap); diff --git a/src/Event.h b/src/Event.h index 6bf43a0aa4..9f353ad235 100644 --- a/src/Event.h +++ b/src/Event.h @@ -14,7 +14,7 @@ class EventMgr; -class Event : public BroObj { +class Event final : public BroObj { public: Event(EventHandlerPtr handler, zeek::Args args, SourceID src = SOURCE_LOCAL, analyzer::ID aid = 0, diff --git a/src/Expr.h b/src/Expr.h index 8013d8129a..33b3a05b8b 100644 --- a/src/Expr.h +++ b/src/Expr.h @@ -202,7 +202,7 @@ public: return (IndexExpr*) this; } - void Describe(ODesc* d) const override; + void Describe(ODesc* d) const override final; virtual TraversalCode Traverse(TraversalCallback* cb) const = 0; @@ -232,7 +232,7 @@ protected: bool paren; }; -class NameExpr : public Expr { +class NameExpr final : public Expr { public: explicit NameExpr(IntrusivePtr id, bool const_init = false); @@ -252,7 +252,7 @@ protected: bool in_const_init; }; -class ConstExpr : public Expr { +class ConstExpr final : public Expr { public: explicit ConstExpr(IntrusivePtr val); @@ -350,7 +350,7 @@ protected: IntrusivePtr op2; }; -class CloneExpr : public UnaryExpr { +class CloneExpr final : public UnaryExpr { public: explicit CloneExpr(IntrusivePtr op); IntrusivePtr Eval(Frame* f) const override; @@ -359,7 +359,7 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class IncrExpr : public UnaryExpr { +class IncrExpr final : public UnaryExpr { public: IncrExpr(BroExprTag tag, IntrusivePtr op); @@ -368,7 +368,7 @@ public: bool IsPure() const override; }; -class ComplementExpr : public UnaryExpr { +class ComplementExpr final : public UnaryExpr { public: explicit ComplementExpr(IntrusivePtr op); @@ -376,7 +376,7 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class NotExpr : public UnaryExpr { +class NotExpr final : public UnaryExpr { public: explicit NotExpr(IntrusivePtr op); @@ -384,7 +384,7 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class PosExpr : public UnaryExpr { +class PosExpr final : public UnaryExpr { public: explicit PosExpr(IntrusivePtr op); @@ -392,7 +392,7 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class NegExpr : public UnaryExpr { +class NegExpr final : public UnaryExpr { public: explicit NegExpr(IntrusivePtr op); @@ -400,7 +400,7 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class SizeExpr : public UnaryExpr { +class SizeExpr final : public UnaryExpr { public: explicit SizeExpr(IntrusivePtr op); IntrusivePtr Eval(Frame* f) const override; @@ -409,36 +409,36 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class AddExpr : public BinaryExpr { +class AddExpr final : public BinaryExpr { public: AddExpr(IntrusivePtr op1, IntrusivePtr op2); void Canonicize() override; }; -class AddToExpr : public BinaryExpr { +class AddToExpr final : public BinaryExpr { public: AddToExpr(IntrusivePtr op1, IntrusivePtr op2); IntrusivePtr Eval(Frame* f) const override; }; -class RemoveFromExpr : public BinaryExpr { +class RemoveFromExpr final : public BinaryExpr { public: RemoveFromExpr(IntrusivePtr op1, IntrusivePtr op2); IntrusivePtr Eval(Frame* f) const override; }; -class SubExpr : public BinaryExpr { +class SubExpr final : public BinaryExpr { public: SubExpr(IntrusivePtr op1, IntrusivePtr op2); }; -class TimesExpr : public BinaryExpr { +class TimesExpr final : public BinaryExpr { public: TimesExpr(IntrusivePtr op1, IntrusivePtr op2); void Canonicize() override; }; -class DivideExpr : public BinaryExpr { +class DivideExpr final : public BinaryExpr { public: DivideExpr(IntrusivePtr op1, IntrusivePtr op2); @@ -446,12 +446,12 @@ protected: IntrusivePtr AddrFold(Val* v1, Val* v2) const override; }; -class ModExpr : public BinaryExpr { +class ModExpr final : public BinaryExpr { public: ModExpr(IntrusivePtr op1, IntrusivePtr op2); }; -class BoolExpr : public BinaryExpr { +class BoolExpr final : public BinaryExpr { public: BoolExpr(BroExprTag tag, IntrusivePtr op1, IntrusivePtr op2); @@ -459,12 +459,12 @@ public: IntrusivePtr DoSingleEval(Frame* f, IntrusivePtr v1, Expr* op2) const; }; -class BitExpr : public BinaryExpr { +class BitExpr final : public BinaryExpr { public: BitExpr(BroExprTag tag, IntrusivePtr op1, IntrusivePtr op2); }; -class EqExpr : public BinaryExpr { +class EqExpr final : public BinaryExpr { public: EqExpr(BroExprTag tag, IntrusivePtr op1, IntrusivePtr op2); void Canonicize() override; @@ -473,13 +473,13 @@ protected: IntrusivePtr Fold(Val* v1, Val* v2) const override; }; -class RelExpr : public BinaryExpr { +class RelExpr final : public BinaryExpr { public: RelExpr(BroExprTag tag, IntrusivePtr op1, IntrusivePtr op2); void Canonicize() override; }; -class CondExpr : public Expr { +class CondExpr final : public Expr { public: CondExpr(IntrusivePtr op1, IntrusivePtr op2, IntrusivePtr op3); @@ -500,7 +500,7 @@ protected: IntrusivePtr op3; }; -class RefExpr : public UnaryExpr { +class RefExpr final : public UnaryExpr { public: explicit RefExpr(IntrusivePtr op); @@ -530,14 +530,14 @@ protected: IntrusivePtr val; // optional }; -class IndexSliceAssignExpr : public AssignExpr { +class IndexSliceAssignExpr final : public AssignExpr { public: IndexSliceAssignExpr(IntrusivePtr op1, IntrusivePtr op2, bool is_init); IntrusivePtr Eval(Frame* f) const override; }; -class IndexExpr : public BinaryExpr { +class IndexExpr final : public BinaryExpr { public: IndexExpr(IntrusivePtr op1, IntrusivePtr op2, bool is_slice = false); @@ -567,7 +567,7 @@ protected: bool is_slice; }; -class FieldExpr : public UnaryExpr { +class FieldExpr final : public UnaryExpr { public: FieldExpr(IntrusivePtr op, const char* field_name); ~FieldExpr() override; @@ -594,7 +594,7 @@ protected: // "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. -class HasFieldExpr : public UnaryExpr { +class HasFieldExpr final : public UnaryExpr { public: HasFieldExpr(IntrusivePtr op, const char* field_name); ~HasFieldExpr() override; @@ -610,7 +610,7 @@ protected: int field; }; -class RecordConstructorExpr : public UnaryExpr { +class RecordConstructorExpr final : public UnaryExpr { public: explicit RecordConstructorExpr(IntrusivePtr constructor_list); ~RecordConstructorExpr() override; @@ -622,7 +622,7 @@ protected: void ExprDescribe(ODesc* d) const override; }; -class TableConstructorExpr : public UnaryExpr { +class TableConstructorExpr final : public UnaryExpr { public: TableConstructorExpr(IntrusivePtr constructor_list, attr_list* attrs, IntrusivePtr arg_type = nullptr); @@ -640,7 +640,7 @@ protected: Attributes* attrs; }; -class SetConstructorExpr : public UnaryExpr { +class SetConstructorExpr final : public UnaryExpr { public: SetConstructorExpr(IntrusivePtr constructor_list, attr_list* attrs, IntrusivePtr arg_type = nullptr); @@ -658,7 +658,7 @@ protected: Attributes* attrs; }; -class VectorConstructorExpr : public UnaryExpr { +class VectorConstructorExpr final : public UnaryExpr { public: explicit VectorConstructorExpr(IntrusivePtr constructor_list, IntrusivePtr arg_type = nullptr); @@ -671,7 +671,7 @@ protected: void ExprDescribe(ODesc* d) const override; }; -class FieldAssignExpr : public UnaryExpr { +class FieldAssignExpr final : public UnaryExpr { public: FieldAssignExpr(const char* field_name, IntrusivePtr value); @@ -686,7 +686,7 @@ protected: string field_name; }; -class ArithCoerceExpr : public UnaryExpr { +class ArithCoerceExpr final : public UnaryExpr { public: ArithCoerceExpr(IntrusivePtr op, TypeTag t); @@ -695,7 +695,7 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class RecordCoerceExpr : public UnaryExpr { +class RecordCoerceExpr final : public UnaryExpr { public: RecordCoerceExpr(IntrusivePtr op, IntrusivePtr r); ~RecordCoerceExpr() override; @@ -710,7 +710,7 @@ protected: int map_size; // equivalent to Type()->AsRecordType()->NumFields() }; -class TableCoerceExpr : public UnaryExpr { +class TableCoerceExpr final : public UnaryExpr { public: TableCoerceExpr(IntrusivePtr op, IntrusivePtr r); ~TableCoerceExpr() override; @@ -719,7 +719,7 @@ protected: IntrusivePtr Fold(Val* v) const override; }; -class VectorCoerceExpr : public UnaryExpr { +class VectorCoerceExpr final : public UnaryExpr { public: VectorCoerceExpr(IntrusivePtr op, IntrusivePtr v); ~VectorCoerceExpr() override; @@ -730,7 +730,7 @@ protected: // An internal operator for flattening array indices that are records // into a list of individual values. -class FlattenExpr : public UnaryExpr { +class FlattenExpr final : public UnaryExpr { public: explicit FlattenExpr(IntrusivePtr op); @@ -752,7 +752,7 @@ protected: zeek::Args args; }; -class ScheduleExpr : public Expr { +class ScheduleExpr final : public Expr { public: ScheduleExpr(IntrusivePtr when, IntrusivePtr event); @@ -772,7 +772,7 @@ protected: IntrusivePtr event; }; -class InExpr : public BinaryExpr { +class InExpr final : public BinaryExpr { public: InExpr(IntrusivePtr op1, IntrusivePtr op2); @@ -781,7 +781,7 @@ protected: }; -class CallExpr : public Expr { +class CallExpr final : public Expr { public: CallExpr(IntrusivePtr func, IntrusivePtr args, bool in_hook = false); @@ -808,7 +808,7 @@ protected: * On evaluation, captures the frame that it is evaluated in. This becomes * the closure for the instance of the function that it creates. */ -class LambdaExpr : public Expr { +class LambdaExpr final : public Expr { public: LambdaExpr(std::unique_ptr ingredients, id_list outer_ids); @@ -828,7 +828,7 @@ private: std::string my_name; }; -class EventExpr : public Expr { +class EventExpr final : public Expr { public: EventExpr(const char* name, IntrusivePtr args); @@ -880,12 +880,12 @@ protected: }; -class RecordAssignExpr : public ListExpr { +class RecordAssignExpr final : public ListExpr { public: RecordAssignExpr(const IntrusivePtr& record, const IntrusivePtr& init_list, bool is_init); }; -class CastExpr : public UnaryExpr { +class CastExpr final : public UnaryExpr { public: CastExpr(IntrusivePtr op, IntrusivePtr t); @@ -894,7 +894,7 @@ protected: void ExprDescribe(ODesc* d) const override; }; -class IsExpr : public UnaryExpr { +class IsExpr final : public UnaryExpr { public: IsExpr(IntrusivePtr op, IntrusivePtr t); diff --git a/src/File.h b/src/File.h index 2d10237a76..7f14d2ad73 100644 --- a/src/File.h +++ b/src/File.h @@ -19,7 +19,7 @@ class Attributes; class BroType; class RecordVal; -class BroFile : public BroObj { +class BroFile final : public BroObj { public: explicit BroFile(FILE* arg_f); BroFile(FILE* arg_f, const char* filename, const char* access); diff --git a/src/Func.h b/src/Func.h index c414e3ac85..385fd016a2 100644 --- a/src/Func.h +++ b/src/Func.h @@ -118,7 +118,7 @@ protected: }; -class BroFunc : public Func { +class BroFunc final : public Func { public: BroFunc(ID* id, IntrusivePtr body, id_list* inits, size_t frame_size, int priority); ~BroFunc() override; @@ -193,7 +193,7 @@ private: using built_in_func = Val* (*)(Frame* frame, const zeek::Args* args); -class BuiltinFunc : public Func { +class BuiltinFunc final : public Func { public: BuiltinFunc(built_in_func func, const char* name, bool is_pure); ~BuiltinFunc() override; diff --git a/src/ID.h b/src/ID.h index ee96ea7845..a076a2d37a 100644 --- a/src/ID.h +++ b/src/ID.h @@ -21,7 +21,7 @@ class Attributes; typedef enum { INIT_NONE, INIT_FULL, INIT_EXTRA, INIT_REMOVE, } init_class; 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: ID(const char* name, IDScope arg_scope, bool arg_is_export); ~ID() override; diff --git a/src/Stmt.h b/src/Stmt.h index cd28c60172..0fb57c7b23 100644 --- a/src/Stmt.h +++ b/src/Stmt.h @@ -103,7 +103,7 @@ protected: IntrusivePtr l; }; -class PrintStmt : public ExprListStmt { +class PrintStmt final : public ExprListStmt { public: template explicit PrintStmt(L&& l) : ExprListStmt(STMT_PRINT, std::forward(l)) { } @@ -136,7 +136,7 @@ protected: IntrusivePtr e; }; -class IfStmt : public ExprStmt { +class IfStmt final : public ExprStmt { public: IfStmt(IntrusivePtr test, IntrusivePtr s1, IntrusivePtr s2); ~IfStmt() override; @@ -156,7 +156,7 @@ protected: IntrusivePtr s2; }; -class Case : public BroObj { +class Case final : public BroObj { public: Case(IntrusivePtr c, id_list* types, IntrusivePtr arg_s); ~Case() override; @@ -180,9 +180,9 @@ protected: IntrusivePtr s; }; -typedef PList case_list; +using case_list = PList; -class SwitchStmt : public ExprStmt { +class SwitchStmt final : public ExprStmt { public: SwitchStmt(IntrusivePtr index, case_list* cases); ~SwitchStmt() override; @@ -223,7 +223,7 @@ protected: std::vector> case_label_type_list; }; -class AddStmt : public ExprStmt { +class AddStmt final : public ExprStmt { public: explicit AddStmt(IntrusivePtr e); @@ -233,7 +233,7 @@ public: TraversalCode Traverse(TraversalCallback* cb) const override; }; -class DelStmt : public ExprStmt { +class DelStmt final : public ExprStmt { public: explicit DelStmt(IntrusivePtr e); @@ -243,7 +243,7 @@ public: TraversalCode Traverse(TraversalCallback* cb) const override; }; -class EventStmt : public ExprStmt { +class EventStmt final : public ExprStmt { public: explicit EventStmt(IntrusivePtr e); @@ -255,7 +255,7 @@ protected: IntrusivePtr event_expr; }; -class WhileStmt : public Stmt { +class WhileStmt final : public Stmt { public: WhileStmt(IntrusivePtr loop_condition, IntrusivePtr body); @@ -274,7 +274,7 @@ protected: IntrusivePtr body; }; -class ForStmt : public ExprStmt { +class ForStmt final : public ExprStmt { public: ForStmt(id_list* loop_vars, IntrusivePtr loop_expr); // Special constructor for key value for loop. @@ -303,7 +303,7 @@ protected: IntrusivePtr value_var; }; -class NextStmt : public Stmt { +class NextStmt final : public Stmt { public: NextStmt() : Stmt(STMT_NEXT) { } @@ -317,7 +317,7 @@ public: protected: }; -class BreakStmt : public Stmt { +class BreakStmt final : public Stmt { public: BreakStmt() : Stmt(STMT_BREAK) { } @@ -331,7 +331,7 @@ public: protected: }; -class FallthroughStmt : public Stmt { +class FallthroughStmt final : public Stmt { public: FallthroughStmt() : Stmt(STMT_FALLTHROUGH) { } @@ -345,7 +345,7 @@ public: protected: }; -class ReturnStmt : public ExprStmt { +class ReturnStmt final : public ExprStmt { public: explicit ReturnStmt(IntrusivePtr e); @@ -374,7 +374,7 @@ protected: stmt_list stmts; }; -class EventBodyList : public StmtList { +class EventBodyList final : public StmtList { public: EventBodyList() : StmtList() { topmost = false; tag = STMT_EVENT_BODY_LIST; } @@ -391,7 +391,7 @@ protected: bool topmost; }; -class InitStmt : public Stmt { +class InitStmt final : public Stmt { public: explicit InitStmt(id_list* arg_inits); @@ -409,7 +409,7 @@ protected: id_list* inits; }; -class NullStmt : public Stmt { +class NullStmt final : public Stmt { public: NullStmt() : Stmt(STMT_NULL) { } @@ -421,7 +421,7 @@ public: TraversalCode Traverse(TraversalCallback* cb) const override; }; -class WhenStmt : public Stmt { +class WhenStmt final : public Stmt { public: // s2 is null if no timeout block given. WhenStmt(IntrusivePtr cond, diff --git a/src/Trigger.h b/src/Trigger.h index 5d91b17aa0..8bf8c77abc 100644 --- a/src/Trigger.h +++ b/src/Trigger.h @@ -25,7 +25,7 @@ using std::map; class TriggerTimer; class TriggerTraversalCallback; -class Trigger : public BroObj, public notifier::Receiver { +class Trigger final : public BroObj, public notifier::Receiver { public: // Don't access Trigger objects; they take care of themselves after // instantiation. Note that if the condition is already true, the diff --git a/src/Type.h b/src/Type.h index 9686bcdf9f..7072e76524 100644 --- a/src/Type.h +++ b/src/Type.h @@ -345,7 +345,7 @@ private: static TypeAliasMap type_aliases; }; -class TypeList : public BroType { +class TypeList final : public BroType { public: explicit TypeList(IntrusivePtr arg_pure_type = nullptr) : BroType(TYPE_LIST), pure_type(std::move(arg_pure_type)) @@ -424,7 +424,7 @@ protected: TypeList* ExpandRecordIndex(RecordType* rt) const; }; -class SetType : public TableType { +class SetType final : public TableType { public: SetType(IntrusivePtr ind, IntrusivePtr arg_elements); ~SetType() override; @@ -437,7 +437,7 @@ protected: IntrusivePtr elements; }; -class FuncType : public BroType { +class FuncType final : public BroType { public: FuncType(IntrusivePtr args, IntrusivePtr yield, function_flavor f); @@ -472,7 +472,7 @@ protected: function_flavor flavor; }; -class TypeType : public BroType { +class TypeType final : public BroType { public: explicit TypeType(IntrusivePtr t) : BroType(TYPE_TYPE), type(std::move(t)) {} TypeType* ShallowClone() override { return new TypeType(type); } @@ -501,7 +501,7 @@ public: typedef PList type_decl_list; -class RecordType : public BroType { +class RecordType final : public BroType { public: explicit RecordType(type_decl_list* types); RecordType* ShallowClone() override; @@ -565,13 +565,13 @@ protected: type_decl_list* types; }; -class SubNetType : public BroType { +class SubNetType final : public BroType { public: SubNetType(); void Describe(ODesc* d) const override; }; -class FileType : public BroType { +class FileType final : public BroType { public: explicit FileType(IntrusivePtr yield_type); FileType* ShallowClone() override { return new FileType(yield); } @@ -585,7 +585,7 @@ protected: IntrusivePtr yield; }; -class OpaqueType : public BroType { +class OpaqueType final : public BroType { public: explicit OpaqueType(const std::string& name); OpaqueType* ShallowClone() override { return new OpaqueType(name); } @@ -602,7 +602,7 @@ protected: std::string name; }; -class EnumType : public BroType { +class EnumType final : public BroType { public: typedef std::list > enum_name_list; @@ -655,7 +655,7 @@ protected: bro_int_t counter; }; -class VectorType : public BroType { +class VectorType final : public BroType { public: explicit VectorType(IntrusivePtr t); VectorType* ShallowClone() override; diff --git a/src/Val.h b/src/Val.h index c8c19bdb45..4d3e90b30e 100644 --- a/src/Val.h +++ b/src/Val.h @@ -458,7 +458,7 @@ extern ValManager* val_mgr; #define Hours (60*Minutes) #define Days (24*Hours) -class IntervalVal : public Val { +class IntervalVal final : public Val { public: IntervalVal(double quantity, double units); @@ -469,7 +469,7 @@ protected: }; -class PortVal : public Val { +class PortVal final : public Val { public: IntrusivePtr SizeVal() const override; @@ -505,7 +505,7 @@ protected: IntrusivePtr DoClone(CloneState* state) override; }; -class AddrVal : public Val { +class AddrVal final : public Val { public: explicit AddrVal(const char* text); explicit AddrVal(const std::string& text); @@ -524,7 +524,7 @@ protected: IntrusivePtr DoClone(CloneState* state) override; }; -class SubNetVal : public Val { +class SubNetVal final : public Val { public: explicit SubNetVal(const char* text); SubNetVal(const char* text, int width); @@ -549,7 +549,7 @@ protected: IntrusivePtr DoClone(CloneState* state) override; }; -class StringVal : public Val { +class StringVal final : public Val { public: explicit StringVal(BroString* s); explicit StringVal(const char* s); @@ -579,7 +579,7 @@ protected: IntrusivePtr DoClone(CloneState* state) override; }; -class PatternVal : public Val { +class PatternVal final : public Val { public: explicit PatternVal(RE_Matcher* re); ~PatternVal() override; @@ -597,7 +597,7 @@ protected: // ListVals are mainly used to index tables that have more than one // element in their index. -class ListVal : public Val { +class ListVal final : public Val { public: explicit ListVal(TypeTag t); ~ListVal() override; @@ -691,7 +691,7 @@ class CompositeHash; class HashKey; class Frame; -class TableVal : public Val, public notifier::Modifiable { +class TableVal final : public Val, public notifier::Modifiable { public: explicit TableVal(IntrusivePtr t, IntrusivePtr attrs = nullptr); ~TableVal() override; @@ -878,7 +878,7 @@ protected: static ParseTimeTableStates parse_time_table_states; }; -class RecordVal : public Val, public notifier::Modifiable { +class RecordVal final : public Val, public notifier::Modifiable { public: explicit RecordVal(RecordType* t, bool init_fields = true); ~RecordVal() override; @@ -947,7 +947,7 @@ protected: static RecordTypeValMap parse_time_records; }; -class EnumVal : public Val { +class EnumVal final : public Val { public: IntrusivePtr SizeVal() const override; @@ -964,7 +964,7 @@ protected: }; -class VectorVal : public Val, public notifier::Modifiable { +class VectorVal final : public Val, public notifier::Modifiable { public: explicit VectorVal(VectorType* t); ~VectorVal() override;