Sfoglia il codice sorgente

Compile error when duplicate key in dictionery literal #7034

James Mintram 8 anni fa
parent
commit
dab73c701a
1 ha cambiato i file con 11 aggiunte e 0 eliminazioni
  1. 11 0
      modules/gdscript/gd_parser.cpp

+ 11 - 0
modules/gdscript/gd_parser.cpp

@@ -724,6 +724,7 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
 			};
 			};
 
 
 			Node *key=NULL;
 			Node *key=NULL;
+			Set<Variant> keys;
 
 
 			DictExpect expecting=DICT_EXPECT_KEY;
 			DictExpect expecting=DICT_EXPECT_KEY;
 
 
@@ -819,6 +820,16 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
 							return NULL;
 							return NULL;
 						expecting=DICT_EXPECT_COMMA;
 						expecting=DICT_EXPECT_COMMA;
 
 
+						if (key->type == GDParser::Node::TYPE_CONSTANT) {
+							Variant const& keyName = static_cast<const GDParser::ConstantNode*>(key)->value;
+
+							if (keys.has(keyName)) {
+								_set_error("Duplicate key found in Dictionary literal");
+								return NULL;
+							}
+							keys.insert(keyName);
+						}
+
 						DictionaryNode::Pair pair;
 						DictionaryNode::Pair pair;
 						pair.key=key;
 						pair.key=key;
 						pair.value=value;
 						pair.value=value;