Browse Source

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 9 years ago
parent
commit
d93acca959
2 changed files with 6 additions and 3 deletions
  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;