Переглянути джерело

* add "doregister" parameter to tfloatdef.create, and don't register temporary
defs created in the scanner for evaluating compile time expressions

git-svn-id: trunk@32049 -

Jonas Maebe 9 роки тому
батько
коміт
cebcf0afa8
3 змінених файлів з 15 додано та 15 видалено
  1. 10 10
      compiler/psystem.pas
  2. 1 1
      compiler/scanner.pas
  3. 4 4
      compiler/symdef.pas

+ 10 - 10
compiler/psystem.pas

@@ -186,10 +186,10 @@ implementation
         begin
           if init_settings.fputype<>fpu_none then
             begin
-              s32floattype:=cfloatdef.create(s32real);
-              s64floattype:=cfloatdef.create(s64real);
-              s80floattype:=cfloatdef.create(s80real);
-              sc80floattype:=cfloatdef.create(sc80real);
+              s32floattype:=cfloatdef.create(s32real,true);
+              s64floattype:=cfloatdef.create(s64real,true);
+              s80floattype:=cfloatdef.create(s80real,true);
+              sc80floattype:=cfloatdef.create(sc80real,true);
             end else begin
               s32floattype:=nil;
               s64floattype:=nil;
@@ -246,7 +246,7 @@ implementation
           end
         else
 {$endif FPC_SUPPORT_X87_TYPES_ON_WIN64}
-          s64currencytype:=cfloatdef.create(s64currency);
+          s64currencytype:=cfloatdef.create(s64currency,true);
 {$endif x86}
 {$ifdef powerpc}
         create_fpu_types;
@@ -273,10 +273,10 @@ implementation
         s64currencytype:=corddef.create(scurrency,low(int64),high(int64),true);
 {$endif aarch64}
 {$ifdef avr}
-        s32floattype:=cfloatdef.create(s32real);
-        s64floattype:=cfloatdef.create(s64real);
-        s80floattype:=cfloatdef.create(s80real);
-        sc80floattype:=cfloatdef.create(sc80real);
+        s32floattype:=cfloatdef.create(s32real,true);
+        s64floattype:=cfloatdef.create(s64real,true);
+        s80floattype:=cfloatdef.create(s80real,true);
+        sc80floattype:=cfloatdef.create(sc80real,true);
         s64currencytype:=corddef.create(scurrency,low(int64),high(int64),true);
 {$endif avr}
 {$ifdef mips}
@@ -359,7 +359,7 @@ implementation
 {$ifndef FPC_SUPPORT_X87_TYPES_ON_WIN64}
         if target_info.system<>system_x86_64_win64 then
 {$endif FPC_SUPPORT_X87_TYPES_ON_WIN64}
-          addtype('Comp',cfloatdef.create(s64comp));
+          addtype('Comp',cfloatdef.create(s64comp,true));
 {$endif x86}
         addtype('Currency',s64currencytype);
         addtype('Pointer',voidpointertype);

+ 1 - 1
compiler/scanner.pas

@@ -923,7 +923,7 @@ type
       booldef:=torddef.create(pasbool8,0,1,false);
       strdef:=tstringdef.createansi(0,false);
       setdef:=tsetdef.create(sintdef,0,255,false);
-      realdef:=tfloatdef.create(s80real);
+      realdef:=tfloatdef.create(s80real,false);
     end;
 
   class destructor texprvalue.destroydefs;

+ 4 - 4
compiler/symdef.pas

@@ -535,7 +535,7 @@ interface
 
        tfloatdef = class(tstoreddef)
           floattype : tfloattype;
-          constructor create(t : tfloattype);virtual;
+          constructor create(t: tfloattype; doregister: boolean);virtual;
           constructor ppuload(ppufile:tcompilerppufile);
           function getcopy : tstoreddef;override;
           { do not override this routine in platform-specific subclasses,
@@ -2777,9 +2777,9 @@ implementation
                                 TFLOATDEF
 ****************************************************************************}
 
-    constructor tfloatdef.create(t : tfloattype);
+    constructor tfloatdef.create(t: tfloattype; doregister: boolean);
       begin
-         inherited create(floatdef,true);
+         inherited create(floatdef,doregister);
          floattype:=t;
          setsize;
       end;
@@ -2796,7 +2796,7 @@ implementation
 
     function tfloatdef.getcopy : tstoreddef;
       begin
-         result:=cfloatdef.create(floattype);
+         result:=cfloatdef.create(floattype,true);
          result.typ:=floatdef;
          tfloatdef(result).savesize:=savesize;
       end;