瀏覽代碼

Property name in local scope

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6928 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 年之前
父節點
當前提交
a8bc3b1842
共有 2 個文件被更改,包括 11 次插入6 次删除
  1. 6 0
      source/FoxIntermediateBackend.Mod
  2. 5 6
      source/FoxSyntaxTree.Mod

+ 6 - 0
source/FoxIntermediateBackend.Mod

@@ -7119,7 +7119,10 @@ TYPE
 				Emit(Push(position,op.op));
 				ReleaseOperand(op);
 
+				property.GetName(name);
+				(* does not work  when inheritance is used:
 				Global.GetSymbolNameInScope(property, cellType.cellScope , name);
+				*)
 				PushConstString(name);
 				
 				IF (value # NIL) THEN 
@@ -7183,7 +7186,10 @@ TYPE
 		VAR symbol: SyntaxTree.Symbol; 
 		BEGIN
 			WHILE modifier # NIL DO
+				symbol := cellType.FindProperty(modifier.identifier); 
+				(*
 				symbol := cellType.cellScope.FindSymbol(modifier.identifier);
+				*)
 				IF (symbol # NIL) & (symbol IS SyntaxTree.Property) THEN
 					AddProperty(cellType, cell, symbol(SyntaxTree.Property), modifier.expression);
 				ELSE

+ 5 - 6
source/FoxSyntaxTree.Mod

@@ -1666,13 +1666,12 @@ TYPE
 		PROCEDURE FindProperty*(identifier: Identifier): Property;
 		VAR p: Property;
 		BEGIN
-			p := NIL;
-			IF (baseType # NIL) & (baseType.resolved IS CellType) THEN
-				p := baseType.resolved(CellType).FindProperty(identifier);
-			END;
+			p := firstProperty;
+			WHILE(p#NIL) & (p.name # identifier) DO p := p.nextProperty END;
 			IF p = NIL THEN 
-				p := firstProperty;
-				WHILE(p#NIL) & (p.name # identifier) DO p := p.nextProperty END;
+				IF (baseType # NIL) & (baseType.resolved IS CellType) THEN
+					p := baseType.resolved(CellType).FindProperty(identifier);
+				END;
 			END;
 			RETURN p;
 		END FindProperty;