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)
} attr_tag;
class Attr : public BroObj {
class Attr final : public BroObj {
public:
Attr(attr_tag t, IntrusivePtr<Expr> 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<BroType> t, bool in_record, bool is_global);
~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; }
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);

View file

@ -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,

View file

@ -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> 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> val);
@ -350,7 +350,7 @@ protected:
IntrusivePtr<Expr> op2;
};
class CloneExpr : public UnaryExpr {
class CloneExpr final : public UnaryExpr {
public:
explicit CloneExpr(IntrusivePtr<Expr> op);
IntrusivePtr<Val> Eval(Frame* f) const override;
@ -359,7 +359,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class IncrExpr : public UnaryExpr {
class IncrExpr final : public UnaryExpr {
public:
IncrExpr(BroExprTag tag, IntrusivePtr<Expr> op);
@ -368,7 +368,7 @@ public:
bool IsPure() const override;
};
class ComplementExpr : public UnaryExpr {
class ComplementExpr final : public UnaryExpr {
public:
explicit ComplementExpr(IntrusivePtr<Expr> op);
@ -376,7 +376,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class NotExpr : public UnaryExpr {
class NotExpr final : public UnaryExpr {
public:
explicit NotExpr(IntrusivePtr<Expr> op);
@ -384,7 +384,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class PosExpr : public UnaryExpr {
class PosExpr final : public UnaryExpr {
public:
explicit PosExpr(IntrusivePtr<Expr> op);
@ -392,7 +392,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class NegExpr : public UnaryExpr {
class NegExpr final : public UnaryExpr {
public:
explicit NegExpr(IntrusivePtr<Expr> op);
@ -400,7 +400,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class SizeExpr : public UnaryExpr {
class SizeExpr final : public UnaryExpr {
public:
explicit SizeExpr(IntrusivePtr<Expr> op);
IntrusivePtr<Val> Eval(Frame* f) const override;
@ -409,36 +409,36 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class AddExpr : public BinaryExpr {
class AddExpr final : public BinaryExpr {
public:
AddExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override;
};
class AddToExpr : public BinaryExpr {
class AddToExpr final : public BinaryExpr {
public:
AddToExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
IntrusivePtr<Val> Eval(Frame* f) const override;
};
class RemoveFromExpr : public BinaryExpr {
class RemoveFromExpr final : public BinaryExpr {
public:
RemoveFromExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
IntrusivePtr<Val> Eval(Frame* f) const override;
};
class SubExpr : public BinaryExpr {
class SubExpr final : public BinaryExpr {
public:
SubExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
};
class TimesExpr : public BinaryExpr {
class TimesExpr final : public BinaryExpr {
public:
TimesExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override;
};
class DivideExpr : public BinaryExpr {
class DivideExpr final : public BinaryExpr {
public:
DivideExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
@ -446,12 +446,12 @@ protected:
IntrusivePtr<Val> AddrFold(Val* v1, Val* v2) const override;
};
class ModExpr : public BinaryExpr {
class ModExpr final : public BinaryExpr {
public:
ModExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
};
class BoolExpr : public BinaryExpr {
class BoolExpr final : public BinaryExpr {
public:
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;
};
class BitExpr : public BinaryExpr {
class BitExpr final : public BinaryExpr {
public:
BitExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
};
class EqExpr : public BinaryExpr {
class EqExpr final : public BinaryExpr {
public:
EqExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override;
@ -473,13 +473,13 @@ protected:
IntrusivePtr<Val> Fold(Val* v1, Val* v2) const override;
};
class RelExpr : public BinaryExpr {
class RelExpr final : public BinaryExpr {
public:
RelExpr(BroExprTag tag, IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
void Canonicize() override;
};
class CondExpr : public Expr {
class CondExpr final : public Expr {
public:
CondExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2, IntrusivePtr<Expr> op3);
@ -500,7 +500,7 @@ protected:
IntrusivePtr<Expr> op3;
};
class RefExpr : public UnaryExpr {
class RefExpr final : public UnaryExpr {
public:
explicit RefExpr(IntrusivePtr<Expr> op);
@ -530,14 +530,14 @@ protected:
IntrusivePtr<Val> val; // optional
};
class IndexSliceAssignExpr : public AssignExpr {
class IndexSliceAssignExpr final : public AssignExpr {
public:
IndexSliceAssignExpr(IntrusivePtr<Expr> op1,
IntrusivePtr<Expr> op2, bool is_init);
IntrusivePtr<Val> Eval(Frame* f) const override;
};
class IndexExpr : public BinaryExpr {
class IndexExpr final : public BinaryExpr {
public:
IndexExpr(IntrusivePtr<Expr> op1,
IntrusivePtr<ListExpr> 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<Expr> 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<Expr> 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<ListExpr> 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<ListExpr> constructor_list, attr_list* attrs,
IntrusivePtr<BroType> arg_type = nullptr);
@ -640,7 +640,7 @@ protected:
Attributes* attrs;
};
class SetConstructorExpr : public UnaryExpr {
class SetConstructorExpr final : public UnaryExpr {
public:
SetConstructorExpr(IntrusivePtr<ListExpr> constructor_list, attr_list* attrs,
IntrusivePtr<BroType> arg_type = nullptr);
@ -658,7 +658,7 @@ protected:
Attributes* attrs;
};
class VectorConstructorExpr : public UnaryExpr {
class VectorConstructorExpr final : public UnaryExpr {
public:
explicit VectorConstructorExpr(IntrusivePtr<ListExpr> constructor_list,
IntrusivePtr<BroType> 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<Expr> value);
@ -686,7 +686,7 @@ protected:
string field_name;
};
class ArithCoerceExpr : public UnaryExpr {
class ArithCoerceExpr final : public UnaryExpr {
public:
ArithCoerceExpr(IntrusivePtr<Expr> op, TypeTag t);
@ -695,7 +695,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class RecordCoerceExpr : public UnaryExpr {
class RecordCoerceExpr final : public UnaryExpr {
public:
RecordCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<RecordType> 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<Expr> op, IntrusivePtr<TableType> r);
~TableCoerceExpr() override;
@ -719,7 +719,7 @@ protected:
IntrusivePtr<Val> Fold(Val* v) const override;
};
class VectorCoerceExpr : public UnaryExpr {
class VectorCoerceExpr final : public UnaryExpr {
public:
VectorCoerceExpr(IntrusivePtr<Expr> op, IntrusivePtr<VectorType> 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<Expr> op);
@ -752,7 +752,7 @@ protected:
zeek::Args args;
};
class ScheduleExpr : public Expr {
class ScheduleExpr final : public Expr {
public:
ScheduleExpr(IntrusivePtr<Expr> when, IntrusivePtr<EventExpr> event);
@ -772,7 +772,7 @@ protected:
IntrusivePtr<EventExpr> event;
};
class InExpr : public BinaryExpr {
class InExpr final : public BinaryExpr {
public:
InExpr(IntrusivePtr<Expr> op1, IntrusivePtr<Expr> op2);
@ -781,7 +781,7 @@ protected:
};
class CallExpr : public Expr {
class CallExpr final : public Expr {
public:
CallExpr(IntrusivePtr<Expr> func, IntrusivePtr<ListExpr> 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<function_ingredients> 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<ListExpr> args);
@ -880,12 +880,12 @@ protected:
};
class RecordAssignExpr : public ListExpr {
class RecordAssignExpr final : public ListExpr {
public:
RecordAssignExpr(const IntrusivePtr<Expr>& record, const IntrusivePtr<Expr>& init_list, bool is_init);
};
class CastExpr : public UnaryExpr {
class CastExpr final : public UnaryExpr {
public:
CastExpr(IntrusivePtr<Expr> op, IntrusivePtr<BroType> t);
@ -894,7 +894,7 @@ protected:
void ExprDescribe(ODesc* d) const override;
};
class IsExpr : public UnaryExpr {
class IsExpr final : public UnaryExpr {
public:
IsExpr(IntrusivePtr<Expr> op, IntrusivePtr<BroType> t);

View file

@ -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);

View file

@ -118,7 +118,7 @@ protected:
};
class BroFunc : public Func {
class BroFunc final : public Func {
public:
BroFunc(ID* id, IntrusivePtr<Stmt> 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;

View file

@ -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;

View file

@ -103,7 +103,7 @@ protected:
IntrusivePtr<ListExpr> l;
};
class PrintStmt : public ExprListStmt {
class PrintStmt final : public ExprListStmt {
public:
template<typename L>
explicit PrintStmt(L&& l) : ExprListStmt(STMT_PRINT, std::forward<L>(l)) { }
@ -136,7 +136,7 @@ protected:
IntrusivePtr<Expr> e;
};
class IfStmt : public ExprStmt {
class IfStmt final : public ExprStmt {
public:
IfStmt(IntrusivePtr<Expr> test, IntrusivePtr<Stmt> s1, IntrusivePtr<Stmt> s2);
~IfStmt() override;
@ -156,7 +156,7 @@ protected:
IntrusivePtr<Stmt> s2;
};
class Case : public BroObj {
class Case final : public BroObj {
public:
Case(IntrusivePtr<ListExpr> c, id_list* types, IntrusivePtr<Stmt> arg_s);
~Case() override;
@ -180,9 +180,9 @@ protected:
IntrusivePtr<Stmt> s;
};
typedef PList<Case> case_list;
using case_list = PList<Case>;
class SwitchStmt : public ExprStmt {
class SwitchStmt final : public ExprStmt {
public:
SwitchStmt(IntrusivePtr<Expr> index, case_list* cases);
~SwitchStmt() override;
@ -223,7 +223,7 @@ protected:
std::vector<std::pair<ID*, int>> case_label_type_list;
};
class AddStmt : public ExprStmt {
class AddStmt final : public ExprStmt {
public:
explicit AddStmt(IntrusivePtr<Expr> 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<Expr> 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<EventExpr> e);
@ -255,7 +255,7 @@ protected:
IntrusivePtr<EventExpr> event_expr;
};
class WhileStmt : public Stmt {
class WhileStmt final : public Stmt {
public:
WhileStmt(IntrusivePtr<Expr> loop_condition, IntrusivePtr<Stmt> body);
@ -274,7 +274,7 @@ protected:
IntrusivePtr<Stmt> body;
};
class ForStmt : public ExprStmt {
class ForStmt final : public ExprStmt {
public:
ForStmt(id_list* loop_vars, IntrusivePtr<Expr> loop_expr);
// Special constructor for key value for loop.
@ -303,7 +303,7 @@ protected:
IntrusivePtr<ID> 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<Expr> 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<Expr> cond,

View file

@ -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

View file

@ -345,7 +345,7 @@ private:
static TypeAliasMap type_aliases;
};
class TypeList : public BroType {
class TypeList final : public BroType {
public:
explicit TypeList(IntrusivePtr<BroType> 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<TypeList> ind, IntrusivePtr<ListExpr> arg_elements);
~SetType() override;
@ -437,7 +437,7 @@ protected:
IntrusivePtr<ListExpr> elements;
};
class FuncType : public BroType {
class FuncType final : public BroType {
public:
FuncType(IntrusivePtr<RecordType> args, IntrusivePtr<BroType> 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<BroType> t) : BroType(TYPE_TYPE), type(std::move(t)) {}
TypeType* ShallowClone() override { return new TypeType(type); }
@ -501,7 +501,7 @@ public:
typedef PList<TypeDecl> 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<BroType> yield_type);
FileType* ShallowClone() override { return new FileType(yield); }
@ -585,7 +585,7 @@ protected:
IntrusivePtr<BroType> 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<std::pair<std::string, bro_int_t> > 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<BroType> t);
VectorType* ShallowClone() override;

View file

@ -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<Val> SizeVal() const override;
@ -505,7 +505,7 @@ protected:
IntrusivePtr<Val> 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<Val> 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<Val> 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<Val> 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<TableType> t, IntrusivePtr<Attributes> 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<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:
explicit VectorVal(VectorType* t);
~VectorVal() override;