diff options
author | George Marques <george@gmarqu.es> | 2018-06-05 22:57:44 -0300 |
---|---|---|
committer | George Marques <george@gmarqu.es> | 2018-07-20 21:55:17 -0300 |
commit | a2305cd8b2fccf576ca62634a061b16edd4d6c55 (patch) | |
tree | 7838cb45b0c75d6c9fd9da0de63fa9c97bc70567 /modules/gdscript/gdscript_parser.cpp | |
parent | 75f395c2a0dd3d1af4f53585145dc22f76ecd134 (diff) | |
download | redot-engine-a2305cd8b2fccf576ca62634a061b16edd4d6c55.tar.gz |
Fix line number detection in some parser nodes
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
-rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 5a28151161..24974f9155 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -267,6 +267,7 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s bool need_identifier = true; bool done = false; + int line = tokenizer->get_token_line(); while (!done) { @@ -334,17 +335,19 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s OperatorNode *op = alloc_node<OperatorNode>(); op->op = OperatorNode::OP_CALL; - + op->line = line; op->arguments.push_back(alloc_node<SelfNode>()); + op->arguments[0]->line = line; IdentifierNode *funcname = alloc_node<IdentifierNode>(); funcname->name = "get_node"; - + funcname->line = line; op->arguments.push_back(funcname); ConstantNode *nodepath = alloc_node<ConstantNode>(); nodepath->value = NodePath(StringName(path)); nodepath->datatype = _type_from_variant(nodepath->value); + nodepath->line = line; op->arguments.push_back(nodepath); expr = op; @@ -2459,6 +2462,7 @@ void GDScriptParser::_generate_pattern(PatternNode *p_pattern, Node *p_node_to_m void GDScriptParser::_transform_match_statment(MatchNode *p_match_statement) { IdentifierNode *id = alloc_node<IdentifierNode>(); id->name = "#match_value"; + id->line = p_match_statement->line; id->datatype = _reduce_node_type(p_match_statement->val_to_match); if (error_set) { @@ -2701,6 +2705,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { } else { c->value = Variant(); } + c->line = var_line; assigned = c; } //must be added later, to avoid self-referencing. @@ -2709,11 +2714,13 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { IdentifierNode *id = alloc_node<IdentifierNode>(); id->name = n; id->declared_block = p_block; + id->line = var_line; OperatorNode *op = alloc_node<OperatorNode>(); op->op = OperatorNode::OP_ASSIGN; op->arguments.push_back(id); op->arguments.push_back(assigned); + op->line = var_line; p_block->statements.push_back(op); lv->assign_op = op; lv->assign = assigned; @@ -3051,6 +3058,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { tokenizer->advance(); ControlFlowNode *cf_return = alloc_node<ControlFlowNode>(); cf_return->cf_type = ControlFlowNode::CF_RETURN; + cf_return->line = tokenizer->get_token_line(-1); if (tokenizer->get_token() == GDScriptTokenizer::TK_SEMICOLON || tokenizer->get_token() == GDScriptTokenizer::TK_NEWLINE || tokenizer->get_token() == GDScriptTokenizer::TK_EOF) { //expect end of statement @@ -3547,9 +3555,11 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { OperatorNode *on = alloc_node<OperatorNode>(); on->op = OperatorNode::OP_ASSIGN; + on->line = fnline; IdentifierNode *in = alloc_node<IdentifierNode>(); in->name = argname; + in->line = fnline; on->arguments.push_back(in); on->arguments.push_back(defval); @@ -4569,6 +4579,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { } StringName const_id = tokenizer->get_token_literal(); + int line = tokenizer->get_token_line(); if (current_class->constant_expressions.has(const_id)) { _set_error("Constant '" + String(const_id) + "' alread exists in this class (at line: " + @@ -4598,8 +4609,6 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } - int line = tokenizer->get_token_line(); - tokenizer->advance(); Node *subexpr = _parse_and_reduce_expression(p_class, true, true); @@ -4614,6 +4623,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { _set_error("Expected constant expression", line); return; } + subexpr->line = line; constant.expression = subexpr; p_class->constant_expressions.insert(const_id, constant); |