Browse Source

Corrected behavior of passing values to array of system.byte

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6887 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 years ago
parent
commit
e43c1c52b1
2 changed files with 12 additions and 3 deletions
  1. 10 1
      source/FoxIntermediateBackend.Mod
  2. 2 2
      source/FoxSemanticChecker.Mod

+ 10 - 1
source/FoxIntermediateBackend.Mod

@@ -4603,7 +4603,16 @@ TYPE
 			oldArrayDestinationDimension := arrayDestinationDimension;
 
 			IF IsArrayOfSystemByte(parameter.type) THEN
-				Designate(expression,operand);
+				IF SemanticChecker.HasAddress(expression) THEN
+					Designate(expression,operand);
+				ELSE
+					Evaluate(expression, tmpOperand);
+					variable := GetTemporaryVariable(expression.type, FALSE);
+					Symbol(variable, operand);
+					MakeMemory(tmp,operand.op,operand.op.type,0);
+					Emit(Mov(position,tmp, tmpOperand.op));
+					ReleaseOperand(tmpOperand);
+				END;
 				tmp := GetArrayOfBytesSize(expression,operand.tag);
 				ReleaseIntermediateOperand(operand.tag);
 				operand.tag := tmp;

+ 2 - 2
source/FoxSemanticChecker.Mod

@@ -9941,13 +9941,13 @@ TYPE
 	END IsStaticMathArray;
 
 
-	PROCEDURE SymbolHasAddress(symbol: SyntaxTree.Symbol): BOOLEAN;
+	PROCEDURE SymbolHasAddress*(symbol: SyntaxTree.Symbol): BOOLEAN;
 	BEGIN
 		RETURN (symbol IS SyntaxTree.Variable) OR (symbol IS SyntaxTree.Parameter) OR (symbol IS SyntaxTree.Procedure)
 	END SymbolHasAddress;
 
 
-	PROCEDURE HasAddress(expression: SyntaxTree.Expression): BOOLEAN;
+	PROCEDURE HasAddress*(expression: SyntaxTree.Expression): BOOLEAN;
 	BEGIN
 		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)