mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 00:29:19 +02:00
* new codegenerator compiles again
This commit is contained in:
parent
c9c758e318
commit
8b9633266b
@ -289,7 +289,9 @@ begin
|
|||||||
{$ifdef FPC}
|
{$ifdef FPC}
|
||||||
Writeln('Memory Lost = '+tostr(system.HeapSize-MemAvail-EntryMemUsed));
|
Writeln('Memory Lost = '+tostr(system.HeapSize-MemAvail-EntryMemUsed));
|
||||||
{$endif FPC}
|
{$endif FPC}
|
||||||
|
{$ifndef newcg}
|
||||||
Writeln('Repetitive firstpass = '+tostr(firstpass_several)+'/'+tostr(total_of_firstpass));
|
Writeln('Repetitive firstpass = '+tostr(firstpass_several)+'/'+tostr(total_of_firstpass));
|
||||||
|
{$endif newcg}
|
||||||
{$endif EXTDEBUG}
|
{$endif EXTDEBUG}
|
||||||
|
|
||||||
end;
|
end;
|
||||||
@ -298,7 +300,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.35 1999-09-28 19:48:45 florian
|
Revision 1.36 1999-10-12 21:20:41 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.35 1999/09/28 19:48:45 florian
|
||||||
* bug 617 fixed
|
* bug 617 fixed
|
||||||
|
|
||||||
Revision 1.34 1999/09/16 23:05:52 florian
|
Revision 1.34 1999/09/16 23:05:52 florian
|
||||||
|
@ -307,6 +307,7 @@ type tmsgconst=(
|
|||||||
cg_e_unable_inline_object_methods,
|
cg_e_unable_inline_object_methods,
|
||||||
cg_e_unable_inline_procvar,
|
cg_e_unable_inline_procvar,
|
||||||
cg_e_no_code_for_inline_stored,
|
cg_e_no_code_for_inline_stored,
|
||||||
|
cg_e_no_call_to_interrupt,
|
||||||
cg_e_can_access_element_zero,
|
cg_e_can_access_element_zero,
|
||||||
cg_e_include_not_implemented,
|
cg_e_include_not_implemented,
|
||||||
cg_e_cannot_call_cons_dest_inside_with,
|
cg_e_cannot_call_cons_dest_inside_with,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{$ifdef Delphi}
|
{$ifdef Delphi}
|
||||||
const msgtxt : array[0..000102] of string[240]=(
|
const msgtxt : array[0..000103] of string[240]=(
|
||||||
{$else Delphi}
|
{$else Delphi}
|
||||||
const msgtxt : array[0..000102,1..240] of char=(
|
const msgtxt : array[0..000103,1..240] of char=(
|
||||||
{$endif Delphi}
|
{$endif Delphi}
|
||||||
'T_Compiler: $1'#000+
|
'T_Compiler: $1'#000+
|
||||||
'D_Compiler OS: $1'#000+
|
'D_Compiler OS: $1'#000+
|
||||||
@ -326,196 +326,197 @@ const msgtxt : array[0..000102,1..240] of char=(
|
|||||||
'E_Object or class me','thods can'#039't be inline.'#000+
|
'E_Object or class me','thods can'#039't be inline.'#000+
|
||||||
'E_Procvar calls can'#039't be inline.'#000+
|
'E_Procvar calls can'#039't be inline.'#000+
|
||||||
'E_No code for inline procedure stored'#000+
|
'E_No code for inline procedure stored'#000+
|
||||||
|
'E_Direct call of interrupt procedure $1 is not possible'#000+
|
||||||
'E_Element zero of an ansi/wide- or longstring can'#039't be accessed, u'+
|
'E_Element zero of an ansi/wide- or longstring can'#039't be accessed, u'+
|
||||||
'se (set)length instead'#000+
|
'se (set)length instead'#000+
|
||||||
'E_Include and exclude not implemented in this case'#000+
|
'E','_Include and exclude not implemented in this case'#000+
|
||||||
'E_Cons','tructors or destructors can not be called inside a '#039'with'#039+
|
'E_Constructors or destructors can not be called inside a '#039'with'#039+
|
||||||
' clause'#000+
|
' clause'#000+
|
||||||
'E_Cannot call message handler method directly'#000+
|
'E_Cannot call message handler method directly'#000+
|
||||||
'D_Starting $1 styled assembler parsing'#000+
|
'D_Starting $1 styled assembler parsing'#000+
|
||||||
'D_Finished $1 styled assembler parsing'#000+
|
'D_Finished $1 styled assembler par','sing'#000+
|
||||||
'E_Non-label pattern contains @'#000+
|
'E_Non-label pattern contains @'#000+
|
||||||
'W_Override operator ','not supported'#000+
|
'W_Override operator not supported'#000+
|
||||||
'E_Error building record offset'#000+
|
'E_Error building record offset'#000+
|
||||||
'E_OFFSET used without identifier'#000+
|
'E_OFFSET used without identifier'#000+
|
||||||
'E_TYPE used without identifier'#000+
|
'E_TYPE used without identifier'#000+
|
||||||
'E_Cannot use local variable or parameters here'#000+
|
'E_Cannot use local variable or parameters here'#000+
|
||||||
'E_need to use OFFSET here'#000+
|
'E_need to use OFFSET here'#000+
|
||||||
'E_Cannot use multiple relocatable symbols'#000+
|
'E_','Cannot use multiple relocatable symbols'#000+
|
||||||
'E_Relocatable sy','mbol can only be added'#000+
|
'E_Relocatable symbol can only be added'#000+
|
||||||
'E_Invalid constant expression'#000+
|
'E_Invalid constant expression'#000+
|
||||||
'E_Relocatable symbol is not allowed'#000+
|
'E_Relocatable symbol is not allowed'#000+
|
||||||
'E_Invalid reference syntax'#000+
|
'E_Invalid reference syntax'#000+
|
||||||
'E_Local symbols/labels aren'#039't allowed as references'#000+
|
'E_Local symbols/labels aren'#039't allowed as references'#000+
|
||||||
'E_Invalid base and index register usage'#000+
|
'E_Invalid base a','nd index register usage'#000+
|
||||||
'E_Wrong scale factor specified'#000+
|
'E_Wrong scale factor specified'#000+
|
||||||
'E','_Multiple index register usage'#000+
|
'E_Multiple index register usage'#000+
|
||||||
'E_Invalid operand type'#000+
|
'E_Invalid operand type'#000+
|
||||||
'E_Invalid string as opcode operand: $1'#000+
|
'E_Invalid string as opcode operand: $1'#000+
|
||||||
'W_@CODE and @DATA not supported'#000+
|
'W_@CODE and @DATA not supported'#000+
|
||||||
'E_Null label references are not allowed'#000+
|
'E_Null label references are not allowed'#000+
|
||||||
'F_Divide by zero in asm evaluator'#000+
|
'F_Divide by zero in',' asm evaluator'#000+
|
||||||
'F_Evaluator stack overflow'#000+
|
'F_Evaluator stack overflow'#000+
|
||||||
'F_Evaluator st','ack underflow'#000+
|
'F_Evaluator stack underflow'#000+
|
||||||
'F_Invalid numeric format in asm evaluator'#000+
|
'F_Invalid numeric format in asm evaluator'#000+
|
||||||
'F_Invalid Operator in asm evaluator'#000+
|
'F_Invalid Operator in asm evaluator'#000+
|
||||||
'E_escape sequence ignored: $1'#000+
|
'E_escape sequence ignored: $1'#000+
|
||||||
'E_Invalid symbol reference'#000+
|
'E_Invalid symbol reference'#000+
|
||||||
'W_Fwait can cause emulation problems with emu387'#000+
|
'W_Fwait can cause emulation problem','s with emu387'#000+
|
||||||
'W_Calling an overload function in assemble','r'#000+
|
'W_Calling an overload function in assembler'#000+
|
||||||
'E_Unsupported symbol type for operand'#000+
|
'E_Unsupported symbol type for operand'#000+
|
||||||
'E_Constant value out of bounds'#000+
|
'E_Constant value out of bounds'#000+
|
||||||
'E_Error converting decimal $1'#000+
|
'E_Error converting decimal $1'#000+
|
||||||
'E_Error converting octal $1'#000+
|
'E_Error converting octal $1'#000+
|
||||||
'E_Error converting binary $1'#000+
|
'E_Error converting binary $1'#000+
|
||||||
'E_Error converting hexadecimal $1'#000+
|
'E_Error converting hexadec','imal $1'#000+
|
||||||
'H_$1 translated to $2'#000+
|
'H_$1 translated to $2'#000+
|
||||||
'W_$1 is associated to an o','verloaded function'#000+
|
'W_$1 is associated to an overloaded function'#000+
|
||||||
'E_Cannot use SELF outside a method'#000+
|
'E_Cannot use SELF outside a method'#000+
|
||||||
'E_Cannot use OLDEBP outside a nested procedure'#000+
|
'E_Cannot use OLDEBP outside a nested procedure'#000+
|
||||||
'W_Functions with void return value can'#039't return any value in asm c'+
|
'W_Functions with void return value can'#039't return any value in asm c'+
|
||||||
'ode'#000+
|
'ode'#000+
|
||||||
'E_SEG not supported'#000+
|
'E_SEG not sup','ported'#000+
|
||||||
'E_Size suffix and destination or source size do n','ot match'#000+
|
'E_Size suffix and destination or source size do not match'#000+
|
||||||
'W_Size suffix and destination or source size do not match'#000+
|
'W_Size suffix and destination or source size do not match'#000+
|
||||||
'E_Assembler syntax error'#000+
|
'E_Assembler syntax error'#000+
|
||||||
'E_Invalid combination of opcode and operands'#000+
|
'E_Invalid combination of opcode and operands'#000+
|
||||||
'E_Assemler syntax error in operand'#000+
|
'E_Assemler syntax error in operand'#000+
|
||||||
'E_Assemler syntax error in constant'#000+
|
'E_Assemler s','yntax error in constant'#000+
|
||||||
'E_Invalid String expression'#000+
|
'E_Invalid String expression'#000+
|
||||||
'32bi','t constant created for address'#000+
|
'32bit constant created for address'#000+
|
||||||
'E_Invalid or missing opcode'#000+
|
'E_Invalid or missing opcode'#000+
|
||||||
'E_Invalid combination of prefix and opcode: $1'#000+
|
'E_Invalid combination of prefix and opcode: $1'#000+
|
||||||
'E_Invalid combination of override and opcode: $1'#000+
|
'E_Invalid combination of override and opcode: $1'#000+
|
||||||
'E_Too many operands on line'#000+
|
'E_Too many operands on line'#000+
|
||||||
'W_NEAR ignored'#000+
|
'W','_NEAR ignored'#000+
|
||||||
'W_FAR ignored'#000+
|
'W_FAR ignored'#000+
|
||||||
'E_Duplicate local symbol $1'#000,
|
'E_Duplicate local symbol $1'#000+
|
||||||
'E_Undefined local symbol $1'#000+
|
'E_Undefined local symbol $1'#000+
|
||||||
'E_Unknown label identifier $1'#000+
|
'E_Unknown label identifier $1'#000+
|
||||||
'E_Invalid floating point register name'#000+
|
'E_Invalid floating point register name'#000+
|
||||||
'E_NOR not supported'#000+
|
'E_NOR not supported'#000+
|
||||||
'W_Modulo not supported'#000+
|
'W_Modulo not supported'#000+
|
||||||
'E_Invalid floating point constant $1'#000+
|
'E_Invalid floating point constant $1'#000+
|
||||||
'E_Invalid floating point expression'#000+
|
'E_Inval','id floating point expression'#000+
|
||||||
'E_Wrong symbol type'#000+
|
'E_Wrong symbol type'#000+
|
||||||
'E_Canno','t index a local var or parameter with a register'#000+
|
'E_Cannot index a local var or parameter with a register'#000+
|
||||||
'E_Invalid segment override expression'#000+
|
'E_Invalid segment override expression'#000+
|
||||||
'W_Identifier $1 supposed external'#000+
|
'W_Identifier $1 supposed external'#000+
|
||||||
'E_Strings not allowed as constants'#000+
|
'E_Strings not allowed as constants'#000+
|
||||||
'No type of variable specified'#000+
|
'No type of variable specifie','d'#000+
|
||||||
'E_assembler code not returned to text section'#000+
|
'E_assembler code not returned to text section'#000+
|
||||||
'E_Not a ','directive or local symbol $1'#000+
|
'E_Not a directive or local symbol $1'#000+
|
||||||
'E_Using a defined name as a local label'#000+
|
'E_Using a defined name as a local label'#000+
|
||||||
'E_Dollar token is used without an identifier'#000+
|
'E_Dollar token is used without an identifier'#000+
|
||||||
'W_32bit constant created for address'#000+
|
'W_32bit constant created for address'#000+
|
||||||
'N_.align is target specific, use .balign or .p2align'#000+
|
'N_.align is target specific, use ','.balign or .p2align'#000+
|
||||||
'E_Can'#039't access fields directly for p','arameters'#000+
|
'E_Can'#039't access fields directly for parameters'#000+
|
||||||
'E_Can'#039't access fields of objects/classes directly'#000+
|
'E_Can'#039't access fields of objects/classes directly'#000+
|
||||||
'F_Too many assembler files'#000+
|
'F_Too many assembler files'#000+
|
||||||
'F_Selected assembler output not supported'#000+
|
'F_Selected assembler output not supported'#000+
|
||||||
'F_Comp not supported'#000+
|
'F_Comp not supported'#000+
|
||||||
'F_Direct not support for binary writers'#000+
|
'F_Direct not support for binary wr','iters'#000+
|
||||||
'E_Allocating of data is only allowed in bss sectio','n'#000+
|
'E_Allocating of data is only allowed in bss section'#000+
|
||||||
'F_No binary writer selected'#000+
|
'F_No binary writer selected'#000+
|
||||||
'E_Asm: Opcode $1 not in table'#000+
|
'E_Asm: Opcode $1 not in table'#000+
|
||||||
'E_Asm: $1 invalid combination of opcode and operands'#000+
|
'E_Asm: $1 invalid combination of opcode and operands'#000+
|
||||||
'E_Asm: 16 Bit references not supported'#000+
|
'E_Asm: 16 Bit references not supported'#000+
|
||||||
'E_Asm: Invalid effective address'#000+
|
'E_Asm: Invalid effective address',#000+
|
||||||
'E_Asm: Immediate or reference expected'#000+
|
'E_Asm: Immediate or reference expected'#000+
|
||||||
'E_Asm: $1 value ','exceeds bounds $2'#000+
|
'E_Asm: $1 value exceeds bounds $2'#000+
|
||||||
'E_Asm: Short jump is out of range $1'#000+
|
'E_Asm: Short jump is out of range $1'#000+
|
||||||
'W_Source operating system redefined'#000+
|
'W_Source operating system redefined'#000+
|
||||||
'I_Assembling (pipe) $1'#000+
|
'I_Assembling (pipe) $1'#000+
|
||||||
'E_Can'#039't create assember file $1'#000+
|
'E_Can'#039't create assember file $1'#000+
|
||||||
'W_Assembler $1 not found, switching to external assembling'#000+
|
'W_Assembler $1 not found, switching to',' external assembling'#000+
|
||||||
'T_Using assembler: $1'#000+
|
'T_Using assembler: $1'#000+
|
||||||
'W_Error while',' assembling exitcode $1'#000+
|
'W_Error while assembling exitcode $1'#000+
|
||||||
'W_Can'#039't call the assembler, error $1 switching to external assembl'+
|
'W_Can'#039't call the assembler, error $1 switching to external assembl'+
|
||||||
'ing'#000+
|
'ing'#000+
|
||||||
'I_Assembling $1'#000+
|
'I_Assembling $1'#000+
|
||||||
'I_Assembling smartlink $1'#000+
|
'I_Assembling smartlink $1'#000+
|
||||||
'W_Linker $1 not found, switching to external linking'#000+
|
'W_Linker $1 not found, switching to external lin','king'#000+
|
||||||
'T_Using linker: $1'#000+
|
'T_Using linker: $1'#000+
|
||||||
'W_Object $1 not found, Linking m','ay fail !'#000+
|
'W_Object $1 not found, Linking may fail !'#000+
|
||||||
'W_Library $1 not found, Linking may fail !'#000+
|
'W_Library $1 not found, Linking may fail !'#000+
|
||||||
'W_Error while linking'#000+
|
'W_Error while linking'#000+
|
||||||
'W_Can'#039't call the linker, switching to external linking'#000+
|
'W_Can'#039't call the linker, switching to external linking'#000+
|
||||||
'I_Linking $1'#000+
|
'I_Linking $1'#000+
|
||||||
'W_binder not found, switching to external binding'#000+
|
'W_binder not found, switching to external',' binding'#000+
|
||||||
'W_ar not found, switching to external ar'#000+
|
'W_ar not found, switching to external ar'#000+
|
||||||
'E_Dyna','mic Libraries not supported'#000+
|
'E_Dynamic Libraries not supported'#000+
|
||||||
'I_Closing script $1'#000+
|
'I_Closing script $1'#000+
|
||||||
'W_resource compiler not found, switching to external mode'#000+
|
'W_resource compiler not found, switching to external mode'#000+
|
||||||
'I_Compiling resource $1'#000+
|
'I_Compiling resource $1'#000+
|
||||||
'F_Can'#039't post process executable $1'#000+
|
'F_Can'#039't post process executable $1'#000+
|
||||||
'F_Can'#039't open executable $1'#000+
|
'F_Can'#039't open execut','able $1'#000+
|
||||||
'X_Size of Code: $1 bytes'#000+
|
'X_Size of Code: $1 bytes'#000+
|
||||||
'X_Size of initialized d','ata: $1 bytes'#000+
|
'X_Size of initialized data: $1 bytes'#000+
|
||||||
'X_Size of uninitialized data: $1 bytes'#000+
|
'X_Size of uninitialized data: $1 bytes'#000+
|
||||||
'X_Stack space reserved: $1 bytes'#000+
|
'X_Stack space reserved: $1 bytes'#000+
|
||||||
'X_Stack space commited: $1 bytes'#000+
|
'X_Stack space commited: $1 bytes'#000+
|
||||||
'T_Unitsearch: $1'#000+
|
'T_Unitsearch: $1'#000+
|
||||||
'T_PPU Loading $1'#000+
|
'T_PPU Loading $1'#000+
|
||||||
'U_PPU Name: $1'#000+
|
'U_PPU Name: $1'#000+
|
||||||
'U_PPU Flags: $1'#000+
|
'U_PPU Flags: $1'#000,
|
||||||
'U_PPU Crc: $1'#000+
|
'U_PPU Crc: $1'#000+
|
||||||
'U_PPU Time: $1'#000+
|
'U_PPU Time: $1'#000+
|
||||||
'U_PPU File too short'#000+
|
'U_PPU File too short'#000+
|
||||||
'U_PPU ','Invalid Header (no PPU at the begin)'#000+
|
'U_PPU Invalid Header (no PPU at the begin)'#000+
|
||||||
'U_PPU Invalid Version $1'#000+
|
'U_PPU Invalid Version $1'#000+
|
||||||
'U_PPU is compiled for an other processor'#000+
|
'U_PPU is compiled for an other processor'#000+
|
||||||
'U_PPU is compiled for an other target'#000+
|
'U_PPU is compiled for an other target'#000+
|
||||||
'U_PPU Source: $1'#000+
|
'U_PPU Source: $1'#000+
|
||||||
'U_Writing $1'#000+
|
'U_Writing $1'#000+
|
||||||
'F_Can'#039't Write PPU-File'#000+
|
'F_Can'#039't Write',' PPU-File'#000+
|
||||||
'F_reading PPU-File'#000+
|
'F_reading PPU-File'#000+
|
||||||
'F_unexpected end of PPU-Fil','e'#000+
|
'F_unexpected end of PPU-File'#000+
|
||||||
'F_Invalid PPU-File entry: $1'#000+
|
'F_Invalid PPU-File entry: $1'#000+
|
||||||
'F_PPU Dbx count problem'#000+
|
'F_PPU Dbx count problem'#000+
|
||||||
'E_Illegal unit name: $1'#000+
|
'E_Illegal unit name: $1'#000+
|
||||||
'F_Too much units'#000+
|
'F_Too much units'#000+
|
||||||
'F_Circular unit reference between $1 and $2'#000+
|
'F_Circular unit reference between $1 and $2'#000+
|
||||||
'F_Can'#039't compile unit $1, no sources available'#000+
|
'F_Can'#039't compile unit $1, no sources availabl','e'#000+
|
||||||
'F_Can'#039't find unit $1'#000+
|
'F_Can'#039't find unit $1'#000+
|
||||||
'W_Unit $1 was not found but $2 ex','ists'#000+
|
'W_Unit $1 was not found but $2 exists'#000+
|
||||||
'F_Unit $1 searched but $2 found'#000+
|
'F_Unit $1 searched but $2 found'#000+
|
||||||
'W_Compiling the system unit requires the -Us switch'#000+
|
'W_Compiling the system unit requires the -Us switch'#000+
|
||||||
'F_There were $1 errors compiling module, stopping'#000+
|
'F_There were $1 errors compiling module, stopping'#000+
|
||||||
'U_Load from $1 ($2) unit $3'#000+
|
'U_Load from $1 ($2) unit $3'#000+
|
||||||
'U_Recompiling $1, checksum changed for $2'#000+
|
'U_Recompiling $1,',' checksum changed for $2'#000+
|
||||||
'U_Recompiling $1, source found ','only'#000+
|
'U_Recompiling $1, source found only'#000+
|
||||||
'U_Recompiling unit, static lib is older than ppufile'#000+
|
'U_Recompiling unit, static lib is older than ppufile'#000+
|
||||||
'U_Recompiling unit, shared lib is older than ppufile'#000+
|
'U_Recompiling unit, shared lib is older than ppufile'#000+
|
||||||
'U_Recompiling unit, obj and asm are older than ppufile'#000+
|
'U_Recompiling unit, obj and asm are older than ppufile'#000+
|
||||||
'U_Recompiling unit, obj is older than asm'#000+
|
'U_Recompiling unit',', obj is older than asm'#000+
|
||||||
'U_Parsing interface of $1'#000+
|
'U_Parsing interface of $1'#000+
|
||||||
'U_Pars','ing implementation of $1'#000+
|
'U_Parsing implementation of $1'#000+
|
||||||
'U_Second load for unit $1'#000+
|
'U_Second load for unit $1'#000+
|
||||||
'U_PPU Check file $1 time $2'#000+
|
'U_PPU Check file $1 time $2'#000+
|
||||||
'$1 [options] <inputfile> [options]'#000+
|
'$1 [options] <inputfile> [options]'#000+
|
||||||
'W_Only one source file supported'#000+
|
'W_Only one source file supported'#000+
|
||||||
'W_DEF file can be created only for OS/2'#000+
|
'W_DEF file can be created only for OS','/2'#000+
|
||||||
'E_nested response files are not supported'#000+
|
'E_nested response files are not supported'#000+
|
||||||
'F_No source',' file name in command line'#000+
|
'F_No source file name in command line'#000+
|
||||||
'E_Illegal parameter: $1'#000+
|
'E_Illegal parameter: $1'#000+
|
||||||
'H_-? writes help pages'#000+
|
'H_-? writes help pages'#000+
|
||||||
'F_Too many config files nested'#000+
|
'F_Too many config files nested'#000+
|
||||||
'F_Unable to open file $1'#000+
|
'F_Unable to open file $1'#000+
|
||||||
'N_Reading further options from $1'#000+
|
'N_Reading further options from $1'#000+
|
||||||
'W_Target is already set to: $1'#000+
|
'W_Target is already ','set to: $1'#000+
|
||||||
'W_Shared libs not supported on DOS platform, ','reverting to static'#000+
|
'W_Shared libs not supported on DOS platform, reverting to static'#000+
|
||||||
'F_too many IF(N)DEFs'#000+
|
'F_too many IF(N)DEFs'#000+
|
||||||
'F_too many ENDIFs'#000+
|
'F_too many ENDIFs'#000+
|
||||||
'F_open conditional at the end of the file'#000+
|
'F_open conditional at the end of the file'#000+
|
||||||
'W_Debug information generation is not supported by this executable'#000+
|
'W_Debug information generation is not supported by this executable'#000+
|
||||||
'H_Try recompiling with -dGDB'#000+
|
'H_Try recompilin','g with -dGDB'#000+
|
||||||
'E_You are using the obsolete switch $1'#000+
|
'E_You are using the obsolete switch $1'#000+
|
||||||
'E_Yo','u are using the obsolete switch $1, please use $2'#000+
|
'E_You are using the obsolete switch $1, please use $2'#000+
|
||||||
'N_Switching assembler to default source writing assembler'#000+
|
'N_Switching assembler to default source writing assembler'#000+
|
||||||
'Free Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'#000+
|
'Free Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'#000+
|
||||||
'Copyright (c) 1993-1999 by Florian Klaempfl'#000+
|
'Copyright (c)',' 1993-1999 by Florian Klaempfl'#000+
|
||||||
'Free Pascal Compiler vers','ion $FPCVER'#000+
|
'Free Pascal Compiler version $FPCVER'#000+
|
||||||
#000+
|
#000+
|
||||||
'Compiler Date : $FPCDATE'#000+
|
'Compiler Date : $FPCDATE'#000+
|
||||||
'Compiler Target: $FPCTARGET'#000+
|
'Compiler Target: $FPCTARGET'#000+
|
||||||
@ -523,130 +524,130 @@ const msgtxt : array[0..000102,1..240] of char=(
|
|||||||
'This program comes under the GNU General Public Licence'#000+
|
'This program comes under the GNU General Public Licence'#000+
|
||||||
'For more information read COPYING.FPC'#000+
|
'For more information read COPYING.FPC'#000+
|
||||||
#000+
|
#000+
|
||||||
'Report bugs,suggestions etc to:'#000+
|
'Report bugs,suggestio','ns etc to:'#000+
|
||||||
' fpc-devel@vekoll.saturnus.ve','in.hu'#000+
|
' fpc-devel@vekoll.saturnus.vein.hu'#000+
|
||||||
'**0*_put + after a boolean switch option to enable it, - to disable it'+
|
'**0*_put + after a boolean switch option to enable it, - to disable it'+
|
||||||
#000+
|
#000+
|
||||||
'**1a_the compiler doesn'#039't delete the generated assembler file'#000+
|
'**1a_the compiler doesn'#039't delete the generated assembler file'#000+
|
||||||
'**2al_list sourcecode lines in assembler file'#000+
|
'**2al_list sourcecode lines in assembler file',#000+
|
||||||
'**2ar_list register allocation/release info in assemble','r file'#000+
|
'**2ar_list register allocation/release info in assembler file'#000+
|
||||||
'**2at_list temp allocation/release info in assembler file'#000+
|
'**2at_list temp allocation/release info in assembler file'#000+
|
||||||
'**1b_generate browser info'#000+
|
'**1b_generate browser info'#000+
|
||||||
'**2bl_generate local symbol info'#000+
|
'**2bl_generate local symbol info'#000+
|
||||||
'**1B_build all modules'#000+
|
'**1B_build all modules'#000+
|
||||||
'**1C<x>_code generation options:'#000+
|
'**1C<x>_code generation options:'#000+
|
||||||
'3*2CD_create dynamic library'#000+
|
'3*2','CD_create dynamic library'#000+
|
||||||
'**2Ch<n>_<n> bytes heap (betwe','en 1023 and 67107840)'#000+
|
'**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#000+
|
||||||
'**2Ci_IO-checking'#000+
|
'**2Ci_IO-checking'#000+
|
||||||
'**2Cn_omit linking stage'#000+
|
'**2Cn_omit linking stage'#000+
|
||||||
'**2Co_check overflow of integer operations'#000+
|
'**2Co_check overflow of integer operations'#000+
|
||||||
'**2Cr_range checking'#000+
|
'**2Cr_range checking'#000+
|
||||||
'**2Cs<n>_set stack size to <n>'#000+
|
'**2Cs<n>_set stack size to <n>'#000+
|
||||||
'**2Ct_stack checking'#000+
|
'**2Ct_stack checking'#000+
|
||||||
'**2CD_create also dynamic library (* doesn'#039't work yet *)'#000+
|
'**2','CD_create also dynamic library (* doesn'#039't work yet *)'#000+
|
||||||
'**','2CX_create also smartlinked library'#000+
|
'**2CX_create also smartlinked library'#000+
|
||||||
'**1d<x>_defines the symbol <x>'#000+
|
'**1d<x>_defines the symbol <x>'#000+
|
||||||
'*O1D_generate a DEF file'#000+
|
'*O1D_generate a DEF file'#000+
|
||||||
'*O2Dd<x>_set description to <x>'#000+
|
'*O2Dd<x>_set description to <x>'#000+
|
||||||
'*O2Dw_PM application'#000+
|
'*O2Dw_PM application'#000+
|
||||||
'**1e<x>_set path to executable'#000+
|
'**1e<x>_set path to executable'#000+
|
||||||
'**1E_same as -Cn'#000+
|
'**1E_sam','e as -Cn'#000+
|
||||||
'**1F<x>_set file names and paths:'#000+
|
'**1F<x>_set file names and paths:'#000+
|
||||||
'**2FD<x>_sets',' the directory where to search for compiler utilities'#000+
|
'**2FD<x>_sets the directory where to search for compiler utilities'#000+
|
||||||
'**2Fe<x>_redirect error output to <x>'#000+
|
'**2Fe<x>_redirect error output to <x>'#000+
|
||||||
'**2FE<x>_set exe/unit output path to <x>'#000+
|
'**2FE<x>_set exe/unit output path to <x>'#000+
|
||||||
'**2Fi<x>_adds <x> to include path'#000+
|
'**2Fi<x>_adds <x> to include path'#000+
|
||||||
'**2Fl<x>_adds <x> to library path'#000+
|
'**2Fl<x>_adds <x>',' to library path'#000+
|
||||||
'*L2FL<x>_uses <x> as dynamic linker'#000+
|
'*L2FL<x>_uses <x> as dynamic linker'#000+
|
||||||
'**2','Fo<x>_adds <x> to object path'#000+
|
'**2Fo<x>_adds <x> to object path'#000+
|
||||||
'**2Fr<x>_load error message file <x>'#000+
|
'**2Fr<x>_load error message file <x>'#000+
|
||||||
'**2Fu<x>_adds <x> to unit path'#000+
|
'**2Fu<x>_adds <x> to unit path'#000+
|
||||||
'**2FU<x>_set unit output path to <x>, overrides -FE'#000+
|
'**2FU<x>_set unit output path to <x>, overrides -FE'#000+
|
||||||
'*g1g<x>_generate debugger information:'#000+
|
'*g1g<x>_generate debugger informat','ion:'#000+
|
||||||
'*g2gg_use gsym'#000+
|
'*g2gg_use gsym'#000+
|
||||||
'*g2gd_use dbx'#000+
|
'*g2gd_use dbx'#000+
|
||||||
'*g2gh_use heap trace u','nit'#000+
|
'*g2gh_use heap trace unit'#000+
|
||||||
'*g2gc_generate checks for pointers'#000+
|
'*g2gc_generate checks for pointers'#000+
|
||||||
'**1i_information'#000+
|
'**1i_information'#000+
|
||||||
'**2iD_return compiler date'#000+
|
'**2iD_return compiler date'#000+
|
||||||
'**2iV_return compiler version'#000+
|
'**2iV_return compiler version'#000+
|
||||||
'**2iSO_return compiler OS'#000+
|
'**2iSO_return compiler OS'#000+
|
||||||
'**2iSP_return compiler processor'#000+
|
'**2iSP_return compiler processor'#000+
|
||||||
'**2iTO_return target OS'#000+
|
'**2iTO_retur','n target OS'#000+
|
||||||
'**2iTP_return target processor'#000+
|
'**2iTP_return target processor'#000+
|
||||||
'**1I<x>_adds ','<x> to include path'#000+
|
'**1I<x>_adds <x> to include path'#000+
|
||||||
'**1k<x>_Pass <x> to the linker'#000+
|
'**1k<x>_Pass <x> to the linker'#000+
|
||||||
'**1l_write logo'#000+
|
'**1l_write logo'#000+
|
||||||
'**1n_don'#039't read the default config file'#000+
|
'**1n_don'#039't read the default config file'#000+
|
||||||
'**1o<x>_change the name of the executable produced to <x>'#000+
|
'**1o<x>_change the name of the executable produced to <x>'#000+
|
||||||
'**1pg_generate profile code for gprof (defines FPC_PROFILE)'#000+
|
'**1pg_generate prof','ile code for gprof (defines FPC_PROFILE)'#000+
|
||||||
'*L1P_use pipes ','instead of creating temporary assembler files'#000+
|
'*L1P_use pipes instead of creating temporary assembler files'#000+
|
||||||
'**1S<x>_syntax options:'#000+
|
'**1S<x>_syntax options:'#000+
|
||||||
'**2S2_switch some Delphi 2 extensions on'#000+
|
'**2S2_switch some Delphi 2 extensions on'#000+
|
||||||
'**2Sc_supports operators like C (*=,+=,/= and -=)'#000+
|
'**2Sc_supports operators like C (*=,+=,/= and -=)'#000+
|
||||||
'**2Sd_tries to be Delphi compatible'#000+
|
'**2Sd_tries to be Delph','i compatible'#000+
|
||||||
'**2Se<x>_compiler stops after the <x> error','s (default is 1)'#000+
|
'**2Se<x>_compiler stops after the <x> errors (default is 1)'#000+
|
||||||
'**2Sg_allow LABEL and GOTO'#000+
|
'**2Sg_allow LABEL and GOTO'#000+
|
||||||
'**2Sh_Use ansistrings'#000+
|
'**2Sh_Use ansistrings'#000+
|
||||||
'**2Si_support C++ styled INLINE'#000+
|
'**2Si_support C++ styled INLINE'#000+
|
||||||
'**2Sm_support macros like C (global)'#000+
|
'**2Sm_support macros like C (global)'#000+
|
||||||
'**2So_tries to be TP/BP 7.0 compatible'#000+
|
'**2So_tries to be TP/BP 7.0 compatible'#000+
|
||||||
'**2Sp_tries to be gpc compatible'#000+
|
'**2Sp_trie','s to be gpc compatible'#000+
|
||||||
'**2Ss_constructor name must be in','it (destructor must be done)'#000+
|
'**2Ss_constructor name must be init (destructor must be done)'#000+
|
||||||
'**2St_allow static keyword in objects'#000+
|
'**2St_allow static keyword in objects'#000+
|
||||||
'**1s_don'#039't call assembler and linker (only with -a)'#000+
|
'**1s_don'#039't call assembler and linker (only with -a)'#000+
|
||||||
'**1u<x>_undefines the symbol <x>'#000+
|
'**1u<x>_undefines the symbol <x>'#000+
|
||||||
'**1U_unit options:'#000+
|
'**1U_unit options:'#000+
|
||||||
'**2Un_don'#039't check the unit name'#000+
|
'**2Un_don'#039't c','heck the unit name'#000+
|
||||||
'**2Us_compile a system unit'#000+
|
'**2Us_compile a system unit'#000+
|
||||||
'**1v<x>_B','e verbose. <x> is a combination of the following letters:'#000+
|
'**1v<x>_Be verbose. <x> is a combination of the following letters:'#000+
|
||||||
'**2*_e : Show errors (default) d : Show debug info'#000+
|
'**2*_e : Show errors (default) d : Show debug info'#000+
|
||||||
'**2*_w : Show warnings u : Show unit info'#000+
|
'**2*_w : Show warnings u : Show unit info'#000+
|
||||||
'**2*_n : Show notes t : Show tried/used files'#000+
|
'**2*_n : Show',' notes t : Show tried/used files'#000+
|
||||||
'**2*_h',' : Show hints m : Show defined macros'#000+
|
'**2*_h : Show hints m : Show defined macros'#000+
|
||||||
'**2*_i : Show general info p : Show compiled procedures'#000+
|
'**2*_i : Show general info p : Show compiled procedures'#000+
|
||||||
'**2*_l : Show linenumbers c : Show conditionals'#000+
|
'**2*_l : Show linenumbers c : Show conditionals'#000+
|
||||||
'**2*_a : Show everything 0 : Show nothing (excep','t errors'+
|
'**2*','_a : Show everything 0 : Show nothing (except errors'+
|
||||||
')'#000+
|
')'#000+
|
||||||
'**2*_b : Show all procedure r : Rhide/GCC compatibility mode'#000+
|
'**2*_b : Show all procedure r : Rhide/GCC compatibility mode'#000+
|
||||||
'**2*_ declarations if an error x : Executable info (Win32 only)'#000+
|
'**2*_ declarations if an error x : Executable info (Win32 only)'#000+
|
||||||
'**2*_ occurs'#000+
|
'**2*_ occurs'#000+
|
||||||
'**1X_executable options:'#000+
|
'**1X_executable op','tions:'#000+
|
||||||
'*L2Xc_link with the c library'#000+
|
'*L2Xc_link with the c library'#000+
|
||||||
'**2Xs_strip all sym','bols from executable'#000+
|
'**2Xs_strip all symbols from executable'#000+
|
||||||
'**2XD_try to link dynamic (defines FPC_LINK_DYNAMIC)'#000+
|
'**2XD_try to link dynamic (defines FPC_LINK_DYNAMIC)'#000+
|
||||||
'**2XS_try to link static (default) (defines FPC_LINK_STATIC)'#000+
|
'**2XS_try to link static (default) (defines FPC_LINK_STATIC)'#000+
|
||||||
'**2XX_try to link smart (defines FPC_LINK_SMART)'#000+
|
'**2XX_try to link smart (defi','nes FPC_LINK_SMART)'#000+
|
||||||
'**0*_Processor specific options:'#000+
|
'**0*_Processor specific options:'#000+
|
||||||
'3*1','A<x>_output format:'#000+
|
'3*1A<x>_output format:'#000+
|
||||||
'3*2Aas_assemble using GNU AS'#000+
|
'3*2Aas_assemble using GNU AS'#000+
|
||||||
'3*2Aasaout_assemble using GNU AS for aout (Go32v1)'#000+
|
'3*2Aasaout_assemble using GNU AS for aout (Go32v1)'#000+
|
||||||
'3*2Anasmcoff_coff (Go32v2) file using Nasm'#000+
|
'3*2Anasmcoff_coff (Go32v2) file using Nasm'#000+
|
||||||
'3*2Anasmelf_elf32 (Linux) file using Nasm'#000+
|
'3*2Anasmelf_elf32 (Linux) file using Nasm',#000+
|
||||||
'3*2Anasmobj_obj file using Nasm'#000+
|
'3*2Anasmobj_obj file using Nasm'#000+
|
||||||
'3*2Amasm_obj file using',' Masm (Microsoft)'#000+
|
'3*2Amasm_obj file using Masm (Microsoft)'#000+
|
||||||
'3*2Atasm_obj file using Tasm (Borland)'#000+
|
'3*2Atasm_obj file using Tasm (Borland)'#000+
|
||||||
'3*2Acoff_coff (Go32v2) using internal writer'#000+
|
'3*2Acoff_coff (Go32v2) using internal writer'#000+
|
||||||
'3*2Apecoff_pecoff (Win32) using internal writer'#000+
|
'3*2Apecoff_pecoff (Win32) using internal writer'#000+
|
||||||
'3*1R<x>_assembler reading style:'#000+
|
'3*1R<x>_assembler reading style:'#000+
|
||||||
'3*2Ratt_read AT&T style assembler'#000+
|
'3','*2Ratt_read AT&T style assembler'#000+
|
||||||
'3*2Rintel_read Intel st','yle assembler'#000+
|
'3*2Rintel_read Intel style assembler'#000+
|
||||||
'3*2Rdirect_copy assembler text directly to assembler file'#000+
|
'3*2Rdirect_copy assembler text directly to assembler file'#000+
|
||||||
'3*1O<x>_optimizations:'#000+
|
'3*1O<x>_optimizations:'#000+
|
||||||
'3*2Og_generate smaller code'#000+
|
'3*2Og_generate smaller code'#000+
|
||||||
'3*2OG_generate faster code (default)'#000+
|
'3*2OG_generate faster code (default)'#000+
|
||||||
'3*2Or_keep certain variables in registers (still BUGGY!!!)'#000+
|
'3*2Or_keep certain varia','bles in registers (still BUGGY!!!)'#000+
|
||||||
'3*2Ou_enable uncertai','n optimizations (see docs)'#000+
|
'3*2Ou_enable uncertain optimizations (see docs)'#000+
|
||||||
'3*2O1_level 1 optimizations (quick optimizations)'#000+
|
'3*2O1_level 1 optimizations (quick optimizations)'#000+
|
||||||
'3*2O2_level 2 optimizations (-O1 + slower optimizations)'#000+
|
'3*2O2_level 2 optimizations (-O1 + slower optimizations)'#000+
|
||||||
'3*2O3_level 3 optimizations (same as -O2u)'#000+
|
'3*2O3_level 3 optimizations (same as -O2u)'#000+
|
||||||
'3*2Op<x>_target processor:'#000+
|
'3*2Op<x','>_target processor:'#000+
|
||||||
'3*3Op1_set target processor to 386/4','86'#000+
|
'3*3Op1_set target processor to 386/486'#000+
|
||||||
'3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#000+
|
'3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#000+
|
||||||
'3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#000+
|
'3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#000+
|
||||||
'3*1T<x>_Target operating system:'#000+
|
'3*1T<x>_Target operating system:'#000+
|
||||||
'3*2TGO32V1_version 1 of DJ Delorie DOS extender'#000+
|
'3*2TGO32V1_version 1 of DJ Delorie DOS ','extender'#000+
|
||||||
'3*2TGO32V2_version 2 of DJ Delorie DOS extender',#000+
|
'3*2TGO32V2_version 2 of DJ Delorie DOS extender'#000+
|
||||||
'3*2TLINUX_Linux'#000+
|
'3*2TLINUX_Linux'#000+
|
||||||
'3*2TOS2_OS/2 2.x'#000+
|
'3*2TOS2_OS/2 2.x'#000+
|
||||||
'3*2TWin32_Windows 32 Bit'#000+
|
'3*2TWin32_Windows 32 Bit'#000+
|
||||||
@ -654,21 +655,21 @@ const msgtxt : array[0..000102,1..240] of char=(
|
|||||||
'6*2Aas_Unix o-file using GNU AS'#000+
|
'6*2Aas_Unix o-file using GNU AS'#000+
|
||||||
'6*2Agas_GNU Motorola assembler'#000+
|
'6*2Agas_GNU Motorola assembler'#000+
|
||||||
'6*2Amit_MIT Syntax (old GAS)'#000+
|
'6*2Amit_MIT Syntax (old GAS)'#000+
|
||||||
'6*2Amot_Standard Motorola assembler'#000+
|
'6*2Amot_Sta','ndard Motorola assembler'#000+
|
||||||
'6*1O_optimizations:'#000+
|
'6*1O_optimizations:'#000+
|
||||||
'6*2Oa_turn ','on the optimizer'#000+
|
'6*2Oa_turn on the optimizer'#000+
|
||||||
'6*2Og_generate smaller code'#000+
|
'6*2Og_generate smaller code'#000+
|
||||||
'6*2OG_generate faster code (default)'#000+
|
'6*2OG_generate faster code (default)'#000+
|
||||||
'6*2Ox_optimize maximum (still BUGGY!!!)'#000+
|
'6*2Ox_optimize maximum (still BUGGY!!!)'#000+
|
||||||
'6*2O2_set target processor to a MC68020+'#000+
|
'6*2O2_set target processor to a MC68020+'#000+
|
||||||
'6*1R<x>_assembler reading style:'#000+
|
'6*1R<x>_assembler rea','ding style:'#000+
|
||||||
'6*2RMOT_read motorola style assembler'#000+
|
'6*2RMOT_read motorola style assembler'#000+
|
||||||
'6*1T<x','>_Target operating system:'#000+
|
'6*1T<x>_Target operating system:'#000+
|
||||||
'6*2TAMIGA_Commodore Amiga'#000+
|
'6*2TAMIGA_Commodore Amiga'#000+
|
||||||
'6*2TATARI_Atari ST/STe/TT'#000+
|
'6*2TATARI_Atari ST/STe/TT'#000+
|
||||||
'6*2TMACOS_Macintosh m68k'#000+
|
'6*2TMACOS_Macintosh m68k'#000+
|
||||||
'6*2TLINUX_Linux-68k'#000+
|
'6*2TLINUX_Linux-68k'#000+
|
||||||
'**1*_'#000+
|
'**1*_'#000+
|
||||||
'**1?_shows this help'#000+
|
'**1?_shows this help'#000+
|
||||||
'**1h_shows this help without waiting'#000
|
'**1h_shows this help without wait','ing'#000
|
||||||
);
|
);
|
||||||
|
@ -136,7 +136,7 @@ ifneq ($(findstring -di386,$(COMPILER)),)
|
|||||||
override COMPILER+=-dSUPPORT_MMX
|
override COMPILER+=-dSUPPORT_MMX
|
||||||
endif
|
endif
|
||||||
|
|
||||||
override COMPILER+=$(LOCALOPT) -Fu$(CPU)
|
override COMPILER+=-Fu$(CPU) $(LOCALOPT)
|
||||||
|
|
||||||
ifneq (,$(findstring -s ,$(LOCALOPT)))
|
ifneq (,$(findstring -s ,$(LOCALOPT)))
|
||||||
override EXECPPAS=@$(PPAS)
|
override EXECPPAS=@$(PPAS)
|
||||||
@ -175,6 +175,12 @@ endif
|
|||||||
|
|
||||||
PPEXENAME=pp$(EXEEXT)
|
PPEXENAME=pp$(EXEEXT)
|
||||||
EXENAME=ppc386$(EXEEXT)
|
EXENAME=ppc386$(EXEEXT)
|
||||||
|
ifeq ($(CPU),powerpc)
|
||||||
|
EXENAME=ppcppc$(EXEEXT)
|
||||||
|
endif
|
||||||
|
ifeq ($(CPU),alpha)
|
||||||
|
EXENAME=ppcalpha$(EXEEXT)
|
||||||
|
endif
|
||||||
M68KEXENAME=ppc68k$(EXEEXT)
|
M68KEXENAME=ppc68k$(EXEEXT)
|
||||||
TEMPNAME=ppc$(EXEEXT)
|
TEMPNAME=ppc$(EXEEXT)
|
||||||
TEMPNAME1=ppc1$(EXEEXT)
|
TEMPNAME1=ppc1$(EXEEXT)
|
||||||
@ -394,7 +400,10 @@ $(M68KEXENAME): $(PASFILES) $(INCFILES)
|
|||||||
|
|
||||||
#
|
#
|
||||||
# $Log$
|
# $Log$
|
||||||
# Revision 1.2 1999-08-02 17:16:41 michael
|
# Revision 1.3 1999-10-12 21:20:46 florian
|
||||||
|
# * new codegenerator compiles again
|
||||||
|
#
|
||||||
|
# Revision 1.2 1999/08/02 17:16:41 michael
|
||||||
# + Changes for alpha
|
# + Changes for alpha
|
||||||
#
|
#
|
||||||
# Revision 1.1 1999/08/01 23:19:58 florian
|
# Revision 1.1 1999/08/01 23:19:58 florian
|
||||||
|
@ -130,7 +130,7 @@ unit cgbase;
|
|||||||
|
|
||||||
var
|
var
|
||||||
{ info about the current sub routine }
|
{ info about the current sub routine }
|
||||||
procinfo : tprocinfo;
|
procinfo : pprocinfo;
|
||||||
|
|
||||||
{ labels for BREAK and CONTINUE }
|
{ labels for BREAK and CONTINUE }
|
||||||
aktbreaklabel,aktcontinuelabel : pasmlabel;
|
aktbreaklabel,aktcontinuelabel : pasmlabel;
|
||||||
@ -145,7 +145,7 @@ unit cgbase;
|
|||||||
aktexit2label : pasmlabel;
|
aktexit2label : pasmlabel;
|
||||||
|
|
||||||
{ only used in constructor for fail or if getmem fails }
|
{ only used in constructor for fail or if getmem fails }
|
||||||
quickexitlabel : pasmlabel;
|
faillabel,quickexitlabel : pasmlabel;
|
||||||
|
|
||||||
{ Boolean, wenn eine loadn kein Assembler erzeugt hat }
|
{ Boolean, wenn eine loadn kein Assembler erzeugt hat }
|
||||||
simple_loadn : boolean;
|
simple_loadn : boolean;
|
||||||
@ -262,25 +262,27 @@ unit cgbase;
|
|||||||
begin
|
begin
|
||||||
aktbreaklabel:=nil;
|
aktbreaklabel:=nil;
|
||||||
aktcontinuelabel:=nil;
|
aktcontinuelabel:=nil;
|
||||||
|
new(procinfo);
|
||||||
{ aktexitlabel:=0; is store in oldaktexitlabel
|
{ aktexitlabel:=0; is store in oldaktexitlabel
|
||||||
so it must not be reset to zero before this storage !}
|
so it must not be reset to zero before this storage !}
|
||||||
{ the type of this lists isn't important }
|
{ the type of this lists isn't important }
|
||||||
{ because the code of this lists is }
|
{ because the code of this lists is }
|
||||||
{ copied to the code segment }
|
{ copied to the code segment }
|
||||||
procinfo.aktentrycode:=new(paasmoutput,init);
|
procinfo^.aktentrycode:=new(paasmoutput,init);
|
||||||
procinfo.aktexitcode:=new(paasmoutput,init);
|
procinfo^.aktexitcode:=new(paasmoutput,init);
|
||||||
procinfo.aktproccode:=new(paasmoutput,init);
|
procinfo^.aktproccode:=new(paasmoutput,init);
|
||||||
procinfo.aktlocaldata:=new(paasmoutput,init);
|
procinfo^.aktlocaldata:=new(paasmoutput,init);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
procedure codegen_doneprocedure;
|
procedure codegen_doneprocedure;
|
||||||
begin
|
begin
|
||||||
dispose(procinfo.aktentrycode,done);
|
dispose(procinfo^.aktentrycode,done);
|
||||||
dispose(procinfo.aktexitcode,done);
|
dispose(procinfo^.aktexitcode,done);
|
||||||
dispose(procinfo.aktproccode,done);
|
dispose(procinfo^.aktproccode,done);
|
||||||
dispose(procinfo.aktlocaldata,done);
|
dispose(procinfo^.aktlocaldata,done);
|
||||||
|
dispose(procinfo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -425,7 +427,10 @@ unit cgbase;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.9 1999-09-10 18:48:11 florian
|
Revision 1.10 1999-10-12 21:20:46 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.9 1999/09/10 18:48:11 florian
|
||||||
* some bug fixes (e.g. must_be_valid and procinfo.funcret_is_valid)
|
* some bug fixes (e.g. must_be_valid and procinfo.funcret_is_valid)
|
||||||
* most things for stored properties fixed
|
* most things for stored properties fixed
|
||||||
|
|
||||||
|
@ -448,11 +448,11 @@ unit cgobj;
|
|||||||
pobjectdef(pvarsym(p)^.definition)^.is_class) and
|
pobjectdef(pvarsym(p)^.definition)^.is_class) and
|
||||||
pvarsym(p)^.definition^.needs_inittable then
|
pvarsym(p)^.definition^.needs_inittable then
|
||||||
begin
|
begin
|
||||||
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
|
procinfo^.flags:=procinfo^.flags or pi_needs_implicit_finally;
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
if psym(p)^.owner^.symtabletype=localsymtable then
|
if psym(p)^.owner^.symtabletype=localsymtable then
|
||||||
begin
|
begin
|
||||||
hr.base:=procinfo.framepointer;
|
hr.base:=procinfo^.framepointer;
|
||||||
hr.offset:=-pvarsym(p)^.address;
|
hr.offset:=-pvarsym(p)^.address;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -477,13 +477,13 @@ unit cgobj;
|
|||||||
pvarsym(p)^.definition^.needs_inittable and
|
pvarsym(p)^.definition^.needs_inittable and
|
||||||
((pvarsym(p)^.varspez=vs_value)) then
|
((pvarsym(p)^.varspez=vs_value)) then
|
||||||
begin
|
begin
|
||||||
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
|
procinfo^.flags:=procinfo^.flags or pi_needs_implicit_finally;
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
hr.symbol:=pvarsym(p)^.definition^.get_inittable_label;
|
hr.symbol:=pvarsym(p)^.definition^.get_inittable_label;
|
||||||
a_param_ref_addr(list,hr,2);
|
a_param_ref_addr(list,hr,2);
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
hr.base:=procinfo.framepointer;
|
hr.base:=procinfo^.framepointer;
|
||||||
hr.offset:=pvarsym(p)^.address+procinfo.call_offset;
|
hr.offset:=pvarsym(p)^.address+procinfo^.call_offset;
|
||||||
a_param_ref_addr(list,hr,1);
|
a_param_ref_addr(list,hr,1);
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
a_call_name(list,'FPC_ADDREF',0);
|
a_call_name(list,'FPC_ADDREF',0);
|
||||||
@ -510,18 +510,18 @@ unit cgobj;
|
|||||||
(pvarsym(p)^.varspez=vs_const) { and
|
(pvarsym(p)^.varspez=vs_const) { and
|
||||||
(dont_copy_const_param(pvarsym(p)^.definition)) } ) then
|
(dont_copy_const_param(pvarsym(p)^.definition)) } ) then
|
||||||
exit;
|
exit;
|
||||||
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
|
procinfo^.flags:=procinfo^.flags or pi_needs_implicit_finally;
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
case psym(p)^.owner^.symtabletype of
|
case psym(p)^.owner^.symtabletype of
|
||||||
localsymtable:
|
localsymtable:
|
||||||
begin
|
begin
|
||||||
hr.base:=procinfo.framepointer;
|
hr.base:=procinfo^.framepointer;
|
||||||
hr.offset:=-pvarsym(p)^.address;
|
hr.offset:=-pvarsym(p)^.address;
|
||||||
end;
|
end;
|
||||||
parasymtable:
|
parasymtable:
|
||||||
begin
|
begin
|
||||||
hr.base:=procinfo.framepointer;
|
hr.base:=procinfo^.framepointer;
|
||||||
hr.offset:=pvarsym(p)^.address+procinfo.call_offset;
|
hr.offset:=pvarsym(p)^.address+procinfo^.call_offset;
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
hr.symbol:=newasmsymbol(pvarsym(p)^.mangledname);
|
hr.symbol:=newasmsymbol(pvarsym(p)^.mangledname);
|
||||||
@ -561,9 +561,9 @@ unit cgobj;
|
|||||||
begin
|
begin
|
||||||
if hp^.temptype in [tt_ansistring,tt_freeansistring] then
|
if hp^.temptype in [tt_ansistring,tt_freeansistring] then
|
||||||
begin
|
begin
|
||||||
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
|
procinfo^.flags:=procinfo^.flags or pi_needs_implicit_finally;
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
hr.base:=procinfo.framepointer;
|
hr.base:=procinfo^.framepointer;
|
||||||
hr.offset:=hp^.pos;
|
hr.offset:=hp^.pos;
|
||||||
a_param_ref_addr(list,hr,1);
|
a_param_ref_addr(list,hr,1);
|
||||||
a_call_name(list,'FPC_ANSISTR_DECR_REF',0);
|
a_call_name(list,'FPC_ANSISTR_DECR_REF',0);
|
||||||
@ -635,21 +635,21 @@ unit cgobj;
|
|||||||
end;
|
end;
|
||||||
{ omit stack frame ? }
|
{ omit stack frame ? }
|
||||||
if not inlined then
|
if not inlined then
|
||||||
if procinfo.framepointer=stack_pointer then
|
if procinfo^.framepointer=stack_pointer then
|
||||||
begin
|
begin
|
||||||
CGMessage(cg_d_stackframe_omited);
|
CGMessage(cg_d_stackframe_omited);
|
||||||
nostackframe:=true;
|
nostackframe:=true;
|
||||||
if (aktprocsym^.definition^.proctypeoption in [potype_unitinit,potype_proginit,potype_unitfinalize]) then
|
if (aktprocsym^.definition^.proctypeoption in [potype_unitinit,potype_proginit,potype_unitfinalize]) then
|
||||||
parasize:=0
|
parasize:=0
|
||||||
else
|
else
|
||||||
parasize:=aktprocsym^.definition^.parast^.datasize+procinfo.call_offset-pointersize;
|
parasize:=aktprocsym^.definition^.parast^.datasize+procinfo^.call_offset-pointersize;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if (aktprocsym^.definition^.proctypeoption in [potype_unitinit,potype_proginit,potype_unitfinalize]) then
|
if (aktprocsym^.definition^.proctypeoption in [potype_unitinit,potype_proginit,potype_unitfinalize]) then
|
||||||
parasize:=0
|
parasize:=0
|
||||||
else
|
else
|
||||||
parasize:=aktprocsym^.definition^.parast^.datasize+procinfo.call_offset-pointersize*2;
|
parasize:=aktprocsym^.definition^.parast^.datasize+procinfo^.call_offset-pointersize*2;
|
||||||
nostackframe:=false;
|
nostackframe:=false;
|
||||||
|
|
||||||
if (po_interrupt in aktprocsym^.definition^.procoptions) then
|
if (po_interrupt in aktprocsym^.definition^.procoptions) then
|
||||||
@ -693,7 +693,7 @@ unit cgobj;
|
|||||||
{ a constructor needs a help procedure }
|
{ a constructor needs a help procedure }
|
||||||
if (aktprocsym^.definition^.options and poconstructor)<>0 then
|
if (aktprocsym^.definition^.options and poconstructor)<>0 then
|
||||||
begin
|
begin
|
||||||
if procinfo._class^.isclass then
|
if procinfo^._class^.isclass then
|
||||||
begin
|
begin
|
||||||
list^.concat(new(paicpu,op_sym(A_CALL,S_NO,newasmsymbol('FPC_NEW_CLASS'))));
|
list^.concat(new(paicpu,op_sym(A_CALL,S_NO,newasmsymbol('FPC_NEW_CLASS'))));
|
||||||
list^.concat(new(paicpu,op_cond_sym(A_Jcc,C_Z,S_NO,quickexitlabel)));
|
list^.concat(new(paicpu,op_cond_sym(A_Jcc,C_Z,S_NO,quickexitlabel)));
|
||||||
@ -704,7 +704,7 @@ unit cgobj;
|
|||||||
list^.insert(new(pai_labeled,init(A_JZ,quickexitlabel)));
|
list^.insert(new(pai_labeled,init(A_JZ,quickexitlabel)));
|
||||||
list^.insert(new(paicpu,op_csymbol(A_CALL,S_NO,
|
list^.insert(new(paicpu,op_csymbol(A_CALL,S_NO,
|
||||||
newcsymbol('FPC_HELP_CONSTRUCTOR',0))));
|
newcsymbol('FPC_HELP_CONSTRUCTOR',0))));
|
||||||
list^.insert(new(paicpu,op_const_reg(A_MOV,S_L,procinfo._class^.vmt_offset,R_EDI)));
|
list^.insert(new(paicpu,op_const_reg(A_MOV,S_L,procinfo^._class^.vmt_offset,R_EDI)));
|
||||||
concat_external('FPC_HELP_CONSTRUCTOR',EXT_NEAR);
|
concat_external('FPC_HELP_CONSTRUCTOR',EXT_NEAR);
|
||||||
}
|
}
|
||||||
end;
|
end;
|
||||||
@ -716,12 +716,13 @@ unit cgobj;
|
|||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
|
|
||||||
{ initialize return value }
|
{ initialize return value }
|
||||||
if is_ansistring(procinfo.retdef) or
|
if assigned(procinfo^.retdef) and
|
||||||
is_widestring(procinfo.retdef) then
|
is_ansistring(procinfo^.retdef) or
|
||||||
|
is_widestring(procinfo^.retdef) then
|
||||||
begin
|
begin
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
hr.offset:=procinfo.retoffset;
|
hr.offset:=procinfo^.retoffset;
|
||||||
hr.base:=procinfo.framepointer;
|
hr.base:=procinfo^.framepointer;
|
||||||
a_load_const_ref(list,OS_32,0,hr);
|
a_load_const_ref(list,OS_32,0,hr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -737,7 +738,7 @@ unit cgobj;
|
|||||||
|
|
||||||
if (cs_profile in aktmoduleswitches) or
|
if (cs_profile in aktmoduleswitches) or
|
||||||
(aktprocsym^.definition^.owner^.symtabletype=globalsymtable) or
|
(aktprocsym^.definition^.owner^.symtabletype=globalsymtable) or
|
||||||
(assigned(procinfo._class) and (procinfo._class^.owner^.symtabletype=globalsymtable)) then
|
(assigned(procinfo^._class) and (procinfo^._class^.owner^.symtabletype=globalsymtable)) then
|
||||||
make_global:=true;
|
make_global:=true;
|
||||||
if not inlined then
|
if not inlined then
|
||||||
begin
|
begin
|
||||||
@ -773,7 +774,7 @@ unit cgobj;
|
|||||||
begin
|
begin
|
||||||
if target_os.use_function_relative_addresses then
|
if target_os.use_function_relative_addresses then
|
||||||
list^.insert(stab_function_name);
|
list^.insert(stab_function_name);
|
||||||
if make_global or ((procinfo.flags and pi_is_global) <> 0) then
|
if make_global or ((procinfo^.flags and pi_is_global) <> 0) then
|
||||||
aktprocsym^.is_global := True;
|
aktprocsym^.is_global := True;
|
||||||
list^.insert(new(pai_stabs,init(aktprocsym^.stabstring)));
|
list^.insert(new(pai_stabs,init(aktprocsym^.stabstring)));
|
||||||
aktprocsym^.isstabwritten:=true;
|
aktprocsym^.isstabwritten:=true;
|
||||||
@ -788,7 +789,7 @@ unit cgobj;
|
|||||||
mangled_length : longint;
|
mangled_length : longint;
|
||||||
p : pchar;
|
p : pchar;
|
||||||
{$endif GDB}
|
{$endif GDB}
|
||||||
noreraiselabel : pasmlabel;
|
nofinal,noreraiselabel : pasmlabel;
|
||||||
hr : treference;
|
hr : treference;
|
||||||
r : tregister;
|
r : tregister;
|
||||||
|
|
||||||
@ -799,16 +800,30 @@ unit cgobj;
|
|||||||
{ call the destructor help procedure }
|
{ call the destructor help procedure }
|
||||||
if (aktprocsym^.definition^.proctypeoption=potype_destructor) then
|
if (aktprocsym^.definition^.proctypeoption=potype_destructor) then
|
||||||
begin
|
begin
|
||||||
if procinfo._class^.is_class then
|
if procinfo^._class^.is_class then
|
||||||
a_call_name(list,'FPC_DISPOSE_CLASS',0)
|
a_call_name(list,'FPC_DISPOSE_CLASS',0)
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
we must do a finalize here for objects if
|
if procinfo^._class^.needs_inittable then
|
||||||
necessary
|
begin
|
||||||
|
getlabel(nofinal);
|
||||||
|
{!!!!!!!!!!
|
||||||
|
reset_reference(hr);
|
||||||
|
hr.base:=R_EBP;
|
||||||
|
hr.offset:=8;
|
||||||
|
a_cmp_reg_const_label(list,OS_ADDR,OZ_EQ,
|
||||||
|
}
|
||||||
|
reset_reference(hr);
|
||||||
|
hr.symbol:=procinfo^._class^.get_inittable_label;
|
||||||
|
a_paramaddr_ref(list,hr,2);
|
||||||
|
a_param_reg(list,OS_ADDR,self_pointer,1);
|
||||||
|
a_call_name(list,'FPC_FINALIZE',0);
|
||||||
|
a_label(list,nofinal);
|
||||||
|
end;
|
||||||
{ vmt_offset_reg can be a scratch register, }
|
{ vmt_offset_reg can be a scratch register, }
|
||||||
{ but it must be always the same }
|
{ but it must be always the same }
|
||||||
a_reg_alloc(list,vmt_offset_reg);
|
a_reg_alloc(list,vmt_offset_reg);
|
||||||
a_load_const_reg(list,OS_32,procinfo._class^.vmt_offset,vmt_offset_reg);
|
a_load_const_reg(list,OS_32,procinfo^._class^.vmt_offset,vmt_offset_reg);
|
||||||
a_call_name(list,'FPC_HELP_DESTRUCTOR',0);
|
a_call_name(list,'FPC_HELP_DESTRUCTOR',0);
|
||||||
a_reg_dealloc(list,vmt_offset_reg);
|
a_reg_dealloc(list,vmt_offset_reg);
|
||||||
end;
|
end;
|
||||||
@ -827,7 +842,7 @@ unit cgobj;
|
|||||||
aktprocsym^.definition^.parast^.foreach({$ifndef TP}@{$endif}_finalize_data);
|
aktprocsym^.definition^.parast^.foreach({$ifndef TP}@{$endif}_finalize_data);
|
||||||
|
|
||||||
{ do we need to handle exceptions because of ansi/widestrings ? }
|
{ do we need to handle exceptions because of ansi/widestrings ? }
|
||||||
if (procinfo.flags and pi_needs_implicit_finally)<>0 then
|
if (procinfo^.flags and pi_needs_implicit_finally)<>0 then
|
||||||
begin
|
begin
|
||||||
getlabel(noreraiselabel);
|
getlabel(noreraiselabel);
|
||||||
|
|
||||||
@ -838,15 +853,15 @@ unit cgobj;
|
|||||||
a_reg_dealloc(list,accumulator);
|
a_reg_dealloc(list,accumulator);
|
||||||
|
|
||||||
{ must be the return value finalized before reraising the exception? }
|
{ must be the return value finalized before reraising the exception? }
|
||||||
if (procinfo.retdef<>pdef(voiddef)) and
|
if (procinfo^.retdef<>pdef(voiddef)) and
|
||||||
(procinfo.retdef^.needs_inittable) and
|
(procinfo^.retdef^.needs_inittable) and
|
||||||
((procinfo.retdef^.deftype<>objectdef) or
|
((procinfo^.retdef^.deftype<>objectdef) or
|
||||||
not(pobjectdef(procinfo.retdef)^.is_class)) then
|
not(pobjectdef(procinfo^.retdef)^.is_class)) then
|
||||||
begin
|
begin
|
||||||
reset_reference(hr);
|
reset_reference(hr);
|
||||||
hr.offset:=procinfo.retoffset;
|
hr.offset:=procinfo^.retoffset;
|
||||||
hr.base:=procinfo.framepointer;
|
hr.base:=procinfo^.framepointer;
|
||||||
g_finalize(list,procinfo.retdef,hr,ret_in_param(procinfo.retdef));
|
g_finalize(list,procinfo^.retdef,hr,ret_in_param(procinfo^.retdef));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
a_call_name(list,'FPC_RERAISE',0);
|
a_call_name(list,'FPC_RERAISE',0);
|
||||||
@ -912,39 +927,50 @@ unit cgobj;
|
|||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
if (cs_debuginfo in aktmoduleswitches) and not inlined then
|
if (cs_debuginfo in aktmoduleswitches) and not inlined then
|
||||||
begin
|
begin
|
||||||
aktprocsym^.concatstabto(exprasmlist);
|
aktprocsym^.concatstabto(list);
|
||||||
if assigned(procinfo._class) then
|
if assigned(procinfo^._class) then
|
||||||
if (not assigned(procinfo.parent) or
|
if (not assigned(procinfo^.parent) or
|
||||||
not assigned(procinfo.parent^._class)) then
|
not assigned(procinfo^.parent^._class)) then
|
||||||
list^.concat(new(pai_stabs,init(strpnew(
|
list^.concat(new(pai_stabs,init(strpnew(
|
||||||
'"$t:v'+procinfo._class^.numberstring+'",'+
|
'"$t:v'+procinfo^._class^.numberstring+'",'+
|
||||||
tostr(N_PSYM)+',0,0,'+tostr(procinfo.selfpointer_offset)))))
|
tostr(N_PSYM)+',0,0,'+tostr(procinfo^.selfpointer_offset)))));
|
||||||
|
{!!!!!!!!!!!!
|
||||||
else
|
else
|
||||||
list^.concat(new(pai_stabs,init(strpnew(
|
list^.concat(new(pai_stabs,init(strpnew(
|
||||||
'"$t:r'+procinfo._class^.numberstring+'",'+
|
'"$t:r'+procinfo^._class^.numberstring+'",'+
|
||||||
tostr(N_RSYM)+',0,0,'+tostr(GDB_i386index[R_ESI])))));
|
tostr(N_RSYM)+',0,0,'+tostr(GDB_i386index[R_ESI])))));
|
||||||
|
}
|
||||||
if (pdef(aktprocsym^.definition^.retdef) <> pdef(voiddef)) then
|
if (pdef(aktprocsym^.definition^.retdef) <> pdef(voiddef)) then
|
||||||
|
begin
|
||||||
if ret_in_param(aktprocsym^.definition^.retdef) then
|
if ret_in_param(aktprocsym^.definition^.retdef) then
|
||||||
list^.concat(new(pai_stabs,init(strpnew(
|
list^.concat(new(pai_stabs,init(strpnew(
|
||||||
'"'+aktprocsym^.name+':X*'+aktprocsym^.definition^.retdef^.numberstring+'",'+
|
'"'+aktprocsym^.name+':X*'+aktprocsym^.definition^.retdef^.numberstring+'",'+
|
||||||
tostr(N_PSYM)+',0,0,'+tostr(procinfo.retoffset)))))
|
tostr(N_PSYM)+',0,0,'+tostr(procinfo^.retoffset)))))
|
||||||
else
|
else
|
||||||
list^.concat(new(pai_stabs,init(strpnew(
|
list^.concat(new(pai_stabs,init(strpnew(
|
||||||
'"'+aktprocsym^.name+':X'+aktprocsym^.definition^.retdef^.numberstring+'",'+
|
'"'+aktprocsym^.name+':X'+aktprocsym^.definition^.retdef^.numberstring+'",'+
|
||||||
tostr(N_PSYM)+',0,0,'+tostr(procinfo.retoffset)))));
|
tostr(N_PSYM)+',0,0,'+tostr(procinfo^.retoffset)))));
|
||||||
|
if (m_result in aktmodeswitches) then
|
||||||
|
if ret_in_param(aktprocsym^.definition^.retdef) then
|
||||||
|
list^.concat(new(pai_stabs,init(strpnew(
|
||||||
|
'"RESULT:X*'+aktprocsym^.definition^.retdef^.numberstring+'",'+
|
||||||
|
tostr(N_PSYM)+',0,0,'+tostr(procinfo^.retoffset)))))
|
||||||
|
else
|
||||||
|
list^.concat(new(pai_stabs,init(strpnew(
|
||||||
|
'"RESULT:X'+aktprocsym^.definition^.retdef^.numberstring+'",'+
|
||||||
|
tostr(N_PSYM)+',0,0,'+tostr(procinfo^.retoffset)))));
|
||||||
|
end;
|
||||||
mangled_length:=length(aktprocsym^.definition^.mangledname);
|
mangled_length:=length(aktprocsym^.definition^.mangledname);
|
||||||
getmem(p,mangled_length+50);
|
getmem(p,mangled_length+50);
|
||||||
strpcopy(p,'192,0,0,');
|
strpcopy(p,'192,0,0,');
|
||||||
strpcopy(strend(p),aktprocsym^.definition^.mangledname);
|
strpcopy(strend(p),aktprocsym^.definition^.mangledname);
|
||||||
exprasmlist^.concat(new(pai_stabn,init(strnew(p))));
|
list^.concat(new(pai_stabn,init(strnew(p))));
|
||||||
{list^.concat(new(pai_stabn,init(strpnew('192,0,0,'
|
{list^.concat(new(pai_stabn,init(strpnew('192,0,0,'
|
||||||
+aktprocsym^.definition^.mangledname))));
|
+aktprocsym^.definition^.mangledname))));
|
||||||
p[0]:='2';p[1]:='2';p[2]:='4';
|
p[0]:='2';p[1]:='2';p[2]:='4';
|
||||||
strpcopy(strend(p),'_end');}
|
strpcopy(strend(p),'_end');}
|
||||||
freemem(p,mangled_length+50);
|
freemem(p,mangled_length+50);
|
||||||
exprasmlist^.concat(new(pai_stabn,init(
|
list^.concat(new(pai_stabn,init(
|
||||||
strpnew('224,0,0,'+aktexit2label^.name))));
|
strpnew('224,0,0,'+aktexit2label^.name))));
|
||||||
{ strpnew('224,0,0,'
|
{ strpnew('224,0,0,'
|
||||||
+aktprocsym^.definition^.mangledname+'_end'))));}
|
+aktprocsym^.definition^.mangledname+'_end'))));}
|
||||||
@ -1082,7 +1108,10 @@ unit cgobj;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.27 1999-09-29 11:46:20 florian
|
Revision 1.28 1999-10-12 21:20:46 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.27 1999/09/29 11:46:20 florian
|
||||||
* fixed bug 292 from bugs directory
|
* fixed bug 292 from bugs directory
|
||||||
|
|
||||||
Revision 1.26 1999/09/14 11:16:09 florian
|
Revision 1.26 1999/09/14 11:16:09 florian
|
||||||
|
@ -190,8 +190,8 @@ unit nmem;
|
|||||||
hregister:=tg.getregisterint;
|
hregister:=tg.getregisterint;
|
||||||
|
|
||||||
{ make a reference }
|
{ make a reference }
|
||||||
hp:=new_reference(procinfo.framepointer,
|
hp:=new_reference(procinfo^.framepointer,
|
||||||
procinfo.framepointer_offset);
|
procinfo^.framepointer_offset);
|
||||||
|
|
||||||
|
|
||||||
exprasmlist^.concat(new(paicpu,op_ref_reg(A_MOV,S_L,hp,hregister)));
|
exprasmlist^.concat(new(paicpu,op_ref_reg(A_MOV,S_L,hp,hregister)));
|
||||||
@ -216,7 +216,7 @@ unit nmem;
|
|||||||
end;
|
end;
|
||||||
stt_exceptsymtable:
|
stt_exceptsymtable:
|
||||||
begin
|
begin
|
||||||
location.reference.base:=procinfo.framepointer;
|
location.reference.base:=procinfo^.framepointer;
|
||||||
location.reference.offset:=pvarsym(symtableentry)^.address;
|
location.reference.offset:=pvarsym(symtableentry)^.address;
|
||||||
end;
|
end;
|
||||||
objectsymtable:
|
objectsymtable:
|
||||||
@ -239,7 +239,7 @@ unit nmem;
|
|||||||
{ symtable datasize field
|
{ symtable datasize field
|
||||||
contains the offset of the temp
|
contains the offset of the temp
|
||||||
stored }
|
stored }
|
||||||
hp:=new_reference(procinfo.framepointer,
|
hp:=new_reference(procinfo^.framepointer,
|
||||||
symtable^.datasize);
|
symtable^.datasize);
|
||||||
|
|
||||||
exprasmlist^.concat(new(paicpu,op_ref_reg(A_MOV,S_L,hp,hregister)));
|
exprasmlist^.concat(new(paicpu,op_ref_reg(A_MOV,S_L,hp,hregister)));
|
||||||
@ -262,7 +262,7 @@ unit nmem;
|
|||||||
if is_open_array(pvarsym(symtableentry)^.definition) or
|
if is_open_array(pvarsym(symtableentry)^.definition) or
|
||||||
is_open_string(pvarsym(symtableentry)^.definition) then
|
is_open_string(pvarsym(symtableentry)^.definition) then
|
||||||
begin
|
begin
|
||||||
if (location.reference.base=procinfo.framepointer) then
|
if (location.reference.base=procinfo^.framepointer) then
|
||||||
begin
|
begin
|
||||||
highframepointer:=location.reference.base;
|
highframepointer:=location.reference.base;
|
||||||
highoffset:=location.reference.offset;
|
highoffset:=location.reference.offset;
|
||||||
@ -711,7 +711,10 @@ unit nmem;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.13 1999-09-15 20:35:46 florian
|
Revision 1.14 1999-10-12 21:20:46 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.13 1999/09/15 20:35:46 florian
|
||||||
* small fix to operator overloading when in MMX mode
|
* small fix to operator overloading when in MMX mode
|
||||||
+ the compiler uses now fldz and fld1 if possible
|
+ the compiler uses now fldz and fld1 if possible
|
||||||
+ some fixes to floating point registers
|
+ some fixes to floating point registers
|
||||||
|
@ -106,7 +106,7 @@ implementation
|
|||||||
procedure firstasm(var p : ptree);
|
procedure firstasm(var p : ptree);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
procinfo.flags:=procinfo.flags or pi_uses_asm;
|
procinfo.flags:=procinfo^.flags or pi_uses_asm;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$endif dummy}
|
{$endif dummy}
|
||||||
@ -123,35 +123,9 @@ implementation
|
|||||||
not_first : boolean;
|
not_first : boolean;
|
||||||
{$endif extdebug}
|
{$endif extdebug}
|
||||||
begin
|
begin
|
||||||
{$ifdef extdebug}
|
|
||||||
inc(total_of_firstpass);
|
|
||||||
if (p^.firstpasscount>0) and only_one_pass then
|
|
||||||
exit;
|
|
||||||
{$endif extdebug}
|
|
||||||
oldcodegenerror:=codegenerror;
|
oldcodegenerror:=codegenerror;
|
||||||
oldpos:=aktfilepos;
|
oldpos:=aktfilepos;
|
||||||
oldlocalswitches:=aktlocalswitches;
|
oldlocalswitches:=aktlocalswitches;
|
||||||
{$ifdef extdebug}
|
|
||||||
if p^.firstpasscount>0 then
|
|
||||||
begin
|
|
||||||
move(p^,str1[1],sizeof(ttree));
|
|
||||||
{$ifndef TP}
|
|
||||||
{$ifopt H+}
|
|
||||||
SetLength(str1,sizeof(ttree));
|
|
||||||
{$else}
|
|
||||||
str1[0]:=char(sizeof(ttree));
|
|
||||||
{$endif}
|
|
||||||
{$else}
|
|
||||||
str1[0]:=char(sizeof(ttree));
|
|
||||||
{$endif}
|
|
||||||
new(oldp);
|
|
||||||
oldp^:=p^;
|
|
||||||
not_first:=true;
|
|
||||||
inc(firstpass_several);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
not_first:=false;
|
|
||||||
{$endif extdebug}
|
|
||||||
|
|
||||||
if not p^.error then
|
if not p^.error then
|
||||||
begin
|
begin
|
||||||
@ -166,33 +140,6 @@ implementation
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
codegenerror:=true;
|
codegenerror:=true;
|
||||||
{$ifdef extdebug}
|
|
||||||
if not_first then
|
|
||||||
begin
|
|
||||||
{ dirty trick to compare two ttree's (PM) }
|
|
||||||
move(p^,str2[1],sizeof(ttree));
|
|
||||||
{$ifndef TP}
|
|
||||||
{$ifopt H+}
|
|
||||||
SetLength(str2,sizeof(ttree));
|
|
||||||
{$else}
|
|
||||||
str2[0]:=char(sizeof(ttree));
|
|
||||||
{$endif}
|
|
||||||
{$else}
|
|
||||||
str2[0]:=char(sizeof(ttree));
|
|
||||||
{$endif}
|
|
||||||
if str1<>str2 then
|
|
||||||
begin
|
|
||||||
comment(v_debug,'tree changed after first counting pass '
|
|
||||||
+tostr(longint(p^.treetype)));
|
|
||||||
{!!!!!!! compare_trees(oldp,p); }
|
|
||||||
end;
|
|
||||||
dispose(oldp);
|
|
||||||
end;
|
|
||||||
{!!!!!!!
|
|
||||||
if count_ref then
|
|
||||||
inc(p^.firstpasscount);
|
|
||||||
}
|
|
||||||
{$endif extdebug}
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -221,7 +168,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 1999-08-04 00:23:57 florian
|
Revision 1.6 1999-10-12 21:20:47 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.5 1999/08/04 00:23:57 florian
|
||||||
* renamed i386asm and i386base to cpuasm and cpubase
|
* renamed i386asm and i386base to cpuasm and cpubase
|
||||||
|
|
||||||
Revision 1.4 1999/08/01 18:22:36 florian
|
Revision 1.4 1999/08/01 18:22:36 florian
|
||||||
|
@ -288,7 +288,7 @@ implementation
|
|||||||
{ only if no asm is used }
|
{ only if no asm is used }
|
||||||
{ and no try statement }
|
{ and no try statement }
|
||||||
if (cs_regalloc in aktglobalswitches) and
|
if (cs_regalloc in aktglobalswitches) and
|
||||||
((procinfo.flags and (pi_uses_asm or pi_uses_exceptions))=0) then
|
((procinfo^.flags and (pi_uses_asm or pi_uses_exceptions))=0) then
|
||||||
begin
|
begin
|
||||||
{ can we omit the stack frame ? }
|
{ can we omit the stack frame ? }
|
||||||
{ conditions:
|
{ conditions:
|
||||||
@ -301,25 +301,25 @@ implementation
|
|||||||
begin
|
begin
|
||||||
if not(aktprocsym^.definition^.proctypeoption in [potype_constructor,potype_destructor]) and
|
if not(aktprocsym^.definition^.proctypeoption in [potype_constructor,potype_destructor]) and
|
||||||
not(po_interrupt in aktprocsym^.definition^.procoptions) and
|
not(po_interrupt in aktprocsym^.definition^.procoptions) and
|
||||||
((procinfo.flags and pi_do_call)=0) and
|
((procinfo^.flags and pi_do_call)=0) and
|
||||||
(lexlevel>=normal_function_level) then
|
(lexlevel>=normal_function_level) then
|
||||||
begin
|
begin
|
||||||
{ use ESP as frame pointer }
|
{ use ESP as frame pointer }
|
||||||
procinfo.framepointer:=stack_pointer;
|
procinfo^.framepointer:=stack_pointer;
|
||||||
use_esp_stackframe:=true;
|
use_esp_stackframe:=true;
|
||||||
|
|
||||||
{ calc parameter distance new }
|
{ calc parameter distance new }
|
||||||
dec(procinfo.framepointer_offset,pointersize);
|
dec(procinfo^.framepointer_offset,pointersize);
|
||||||
dec(procinfo.selfpointer_offset,pointersize);
|
dec(procinfo^.selfpointer_offset,pointersize);
|
||||||
|
|
||||||
{ is this correct ???}
|
{ is this correct ???}
|
||||||
{ retoffset can be negativ for results in eax !! }
|
{ retoffset can be negativ for results in eax !! }
|
||||||
{ the value should be decreased only if positive }
|
{ the value should be decreased only if positive }
|
||||||
if procinfo.retoffset>=0 then
|
if procinfo^.retoffset>=0 then
|
||||||
dec(procinfo.retoffset,4);
|
dec(procinfo^.retoffset,4);
|
||||||
|
|
||||||
dec(procinfo.call_offset,4);
|
dec(procinfo^.call_offset,4);
|
||||||
aktprocsym^.definition^.parast^.address_fixup:=procinfo.call_offset;
|
aktprocsym^.definition^.parast^.address_fixup:=procinfo^.call_offset;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if (p^.registersint<maxvarregs) then
|
if (p^.registersint<maxvarregs) then
|
||||||
@ -413,10 +413,10 @@ implementation
|
|||||||
{ when loading parameter to reg }
|
{ when loading parameter to reg }
|
||||||
new(hr);
|
new(hr);
|
||||||
reset_reference(hr^);
|
reset_reference(hr^);
|
||||||
hr^.offset:=pvarsym(regvars[i])^.address+procinfo.call_offset;
|
hr^.offset:=pvarsym(regvars[i])^.address+procinfo^.call_offset;
|
||||||
hr^.base:=procinfo.framepointer;
|
hr^.base:=procinfo^.framepointer;
|
||||||
{$ifdef i386}
|
{$ifdef i386}
|
||||||
procinfo.aktentrycode^.concat(new(paicpu,op_ref_reg(A_MOV,regsize,
|
procinfo^.aktentrycode^.concat(new(paicpu,op_ref_reg(A_MOV,regsize,
|
||||||
hr,regvars[i]^.reg)));
|
hr,regvars[i]^.reg)));
|
||||||
{$endif i386}
|
{$endif i386}
|
||||||
{$ifdef m68k}
|
{$ifdef m68k}
|
||||||
@ -451,20 +451,23 @@ implementation
|
|||||||
|
|
||||||
do_secondpass(p);
|
do_secondpass(p);
|
||||||
|
|
||||||
if assigned(procinfo.def) then
|
if assigned(procinfo^.def) then
|
||||||
procinfo.def^.fpu_used:=p^.registersfpu;
|
procinfo^.def^.fpu_used:=p^.registersfpu;
|
||||||
|
|
||||||
{ all registers can be used again }
|
{ all registers can be used again }
|
||||||
tg.resetusableregisters;
|
tg.resetusableregisters;
|
||||||
end;
|
end;
|
||||||
procinfo.aktproccode^.concatlist(exprasmlist);
|
procinfo^.aktproccode^.concatlist(exprasmlist);
|
||||||
make_const_global:=false;
|
make_const_global:=false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.7 1999-08-25 12:00:13 jonas
|
Revision 1.8 1999-10-12 21:20:47 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.7 1999/08/25 12:00:13 jonas
|
||||||
* changed pai386, paippc and paiapha (same for tai*) to paicpu (taicpu)
|
* changed pai386, paippc and paiapha (same for tai*) to paicpu (taicpu)
|
||||||
|
|
||||||
Revision 1.6 1999/08/05 14:58:15 florian
|
Revision 1.6 1999/08/05 14:58:15 florian
|
||||||
|
@ -267,9 +267,6 @@ end;
|
|||||||
begin
|
begin
|
||||||
oldexit:=exitproc;
|
oldexit:=exitproc;
|
||||||
exitproc:=@myexit;
|
exitproc:=@myexit;
|
||||||
{$ifdef fpc}
|
|
||||||
heapblocks:=true;
|
|
||||||
{$endif}
|
|
||||||
{$ifdef UseOverlay}
|
{$ifdef UseOverlay}
|
||||||
InitOverlay;
|
InitOverlay;
|
||||||
{$endif}
|
{$endif}
|
||||||
@ -279,7 +276,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.6 1999-08-04 12:59:22 jonas
|
Revision 1.7 1999-10-12 21:20:47 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.6 1999/08/04 12:59:22 jonas
|
||||||
* all tokes now start with an underscore
|
* all tokes now start with an underscore
|
||||||
* PowerPC compiles!!
|
* PowerPC compiles!!
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ unit tgobj;
|
|||||||
{ do a reset, because the reference isn't used }
|
{ do a reset, because the reference isn't used }
|
||||||
reset_reference(ref);
|
reset_reference(ref);
|
||||||
ref.offset:=gettempofsize(l);
|
ref.offset:=gettempofsize(l);
|
||||||
ref.base:=procinfo.framepointer;
|
ref.base:=procinfo^.framepointer;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ unit tgobj;
|
|||||||
begin
|
begin
|
||||||
{ do a reset, because the reference isn't used }
|
{ do a reset, because the reference isn't used }
|
||||||
reset_reference(ref);
|
reset_reference(ref);
|
||||||
ref.base:=procinfo.framepointer;
|
ref.base:=procinfo^.framepointer;
|
||||||
{ Reuse old ansi slot ? }
|
{ Reuse old ansi slot ? }
|
||||||
foundslot:=nil;
|
foundslot:=nil;
|
||||||
tl:=templist;
|
tl:=templist;
|
||||||
@ -406,7 +406,7 @@ unit tgobj;
|
|||||||
function ttgobj.istemp(const ref : treference) : boolean;
|
function ttgobj.istemp(const ref : treference) : boolean;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
istemp:=((ref.base=procinfo.framepointer) and
|
istemp:=((ref.base=procinfo^.framepointer) and
|
||||||
(ref.offset<firsttemp));
|
(ref.offset<firsttemp));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -692,7 +692,10 @@ unit tgobj;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.6 1999-09-10 18:48:11 florian
|
Revision 1.7 1999-10-12 21:20:47 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.6 1999/09/10 18:48:11 florian
|
||||||
* some bug fixes (e.g. must_be_valid and procinfo.funcret_is_valid)
|
* some bug fixes (e.g. must_be_valid and procinfo.funcret_is_valid)
|
||||||
* most things for stored properties fixed
|
* most things for stored properties fixed
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ blockn:
|
|||||||
{ Funktionsresultate an exit anh„ngen }
|
{ Funktionsresultate an exit anh„ngen }
|
||||||
{ this is wrong for string or other complex
|
{ this is wrong for string or other complex
|
||||||
result types !!! }
|
result types !!! }
|
||||||
if ret_in_acc(procinfo.retdef) and
|
if ret_in_acc(procinfo^.retdef) and
|
||||||
assigned(hp^.left) and
|
assigned(hp^.left) and
|
||||||
(hp^.left^.right^.treetype=exitn) and
|
(hp^.left^.right^.treetype=exitn) and
|
||||||
(hp^.right^.treetype=assignn) and
|
(hp^.right^.treetype=assignn) and
|
||||||
@ -82,7 +82,10 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.1 1999-01-23 23:35:02 florian
|
Revision 1.2 1999-10-12 21:20:47 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.1 1999/01/23 23:35:02 florian
|
||||||
+ first versions
|
+ first versions
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,8 @@ unit tree;
|
|||||||
arrayconstructrangen, {Range element to allow sets in array construction tree}
|
arrayconstructrangen, {Range element to allow sets in array construction tree}
|
||||||
{ added for optimizations where we cannot suppress }
|
{ added for optimizations where we cannot suppress }
|
||||||
nothingn,
|
nothingn,
|
||||||
loadvmtn
|
loadvmtn,
|
||||||
|
pointerconstn
|
||||||
);
|
);
|
||||||
|
|
||||||
tconverttype = (
|
tconverttype = (
|
||||||
@ -133,8 +134,9 @@ unit tree;
|
|||||||
tc_array_2_pointer,
|
tc_array_2_pointer,
|
||||||
tc_pointer_2_array,
|
tc_pointer_2_array,
|
||||||
tc_int_2_int,
|
tc_int_2_int,
|
||||||
tc_bool_2_int,
|
|
||||||
tc_int_2_bool,
|
tc_int_2_bool,
|
||||||
|
tc_bool_2_bool,
|
||||||
|
tc_bool_2_int,
|
||||||
tc_real_2_real,
|
tc_real_2_real,
|
||||||
tc_int_2_real,
|
tc_int_2_real,
|
||||||
tc_int_2_fix,
|
tc_int_2_fix,
|
||||||
@ -143,7 +145,7 @@ unit tree;
|
|||||||
tc_proc_2_procvar,
|
tc_proc_2_procvar,
|
||||||
tc_arrayconstructor_2_set,
|
tc_arrayconstructor_2_set,
|
||||||
tc_load_smallset,
|
tc_load_smallset,
|
||||||
tc_bool_2_bool
|
tc_cord_2_pointer
|
||||||
);
|
);
|
||||||
|
|
||||||
{ different assignment types }
|
{ different assignment types }
|
||||||
@ -358,6 +360,7 @@ unit tree;
|
|||||||
function gensubscriptnode(varsym : pvarsym;l : ptree) : ptree;
|
function gensubscriptnode(varsym : pvarsym;l : ptree) : ptree;
|
||||||
function genordinalconstnode(v : longint;def : pdef) : ptree;
|
function genordinalconstnode(v : longint;def : pdef) : ptree;
|
||||||
function genfixconstnode(v : longint;def : pdef) : ptree;
|
function genfixconstnode(v : longint;def : pdef) : ptree;
|
||||||
|
function genpointerconstnode(v : longint;def : pdef) : ptree;
|
||||||
function gentypeconvnode(node : ptree;t : pdef) : ptree;
|
function gentypeconvnode(node : ptree;t : pdef) : ptree;
|
||||||
function gentypenode(t : pdef;sym:ptypesym) : ptree;
|
function gentypenode(t : pdef;sym:ptypesym) : ptree;
|
||||||
function gencallparanode(expr,next : ptree) : ptree;
|
function gencallparanode(expr,next : ptree) : ptree;
|
||||||
@ -601,7 +604,8 @@ unit tree;
|
|||||||
'arrayconstructn',
|
'arrayconstructn',
|
||||||
'arrayconstructrangen',
|
'arrayconstructrangen',
|
||||||
'nothingn',
|
'nothingn',
|
||||||
'loadvmtn');
|
'loadvmtn',
|
||||||
|
'pointerconstn');
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write(indention,'(',treetype2str[treetype]);
|
write(indention,'(',treetype2str[treetype]);
|
||||||
@ -1277,6 +1281,27 @@ unit tree;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function genpointerconstnode(v : longint;def : pdef) : ptree;
|
||||||
|
|
||||||
|
var
|
||||||
|
p : ptree;
|
||||||
|
|
||||||
|
begin
|
||||||
|
p:=getnode;
|
||||||
|
p^.disposetyp:=dt_nothing;
|
||||||
|
p^.treetype:=pointerconstn;
|
||||||
|
p^.registers32:=0;
|
||||||
|
{ p^.registers16:=0;
|
||||||
|
p^.registers8:=0; }
|
||||||
|
p^.registersfpu:=0;
|
||||||
|
{$ifdef SUPPORT_MMX}
|
||||||
|
p^.registersmmx:=0;
|
||||||
|
{$endif SUPPORT_MMX}
|
||||||
|
p^.resulttype:=def;
|
||||||
|
p^.value:=v;
|
||||||
|
genpointerconstnode:=p;
|
||||||
|
end;
|
||||||
|
|
||||||
function gensinglenode(t : ttreetyp;l : ptree) : ptree;
|
function gensinglenode(t : ttreetyp;l : ptree) : ptree;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -2018,7 +2043,10 @@ unit tree;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.14 1999-09-14 11:16:09 florian
|
Revision 1.15 1999-10-12 21:20:47 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.14 1999/09/14 11:16:09 florian
|
||||||
* only small updates to work with the current compiler
|
* only small updates to work with the current compiler
|
||||||
|
|
||||||
Revision 1.13 1999/08/06 18:05:55 florian
|
Revision 1.13 1999/08/06 18:05:55 florian
|
||||||
|
@ -47,7 +47,10 @@ unit parser;
|
|||||||
uses
|
uses
|
||||||
globtype,version,tokens,systems,
|
globtype,version,tokens,systems,
|
||||||
cobjects,globals,verbose,
|
cobjects,globals,verbose,
|
||||||
symtable,files,aasm,hcodegen,
|
symtable,files,aasm,
|
||||||
|
{$ifndef newcg}
|
||||||
|
hcodegen,
|
||||||
|
{$endif newcg}
|
||||||
assemble,link,script,gendef,
|
assemble,link,script,gendef,
|
||||||
{$ifdef BrowserLog}
|
{$ifdef BrowserLog}
|
||||||
browlog,
|
browlog,
|
||||||
@ -61,6 +64,8 @@ unit parser;
|
|||||||
{$ifdef newcg}
|
{$ifdef newcg}
|
||||||
cgobj,
|
cgobj,
|
||||||
cgcpu,
|
cgcpu,
|
||||||
|
{ cgbase must be after hcodegen to use the correct procinfo !!! }
|
||||||
|
cgbase,
|
||||||
{$endif newcg}
|
{$endif newcg}
|
||||||
comphook,tree,scanner,pbase,pdecl,psystem,pmodules,cresstr;
|
comphook,tree,scanner,pbase,pdecl,psystem,pmodules,cresstr;
|
||||||
|
|
||||||
@ -482,7 +487,10 @@ unit parser;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.87 1999-10-03 19:44:41 peter
|
Revision 1.88 1999-10-12 21:20:45 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.87 1999/10/03 19:44:41 peter
|
||||||
* removed objpasunit reference, tvarrec is now searched in systemunit
|
* removed objpasunit reference, tvarrec is now searched in systemunit
|
||||||
where it already was located
|
where it already was located
|
||||||
|
|
||||||
|
@ -43,7 +43,12 @@ unit pmodules;
|
|||||||
uses
|
uses
|
||||||
globtype,version,systems,tokens,
|
globtype,version,systems,tokens,
|
||||||
cobjects,comphook,globals,verbose,files,
|
cobjects,comphook,globals,verbose,files,
|
||||||
symconst,symtable,aasm,hcodegen,
|
symconst,symtable,aasm,
|
||||||
|
{$ifdef newcg}
|
||||||
|
cgbase,
|
||||||
|
{$else newcg}
|
||||||
|
hcodegen,
|
||||||
|
{$endif newcg}
|
||||||
link,assemble,import,export,gendef,ppu,comprsrc,
|
link,assemble,import,export,gendef,ppu,comprsrc,
|
||||||
cresstr,cpubase,cpuasm,
|
cresstr,cpubase,cpuasm,
|
||||||
scanner,pbase,psystem,pdecl,psub,parser;
|
scanner,pbase,psystem,pdecl,psub,parser;
|
||||||
@ -1455,7 +1460,10 @@ unit pmodules;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.158 1999-10-03 19:44:42 peter
|
Revision 1.159 1999-10-12 21:20:45 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.158 1999/10/03 19:44:42 peter
|
||||||
* removed objpasunit reference, tvarrec is now searched in systemunit
|
* removed objpasunit reference, tvarrec is now searched in systemunit
|
||||||
where it already was located
|
where it already was located
|
||||||
|
|
||||||
|
@ -53,7 +53,12 @@ uses
|
|||||||
strings,globals,verbose,files,
|
strings,globals,verbose,files,
|
||||||
scanner,aasm,tree,types,
|
scanner,aasm,tree,types,
|
||||||
import,gendef,
|
import,gendef,
|
||||||
hcodegen,temp_gen,pass_1,cpubase,cpuasm
|
{$ifdef newcg}
|
||||||
|
cgbase,
|
||||||
|
{$else newcg}
|
||||||
|
hcodegen,
|
||||||
|
{$endif newcg}
|
||||||
|
temp_gen,pass_1,cpubase,cpuasm
|
||||||
{$ifndef NOPASS2}
|
{$ifndef NOPASS2}
|
||||||
,pass_2
|
,pass_2
|
||||||
{$endif}
|
{$endif}
|
||||||
@ -130,7 +135,11 @@ begin
|
|||||||
{$else}
|
{$else}
|
||||||
aktprocsym^.definition^.procoptions:=aktprocsym^.definition^.procoptions+[po_containsself];
|
aktprocsym^.definition^.procoptions:=aktprocsym^.definition^.procoptions+[po_containsself];
|
||||||
{$endif}
|
{$endif}
|
||||||
|
{$ifdef newcg}
|
||||||
|
inc(procinfo^.selfpointer_offset,vs^.address);
|
||||||
|
{$else newcg}
|
||||||
inc(procinfo^.ESI_offset,vs^.address);
|
inc(procinfo^.ESI_offset,vs^.address);
|
||||||
|
{$endif newcg}
|
||||||
consume(idtoken);
|
consume(idtoken);
|
||||||
consume(_COLON);
|
consume(_COLON);
|
||||||
p:=single_type(hs1,false);
|
p:=single_type(hs1,false);
|
||||||
@ -473,7 +482,11 @@ begin
|
|||||||
{ self isn't pushed in nested procedure of methods }
|
{ self isn't pushed in nested procedure of methods }
|
||||||
if assigned(procinfo^._class) and (lexlevel=normal_function_level) then
|
if assigned(procinfo^._class) and (lexlevel=normal_function_level) then
|
||||||
begin
|
begin
|
||||||
|
{$ifdef newcg}
|
||||||
|
procinfo^.selfpointer_offset:=paramoffset;
|
||||||
|
{$else newcg}
|
||||||
procinfo^.ESI_offset:=paramoffset;
|
procinfo^.ESI_offset:=paramoffset;
|
||||||
|
{$endif newcg}
|
||||||
if assigned(aktprocsym^.definition) and
|
if assigned(aktprocsym^.definition) and
|
||||||
not(po_containsself in aktprocsym^.definition^.procoptions) then
|
not(po_containsself in aktprocsym^.definition^.procoptions) then
|
||||||
inc(paramoffset,target_os.size_of_pointer);
|
inc(paramoffset,target_os.size_of_pointer);
|
||||||
@ -2078,7 +2091,10 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.26 1999-10-03 19:38:39 peter
|
Revision 1.27 1999-10-12 21:20:46 florian
|
||||||
|
* new codegenerator compiles again
|
||||||
|
|
||||||
|
Revision 1.26 1999/10/03 19:38:39 peter
|
||||||
* fixed forward decl check for tp7/delphi
|
* fixed forward decl check for tp7/delphi
|
||||||
|
|
||||||
Revision 1.25 1999/10/01 10:05:44 peter
|
Revision 1.25 1999/10/01 10:05:44 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user