Skip to content

Commit

Permalink
Merge pull request #4918 from jjay/f/error_on_redefine
Browse files Browse the repository at this point in the history
Redefine var results in an error
  • Loading branch information
reduz authored Jan 14, 2017
2 parents 9460930 + 9e86b27 commit 7924f08
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions modules/gdscript/gd_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1762,6 +1762,24 @@ void GDParser::_parse_block(BlockNode *p_block,bool p_static) {
}
StringName n = tokenizer->get_token_identifier();
tokenizer->advance();
if (current_function){
for (int i=0;i<current_function->arguments.size();i++){
if (n == current_function->arguments[i]){
_set_error("Variable '"+String(n)+"' already defined in the scope (at line: "+itos(current_function->line)+").");
return;
}
}
}
BlockNode *check_block = p_block;
while (check_block){
for (int i=0;i<check_block->variables.size();i++){
if (n == check_block->variables[i]){
_set_error("Variable '"+String(n)+"' already defined in the scope (at line: "+itos(check_block->variable_lines[i])+").");
return;
}
}
check_block = check_block->parent_block;
}

p_block->variables.push_back(n); //line?
p_block->variable_lines.push_back(tokenizer->get_token_line());
Expand Down Expand Up @@ -2079,7 +2097,14 @@ void GDParser::_parse_block(BlockNode *p_block,bool p_static) {
}

current_block=cf_for->body;

// this is for checking variable for redefining
// inside this _parse_block
cf_for->body->variables.push_back(id->name);
cf_for->body->variable_lines.push_back(id->line);
_parse_block(cf_for->body,p_static);
cf_for->body->variables.remove(0);
cf_for->body->variable_lines.remove(0);
current_block=p_block;

if (error_set)
Expand Down

0 comments on commit 7924f08

Please sign in to comment.