فهرست منبع

Improvements:
- patched an alignment bug with references section (too much alignment)
- call leave and reenter pairs only for procedure variables (avoid too many calls)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7481 8c9fc860-2736-0410-a75d-ab315db34111

felixf 7 سال پیش
والد
کامیت
ba00797090
1فایلهای تغییر یافته به همراه2 افزوده شده و 3 حذف شده
  1. 2 3
      source/FoxIntermediateBackend.Mod

+ 2 - 3
source/FoxIntermediateBackend.Mod

@@ -5932,7 +5932,7 @@ TYPE
 						
 						
 			ReleaseParameterRegisters();
 			ReleaseParameterRegisters();
 			
 			
-			IF backend.trackLeave & ~isUnchecked & (procedureType.callingConvention IN {SyntaxTree.WinAPICallingConvention, SyntaxTree.CCallingConvention}) THEN
+			IF ~(symbol IS SyntaxTree.Procedure) & backend.trackLeave & ~isUnchecked & (procedureType.callingConvention IN {SyntaxTree.WinAPICallingConvention, SyntaxTree.CCallingConvention}) THEN
 				SaveRegisters();ReleaseUsedRegisters(saved2);
 				SaveRegisters();ReleaseUsedRegisters(saved2);
 				CallThis(position,"Objects","LeaveA2",0);
 				CallThis(position,"Objects","LeaveA2",0);
 				RestoreRegisters(saved2);
 				RestoreRegisters(saved2);
@@ -5953,7 +5953,7 @@ TYPE
 				Emit(Result(position,return));
 				Emit(Result(position,return));
 			END;
 			END;
 
 
-			IF  backend.trackLeave & ~isUnchecked & (procedureType.callingConvention  IN {SyntaxTree.WinAPICallingConvention, SyntaxTree.CCallingConvention}) THEN
+			IF  ~(symbol IS SyntaxTree.Procedure) & backend.trackLeave & ~isUnchecked & (procedureType.callingConvention  IN {SyntaxTree.WinAPICallingConvention, SyntaxTree.CCallingConvention}) THEN
 				IF  (procedureType.returnType # NIL) & ~structuredReturnType  THEN 
 				IF  (procedureType.returnType # NIL) & ~structuredReturnType  THEN 
 					Emit(Push(position, return));
 					Emit(Push(position, return));
 					CallThis(position,"Objects","ReenterA2",0);
 					CallThis(position,"Objects","ReenterA2",0);
@@ -12467,7 +12467,6 @@ TYPE
 						INCL(flags, flagConstructor);
 						INCL(flags, flagConstructor);
 					END;
 					END;
 					Set(section, flags);
 					Set(section, flags);
-					IF module.system.addressType.sizeInBits = 64 THEN Longint(section, 0); END;
 					
 					
 					IF RefInfo THEN Info(section, "Parameters") END;
 					IF RefInfo THEN Info(section, "Parameters") END;
 					parameter := procedureType.firstParameter;
 					parameter := procedureType.firstParameter;