From a924fd0e7e5da7fef12227b503e5eecd231a5abd Mon Sep 17 00:00:00 2001 From: Martin Carlberg Date: Tue, 3 Mar 2015 11:32:18 +0100 Subject: [PATCH] Fixed: Generate compiler error when ivar is already declared in superclass --- Objective-J/ObjJAcornCompiler.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js index 0e9d16f98..d5561fb47 100644 --- a/Objective-J/ObjJAcornCompiler.js +++ b/Objective-J/ObjJAcornCompiler.js @@ -1754,8 +1754,15 @@ ClassDeclarationStatement: function(node, st, c) { ivar = {"type": ivarType, "name": ivarName}, accessors = ivarDecl.accessors; - if (ivars[ivarName]) - throw compiler.error_message("Instance variable '" + ivarName + "' is already declared for class " + className, ivarDecl.id); + var checkIfIvarIsAlreadyDeclaredAndInSuperClass = function(aClassDef, recursiveFunction) { + if (aClassDef.ivars[ivarName]) + throw compiler.error_message("Instance variable '" + ivarName + "' is already declared for class " + className + (aClassDef.name !== className ? " in superclass " + aClassDef.name : ""), ivarDecl.id); + if (aClassDef.superClass) + recursiveFunction(aClassDef.superClass, recursiveFunction); + } + + // Check if ivar is already declared in this class or its super classes. + checkIfIvarIsAlreadyDeclaredAndInSuperClass(classDef, checkIfIvarIsAlreadyDeclaredAndInSuperClass); var isTypeDefined = !ivarTypeIsClass || typeof global[ivarType] !== "undefined" || typeof window[ivarType] !== "undefined" || compiler.getClassDef(ivarType) || compiler.getTypeDef(ivarType) || ivarType == classDef.name;