summaryrefslogtreecommitdiff
path: root/modules/gdscript
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2017-01-02 15:54:43 +0100
committerGitHub <noreply@github.com>2017-01-02 15:54:43 +0100
commitcaddbbe17425def9f1f1a16045e870e3767f4096 (patch)
treee9513be2fc0c2dcf021ed22ea0a96f3398b2a6a1 /modules/gdscript
parentac04a932d63ebf2072166b57fd80ab73dd3d988a (diff)
parent0b077162a32d37b81c302ab26523efda05de3913 (diff)
Merge pull request #7390 from bojidar-bg/gdscript-assign-error
Disallow assignment to constants and expressions
Diffstat (limited to 'modules/gdscript')
-rw-r--r--modules/gdscript/gd_parser.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp
index 364ec488e2..8127324d2e 100644
--- a/modules/gdscript/gd_parser.cpp
+++ b/modules/gdscript/gd_parser.cpp
@@ -1478,6 +1478,15 @@ GDParser::Node* GDParser::_reduce_expression(Node *p_node,bool p_to_const) {
return op;
}
+ if (op->arguments[0]->type==Node::TYPE_OPERATOR) {
+ OperatorNode *on = static_cast<OperatorNode*>(op->arguments[0]);
+ if (on->op != OperatorNode::OP_INDEX && on->op != OperatorNode::OP_INDEX_NAMED) {
+ _set_error("Can't assign to an expression",tokenizer->get_token_line()-1);
+ error_line=op->line;
+ return op;
+ }
+ }
+
} break;
default: { break; }
}
@@ -2014,7 +2023,7 @@ void GDParser::_parse_block(BlockNode *p_block,bool p_static) {
} break;
default: {
- Node *expression = _parse_and_reduce_expression(p_block,p_static,false,true);
+ Node *expression = _parse_and_reduce_expression(p_block,p_static,true,true);
if (!expression) {
if (_recover_from_completion()) {
break;