From 2dd0130c784161a6a2cf983b5d0ba86cd40497aa Mon Sep 17 00:00:00 2001 From: Ruslan Mustakov Date: Mon, 4 Jun 2018 09:51:07 +0700 Subject: [PATCH] Avoid name clashes between properties and methods Fixes #19. --- godot/godotapigen.nim | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/godot/godotapigen.nim b/godot/godotapigen.nim index 32275b4..ed444ff 100644 --- a/godot/godotapigen.nim +++ b/godot/godotapigen.nim @@ -722,6 +722,11 @@ proc makeProperty(types: Table[string, GodotType], tree: PNode, methodBindRegistry: var HashSet[string], typ: GodotType, propertyObj: JsonNode, obj: JsonNode, withImplementation: bool) = + for meth in obj["methods"]: + if meth["name"].str == '_' & propertyObj["name"].str: + # Don't generate properties if there is a name clash - otherwise + # using the property would not compile due to ambiguity. + return let getterNameStr = toNimStyle(propertyObj["name"].str) let getterName = ident(getterNameStr) let setterName = newNode(nkAccQuoted).addChain(ident(getterNameStr & "=")) @@ -760,8 +765,14 @@ proc makeMethod(types: Table[string, GodotType], tree: PNode, # supposed to be used on an object (have at least 2 params). for prop in typ.jsonNode["properties"]: if prop["getter"].str == methodObj["name"].str or - prop["setter"].str == methodObj["name"].str: - return + prop["setter"].str == methodObj["name"].str: + var hasDuplicateMethod = false + for meth in typ.jsonNode["methods"]: + if meth["name"].str == '_' & prop["name"].str: + hasDuplicateMethod = true + break + if not hasDuplicateMethod: + return let methodInfo = getMethodInfo(methodObj, types, typ)