Răsfoiți Sursa

Patched issues with array of system.byte (Release did not compile)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6895 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 ani în urmă
părinte
comite
d93acca959
2 a modificat fișierele cu 6 adăugiri și 3 ștergeri
  1. 1 1
      source/FoxIntermediateBackend.Mod
  2. 5 2
      source/FoxSemanticChecker.Mod

+ 1 - 1
source/FoxIntermediateBackend.Mod

@@ -4625,7 +4625,7 @@ TYPE
 			oldArrayDestinationDimension := arrayDestinationDimension;
 			oldArrayDestinationDimension := arrayDestinationDimension;
 
 
 			IF IsArrayOfSystemByte(parameter.type) THEN
 			IF IsArrayOfSystemByte(parameter.type) THEN
-				IF SemanticChecker.HasAddress(expression) THEN
+				IF SemanticChecker.HasAddress(expression) OR (callingConvention = SyntaxTree.WinAPICallingConvention) & (expression IS SyntaxTree.NilValue) THEN
 					Designate(expression,operand);
 					Designate(expression,operand);
 				ELSE
 				ELSE
 					Evaluate(expression, tmpOperand);
 					Evaluate(expression, tmpOperand);

+ 5 - 2
source/FoxSemanticChecker.Mod

@@ -9951,10 +9951,13 @@ TYPE
 
 
 	PROCEDURE HasAddress*(expression: SyntaxTree.Expression): BOOLEAN;
 	PROCEDURE HasAddress*(expression: SyntaxTree.Expression): BOOLEAN;
 	BEGIN
 	BEGIN
-		RETURN (expression # NIL) & (expression IS SyntaxTree.SymbolDesignator) & SymbolHasAddress(expression(SyntaxTree.SymbolDesignator).symbol) OR (expression IS SyntaxTree.ResultDesignator)
+		RETURN 
+			(expression # NIL) & (expression IS SyntaxTree.SymbolDesignator) & SymbolHasAddress(expression(SyntaxTree.SymbolDesignator).symbol) OR (expression IS SyntaxTree.ResultDesignator)
 			OR (expression IS SyntaxTree.IndexDesignator) OR (expression IS SyntaxTree.DereferenceDesignator)
 			OR (expression IS SyntaxTree.IndexDesignator) OR (expression IS SyntaxTree.DereferenceDesignator)
 			OR (expression IS SyntaxTree.TypeGuardDesignator) OR (expression IS SyntaxTree.StringValue)
 			OR (expression IS SyntaxTree.TypeGuardDesignator) OR (expression IS SyntaxTree.StringValue)
-			OR (expression IS SyntaxTree.StatementDesignator) & HasAddress(expression(SyntaxTree.StatementDesignator).result);
+			OR (expression IS SyntaxTree.StatementDesignator) & HasAddress(expression(SyntaxTree.StatementDesignator).result)
+			OR (expression IS SyntaxTree.BuiltinCallDesignator) & (expression(SyntaxTree.BuiltinCallDesignator).id = Global.systemVal) & HasAddress(expression(SyntaxTree.BuiltinCallDesignator).parameters.GetExpression(1))
+			;
 	END HasAddress;
 	END HasAddress;
 	
 	
 	PROCEDURE IsLocalVariable*(e: SyntaxTree.Expression): BOOLEAN;
 	PROCEDURE IsLocalVariable*(e: SyntaxTree.Expression): BOOLEAN;