mirror of
https://github.com/zeek/zeek.git
synced 2025-10-14 12:38:20 +00:00

Only one instance of base_type() getting a NewRef instead of AdoptRef fixed in merge. All other changes are superficial formatting and factoring. * 'leaks' of https://github.com/MaxKellermann/zeek: (22 commits) Stmt: use class IntrusivePtr Stmt: remove unused default constructors and `friend` declarations Val: remove unimplemented prototype recover_val() Val: cast_value_to_type() returns IntrusivePtr Val: use IntrusivePtr in check_and_promote() Val: use nullptr instead of 0 zeekygen: use class IntrusivePtr ID: use class IntrusivePtr Expr: use class IntrusivePtr Var: copy Location to stack, to fix use-after-free crash bug Scope: lookup_ID() and install_ID() return IntrusivePtr<ID> Scope: delete duplicate locals EventRegistry: automatically delete EventHandlers main: destroy event_registry after iosource_mgr zeekygen/IdentifierInfo: delete duplicate fields main: free the global scope in terminate_bro() Scope: pop_scope() returns IntrusivePtr<> Scope: unref all inits in destructor Var: pass IntrusivePtr to add_global(), add_local() etc. plugin/ComponentManager: hold a reference to the EnumType ...
56 lines
2.2 KiB
C++
56 lines
2.2 KiB
C++
// See the file "COPYING" in the main distribution directory for copyright.
|
|
|
|
#pragma once
|
|
|
|
#include "IntrusivePtr.h"
|
|
#include "ID.h"
|
|
#include "Type.h"
|
|
|
|
class Expr;
|
|
class FuncType;
|
|
class Stmt;
|
|
class Scope;
|
|
class EventHandlerPtr;
|
|
class StringVal;
|
|
class TableVal;
|
|
class ListVal;
|
|
|
|
typedef enum { VAR_REGULAR, VAR_CONST, VAR_REDEF, VAR_OPTION, } decl_type;
|
|
|
|
extern void add_global(ID* id, IntrusivePtr<BroType> t, init_class c,
|
|
IntrusivePtr<Expr> init, attr_list* attr, decl_type dt);
|
|
|
|
extern IntrusivePtr<Stmt> add_local(IntrusivePtr<ID> id,
|
|
IntrusivePtr<BroType> t, init_class c,
|
|
IntrusivePtr<Expr> init, attr_list* attr,
|
|
decl_type dt);
|
|
|
|
extern IntrusivePtr<Expr> add_and_assign_local(IntrusivePtr<ID> id,
|
|
IntrusivePtr<Expr> init,
|
|
IntrusivePtr<Val> val = nullptr);
|
|
|
|
extern void add_type(ID* id, IntrusivePtr<BroType> t, attr_list* attr);
|
|
|
|
extern void begin_func(ID* id, const char* module_name, function_flavor flavor,
|
|
int is_redef, IntrusivePtr<FuncType> t,
|
|
attr_list* attrs = nullptr);
|
|
|
|
extern void end_func(IntrusivePtr<Stmt> body);
|
|
|
|
// Gather all IDs referenced inside a body that aren't part of a given scope.
|
|
extern id_list gather_outer_ids(Scope* scope, Stmt* body);
|
|
|
|
extern Val* internal_val(const char* name);
|
|
extern Val* internal_const_val(const char* name); // internal error if not const
|
|
extern Val* opt_internal_val(const char* name); // returns nil if not defined
|
|
extern double opt_internal_double(const char* name);
|
|
extern bro_int_t opt_internal_int(const char* name);
|
|
extern bro_uint_t opt_internal_unsigned(const char* name);
|
|
extern StringVal* opt_internal_string(const char* name);
|
|
extern TableVal* opt_internal_table(const char* name); // nil if not defined
|
|
extern ListVal* internal_list_val(const char* name);
|
|
extern BroType* internal_type(const char* name);
|
|
extern Func* internal_func(const char* name);
|
|
extern EventHandlerPtr internal_handler(const char* name);
|
|
|
|
extern int signal_val; // 0 if no signal pending
|