mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 02:28:21 +00:00
Merge branch 'topic/amazingpp/modifiable-const-via-loops' of ssh://github.com/AmazingPP/zeek
Edits: Slight tweaking, plus a simple test. * 'topic/amazingpp/modifiable-const-via-loops' of ssh://github.com/AmazingPP/zeek: Add help function to check loop variable Fix local const variables can be modified via loops
This commit is contained in:
commit
f40ca42590
3 changed files with 35 additions and 17 deletions
34
src/parse.y
34
src/parse.y
|
@ -247,6 +247,15 @@ static bool expr_is_table_type_name(const Expr* expr)
|
|||
return false;
|
||||
}
|
||||
|
||||
static void check_loop_var(const IDPtr& var)
|
||||
{
|
||||
if ( var->IsGlobal() )
|
||||
var->Error("global variable used in 'for' loop");
|
||||
|
||||
if ( var->IsConst() )
|
||||
var->Error("constant used in 'for' loop");
|
||||
}
|
||||
|
||||
static void build_global(ID* id, Type* t, InitClass ic, Expr* e,
|
||||
std::vector<AttrPtr>* attrs, DeclType dt)
|
||||
{
|
||||
|
@ -1908,11 +1917,7 @@ for_head:
|
|||
auto loop_var = lookup_ID($3, current_module.c_str());
|
||||
|
||||
if ( loop_var )
|
||||
{
|
||||
if ( loop_var->IsGlobal() )
|
||||
loop_var->Error("global variable used in for loop");
|
||||
}
|
||||
|
||||
check_loop_var(loop_var);
|
||||
else
|
||||
{
|
||||
loop_var = install_ID($3, current_module.c_str(),
|
||||
|
@ -1942,18 +1947,12 @@ for_head:
|
|||
|
||||
// Validate previous definitions as needed.
|
||||
if ( key_var )
|
||||
{
|
||||
if ( key_var->IsGlobal() )
|
||||
key_var->Error("global variable used in for loop");
|
||||
}
|
||||
check_loop_var(key_var);
|
||||
else
|
||||
key_var = install_ID($3, module, false, false);
|
||||
|
||||
if ( val_var )
|
||||
{
|
||||
if ( val_var->IsGlobal() )
|
||||
val_var->Error("global variable used in for loop");
|
||||
}
|
||||
check_loop_var(val_var);
|
||||
else
|
||||
val_var = install_ID($5, module, false, false);
|
||||
|
||||
|
@ -1972,10 +1971,7 @@ for_head:
|
|||
auto val_var = lookup_ID($7, module);
|
||||
|
||||
if ( val_var )
|
||||
{
|
||||
if ( val_var->IsGlobal() )
|
||||
val_var->Error("global variable used in for loop");
|
||||
}
|
||||
check_loop_var(val_var);
|
||||
else
|
||||
val_var = install_ID($7, module, false, false);
|
||||
|
||||
|
@ -2004,6 +2000,10 @@ local_id:
|
|||
{
|
||||
if ( $$->IsGlobal() )
|
||||
$$->Error("already a global identifier");
|
||||
|
||||
if ( $$->IsConst() )
|
||||
$$->Error("already a const identifier");
|
||||
|
||||
delete [] $1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue