summaryrefslogtreecommitdiff
path: root/modules/gdscript
diff options
context:
space:
mode:
authorhondres <liu.gam3@gmail.com>2016-01-24 23:45:11 +0100
committerhondres <liu.gam3@gmail.com>2016-01-24 23:45:11 +0100
commit56ce58d57cc9616978470b472ef04a356f288355 (patch)
tree57adfe4663e815b29064f4e6c2c4ee966b3a0de0 /modules/gdscript
parent021fc47434f68028167cf4bb914c92c86d72a493 (diff)
can preload constants
Diffstat (limited to 'modules/gdscript')
-rw-r--r--modules/gdscript/gd_parser.cpp22
1 files changed, 15 insertions, 7 deletions
diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp
index 4c6b6ff2dd..b6e8478846 100644
--- a/modules/gdscript/gd_parser.cpp
+++ b/modules/gdscript/gd_parser.cpp
@@ -283,13 +283,23 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
return NULL;
}
tokenizer->advance();
- if (tokenizer->get_token()!=GDTokenizer::TK_CONSTANT || tokenizer->get_token_constant().get_type()!=Variant::STRING) {
- _set_error("Expected string constant as 'preload' argument.");
+
+ String path;
+ bool valid = false;
+ Node *subexpr = _parse_and_reduce_expression(p_parent, p_static);
+ if (subexpr) {
+ if (subexpr->type == Node::TYPE_CONSTANT) {
+ ConstantNode *cn = static_cast<ConstantNode*>(subexpr);
+ if (cn->value.get_type() == Variant::STRING) {
+ valid = true;
+ path = (String) cn->value;
+ }
+ }
+ }
+ if (!valid) {
+ _set_error("expected string constant as 'preload' argument.");
return NULL;
}
-
-
- String path = tokenizer->get_token_constant();
if (!path.is_abs_path() && base_path!="")
path=base_path+"/"+path;
path = path.replace("///","//").simplify_path();
@@ -322,8 +332,6 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
}
}
- tokenizer->advance();
-
if (tokenizer->get_token()!=GDTokenizer::TK_PARENTHESIS_CLOSE) {
_set_error("Expected ')' after 'preload' path");
return NULL;