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 8 năm trước cách đây
mục cha
commit
d93acca959
2 tập tin đã thay đổi với 6 bổ sung3 xóa
  1. 1 1
      source/FoxIntermediateBackend.Mod
  2. 5 2
      source/FoxSemanticChecker.Mod

+ 1 - 1
source/FoxIntermediateBackend.Mod

@@ -4625,7 +4625,7 @@ TYPE
 			oldArrayDestinationDimension := arrayDestinationDimension;
 
 			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);
 				ELSE
 					Evaluate(expression, tmpOperand);

+ 5 - 2
source/FoxSemanticChecker.Mod

@@ -9951,10 +9951,13 @@ TYPE
 
 	PROCEDURE HasAddress*(expression: SyntaxTree.Expression): BOOLEAN;
 	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.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;
 	
 	PROCEDURE IsLocalVariable*(e: SyntaxTree.Expression): BOOLEAN;