Bif const: make sure const is indeed a constant.

This commit is contained in:
Gregor Maier 2011-02-14 10:43:26 -08:00
parent 782f007b5c
commit f3aa7b2fac
3 changed files with 13 additions and 1 deletions

View file

@ -343,6 +343,17 @@ Val* internal_val(const char* name)
return id->ID_Val();
}
Val* internal_const_val(const char* name)
{
ID* id = lookup_ID(name, GLOBAL_MODULE_NAME);
if ( ! id )
internal_error("internal variable %s missing", name);
if ( ! id->IsConst())
internal_error("internal variable %s is not constant", name);
return id->ID_Val();
}
Val* opt_internal_val(const char* name)
{
ID* id = lookup_ID(name, GLOBAL_MODULE_NAME);

View file

@ -27,6 +27,7 @@ extern void begin_func(ID* id, const char* module_name, function_flavor flavor,
extern void end_func(Stmt* body, attr_list* attrs = 0);
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);

View file

@ -466,7 +466,7 @@ const_def: TOK_CONST opt_ws TOK_ID opt_ws ':' opt_ws TOK_ID opt_ws ';'
decl.c_namespace_start.c_str(),
builtin_types[typeidx].c_type, decl.bare_name.c_str(),
decl.c_namespace_end.c_str());
fprintf(fp_netvar_init, "\t%s = internal_val(\"%s\")%s;\n",
fprintf(fp_netvar_init, "\t%s = internal_const_val(\"%s\")%s;\n",
decl.c_fullname.c_str(), decl.bro_fullname.c_str(),
accessor);
}