From dad8e04139100143e4a2884c84c5c32bdff9c951 Mon Sep 17 00:00:00 2001 From: Bojidar Marinov Date: Sat, 27 Aug 2016 15:56:51 +0300 Subject: [PATCH] Add enum naming, by assinging a given enum's values to a Dict (cherry picked from commit 88430f0962403779670c3e82bbbc3ef3f6022169) --- modules/gdscript/gd_parser.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp index c2b262c8d75..009100cb345 100644 --- a/modules/gdscript/gd_parser.cpp +++ b/modules/gdscript/gd_parser.cpp @@ -3157,8 +3157,14 @@ void GDParser::_parse_class(ClassNode *p_class) { //mutiple constant declarations.. int last_assign = -1; // Incremented by 1 right before the assingment. + String enum_name; + Dictionary enum_dict; tokenizer->advance(); + if (tokenizer->get_token() == GDTokenizer::TK_IDENTIFIER) { + enum_name = tokenizer->get_token_identifier(); + tokenizer->advance(); + } if (tokenizer->get_token() != GDTokenizer::TK_CURLY_BRACKET_OPEN) { _set_error("Expected '{' in enum declaration"); return; @@ -3227,10 +3233,24 @@ void GDParser::_parse_class(ClassNode *p_class) { tokenizer->advance(); } + if (enum_name != "") { + const ConstantNode *cn = static_cast(constant.expression); + enum_dict[constant.identifier] = cn->value; + } + p_class->constant_expressions.push_back(constant); } } + if (enum_name != "") { + ClassNode::Constant enum_constant; + enum_constant.identifier = enum_name; + ConstantNode *cn = alloc_node(); + cn->value = enum_dict; + enum_constant.expression = cn; + p_class->constant_expressions.push_back(enum_constant); + } + if (!_end_statement()) { _set_error("Expected end of statement (enum)"); return;