diff --git a/compiler/i8086/symcpu.pas b/compiler/i8086/symcpu.pas index 66cd262bf9..e7a5c23ab9 100644 --- a/compiler/i8086/symcpu.pas +++ b/compiler/i8086/symcpu.pas @@ -78,7 +78,19 @@ type end; tcpuclassrefdefclass = class of tcpuclassrefdef; + { tcpuarraydef } + tcpuarraydef = class(tarraydef) + private + huge: Boolean; + protected + procedure ppuload_platform(ppufile: tcompilerppufile); override; + procedure ppuwrite_platform(ppufile: tcompilerppufile); override; + public + constructor create_from_pointer(def:tpointerdef);override; + function getcopy: tstoreddef; override; + function GetTypeName:string;override; + property is_huge: Boolean read huge write huge; end; tcpuarraydefclass = class of tcpuarraydef; @@ -216,6 +228,57 @@ implementation end; +{**************************************************************************** + tcpuarraydef +****************************************************************************} + + constructor tcpuarraydef.create_from_pointer(def: tpointerdef); + begin + if tcpupointerdef(def).x86pointertyp=x86pt_huge then + begin + huge:=true; + { use -1 so that the elecount will not overflow } + self.create(0,high(asizeint)-1,s32inttype); + arrayoptions:=[ado_IsConvertedPointer]; + setelementdef(def.pointeddef); + end + else + begin + huge:=false; + inherited create_from_pointer(def); + end; + end; + + + function tcpuarraydef.getcopy: tstoreddef; + begin + result:=inherited; + tcpuarraydef(result).huge:=huge; + end; + + + function tcpuarraydef.GetTypeName: string; + begin + Result:=inherited; + if is_huge then + Result:='Huge '+Result; + end; + + + procedure tcpuarraydef.ppuload_platform(ppufile: tcompilerppufile); + begin + inherited; + huge:=(ppufile.getbyte<>0); + end; + + + procedure tcpuarraydef.ppuwrite_platform(ppufile: tcompilerppufile); + begin + inherited; + ppufile.putbyte(byte(huge)); + end; + + {**************************************************************************** tcpuprocdef ****************************************************************************} diff --git a/compiler/ppu.pas b/compiler/ppu.pas index 141227eeaa..eebe8fd350 100644 --- a/compiler/ppu.pas +++ b/compiler/ppu.pas @@ -43,7 +43,7 @@ type {$endif Test_Double_checksum} const - CurrentPPUVersion = 170; + CurrentPPUVersion = 171; { buffer sizes } maxentrysize = 1024; diff --git a/compiler/utils/ppuutils/ppudump.pp b/compiler/utils/ppuutils/ppudump.pp index 1038d5c542..e336731ca0 100644 --- a/compiler/utils/ppuutils/ppudump.pp +++ b/compiler/utils/ppuutils/ppudump.pp @@ -2865,6 +2865,8 @@ begin writeln([space,' Range : ',arrdef.RangeLow,' to ',arrdef.RangeHigh]); write ([space,' Options : ']); readarraydefoptions(arrdef); + if tsystemcpu(ppufile.header.cpu)=cpu_i8086 then + writeln([space,' Huge : ',(getbyte<>0)]); readsymtable('symbols', arrdef); end;