Переглянути джерело

patched "assignable" flag when aliases are used

git-svn-id: https://svn-dept.inf.ethz.ch/svn/lecturers/a2/trunk@8924 8c9fc860-2736-0410-a75d-ab315db34111
felixf 6 роки тому
батько
коміт
68e8885dc2
1 змінених файлів з 8 додано та 3 видалено
  1. 8 3
      source/FoxSemanticChecker.Mod

+ 8 - 3
source/FoxSemanticChecker.Mod

@@ -3039,16 +3039,21 @@ TYPE
 				END;
 			END;
 
-			assignable := (left = NIL) OR left.assignable OR (left IS SyntaxTree.DereferenceDesignator) OR (left IS SyntaxTree.SelfDesignator) OR (left IS SyntaxTree.SymbolDesignator) & (left(SyntaxTree.SymbolDesignator).symbol IS SyntaxTree.Import);
+			assignable := (left = NIL) OR left.assignable OR (left IS SyntaxTree.DereferenceDesignator) 
+				OR (left IS SyntaxTree.SelfDesignator) 
+				OR (left IS SyntaxTree.SymbolDesignator) & (left(SyntaxTree.SymbolDesignator).symbol IS SyntaxTree.Import);
 
 			IF (currentScope # NIL) & (symbol.scope.ownerModule # currentScope.ownerModule) THEN
 				assignable := assignable & (SyntaxTree.PublicWrite IN symbol.access);
 			ELSE
 				assignable := assignable & (SyntaxTree.InternalWrite IN symbol.access);
 			END;
-
+			
 			assignable := assignable & ((symbol IS SyntaxTree.Variable) OR (symbol IS SyntaxTree.Parameter)
-				& (symbol(SyntaxTree.Parameter).kind # SyntaxTree.ConstParameter) & ~(symbol(SyntaxTree.Parameter).ownerType IS SyntaxTree.CellType));
+				& (symbol(SyntaxTree.Parameter).kind # SyntaxTree.ConstParameter) & ~(symbol(SyntaxTree.Parameter).ownerType IS SyntaxTree.CellType)
+				)
+				OR (symbol IS SyntaxTree.Alias) & (symbol(SyntaxTree.Alias).expression.assignable)
+				;
 
 			result := SyntaxTree.NewSymbolDesignator(position,original,left,symbol);
 			result.SetType(symbol.type);