mangledname setting moved to place after the complete proc declaration is read

import generation moved to place where body is also parsed (still gives problems with win32)
This commit is contained in:
peter 2004-11-17 22:21:35 +00:00
parent 14eb8f59b4
commit 14d25d278b
16 changed files with 586 additions and 417 deletions

View File

@ -983,6 +983,13 @@ parser_e_illegal_assignment_to_count_var=03208_E_Illegal assignment to for-loop
parser_e_no_local_var_external=03209_E_Can't declare local variable as EXTERNAL
% Declaring local variables as external is not allowed. Only global variables can reference
% to external variables.
parser_e_proc_already_external=03210_E_Procedure is already declared EXTERNAL
% The procedure is already declared with the EXTERNAL directive in an interface or
% forward declaration.
parser_e_proc_no_external_allowed=03211_E_Can't declare procedure as EXTERNAL
% The procedure is already declared in an interface or forward declaration. The compiler
% expects the code for this procedure to be available in this unit. The EXTERNAL directive
% needs to be moved to the interface or forward declaration.
% \end{description}
#
# Type Checking

View File

@ -273,6 +273,8 @@ const
parser_e_macpas_exit_wrong_param=03207;
parser_e_illegal_assignment_to_count_var=03208;
parser_e_no_local_var_external=03209;
parser_e_proc_already_external=03210;
parser_e_proc_no_external_allowed=03211;
type_e_mismatch=04000;
type_e_incompatible_types=04001;
type_e_not_equal_types=04002;
@ -647,9 +649,9 @@ const
option_info=11024;
option_help_pages=11025;
MsgTxtSize = 37659;
MsgTxtSize = 37750;
MsgIdxMax : array[1..20] of longint=(
18,67,210,59,57,46,99,20,35,60,
18,67,212,59,57,46,99,20,35,60,
40,1,1,1,1,1,1,1,1,1
);

View File

@ -1,7 +1,7 @@
{$ifdef Delphi}
const msgtxt : array[0..000156] of string[240]=(
const msgtxt : array[0..000157] of string[240]=(
{$else Delphi}
const msgtxt : array[0..000156,1..240] of char=(
const msgtxt : array[0..000157,1..240] of char=(
{$endif Delphi}
'01000_T_Compiler: $1'#000+
'01001_D_Compiler OS: $1'#000+
@ -307,614 +307,611 @@ const msgtxt : array[0..000156,1..240] of char=(
'sed in'#000+
'03208_E_Illegal assignment to for-loop variable "$1"'#000+
'03209_E_Can'#039't declare local variable as EXTERNAL'#000+
'03210_E_Procedure is already declared EXT','ERNAL'#000+
'03211_E_Can'#039't declare procedure as EXTERNAL'#000+
'04000_E_Type mismatch'#000+
'04001_E_Incompatibl','e types: got "$1" expected "$2"'#000+
'04001_E_Incompatible types: got "$1" expected "$2"'#000+
'04002_E_Type mismatch between "$1" and "$2"'#000+
'04003_E_Type identifier expected'#000+
'04004_E_Variable identifier expected'#000+
'04005_E_Integer expression expected, but got "$1"'#000+
'04006_E_Boolean expression expected, but got',' "$1"'#000+
'040','05_E_Integer expression expected, but got "$1"'#000+
'04006_E_Boolean expression expected, but got "$1"'#000+
'04007_E_Ordinal expression expected'#000+
'04008_E_pointer type expected, but got "$1"'#000+
'04009_E_class type expected, but got "$1"'#000+
'04011_E_Can'#039't evaluate constant expression'#000+
'04011_E_Can'#039't evaluat','e constant expression'#000+
'04012_E_Set elements are not compatible'#000+
'04013_E_Operation not impleme','nted for sets'#000+
'04013_E_Operation not implemented for sets'#000+
'04014_W_Automatic type conversion from floating type to COMP which is '+
'an integer type'#000+
'04015_H_use DIV instead to get an integer result'#000+
'04015_H_use DIV instead to get an integer result'#000,
'04016_E_string types doesn'#039't match, because of $V+ mode'#000+
'04017_E_succ or pred on enums with ','assignments not possible'#000+
'04017_E_succ or pred on enums with assignments not possible'#000+
'04018_E_Can'#039't read or write variables of this type'#000+
'04019_E_Can'#039't use readln or writeln on typed file'#000+
'04020_E_Can'#039't use read or write on untyped file.'#000+
'04020_E_Can'#039't use read ','or write on untyped file.'#000+
'04021_E_Type conflict between set elements'#000+
'04022_W_lo/hi(dword/qw','ord) returns the upper/lower word/dword'#000+
'04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
'04023_E_Integer or real expression expected'#000+
'04024_E_Wrong type "$1" in array constructor'#000+
'04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
'04026_E_Method (variable) and Procedure (vari','able) are not compatibl'+
'e'#000+
'04025_E_Incompatible',' type for arg no. $1: Got "$2", expected "$3"'#000+
'04026_E_Method (variable) and Procedure (variable) are not compatible'#000+
'04027_E_Illegal constant passed to internal math function'#000+
'04028_E_Can'#039't get the address of constants'#000+
'04029_E_Argument can'#039't be assigned to'#000+
'04029_E_Argument can'#039't ','be assigned to'#000+
'04030_E_Can'#039't assign local procedure/function to procedure variabl'+
'e'#000+
'04031_E_','Can'#039't assign values to an address'#000+
'04031_E_Can'#039't assign values to an address'#000+
'04032_E_Can'#039't assign values to const variable'#000+
'04033_E_Array type required'#000+
'04034_E_interface type expected, but got "$1"'#000+
'04034_E_interface type expected, but got ','"$1"'#000+
'04035_W_Mixing signed expressions and longwords gives a 64bit result'#000+
'04036_W_Mixing si','gned expressions and cardinals here may cause a ran'+
'ge check error'#000+
'04036_W_Mixing signed expressions and cardinals here may cause a range'+
' check error'#000+
'04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
'04038_E_enums with assignments can'#039't be used as array index'#000+
'04039_E_Class or Object types "$1" and "$2" are not r','elated'#000+
'04038_E_enums with ass','ignments can'#039't be used as array index'#000+
'04039_E_Class or Object types "$1" and "$2" are not related'#000+
'04040_W_Class types "$1" and "$2" are not related'#000+
'04041_E_Class or interface type expected, but got "$1"'#000+
'04042_E_Type "$1" is not completely defined'#000+
'04042_E_Type "$1" is not completely d','efined'#000+
'04043_W_String literal has more characters than short string length'#000+
'04044_W_Comparis','on is always false due to range of values'#000+
'04044_W_Comparison is always false due to range of values'#000+
'04045_W_Comparison is always true due to range of values'#000+
'04046_W_Constructing a class "$1" with abstract methods'#000+
'04046_W_Constructing a class "$1" with abstract me','thods'#000+
'04047_H_The left operand of the IN operator should be byte sized'#000+
'04048_W_Type size mi','smatch, possible loss of data / range check erro'+
'r'#000+
'04048_W_Type size mismatch, possible loss of data / range check error'#000+
'04049_H_Type size mismatch, possible loss of data / range check error'#000+
'04050_E_The address of an abstract method can'#039't be taken'#000+
'04050_E_The address of an abs','tract method can'#039't be taken'#000+
'04051_E_The operator is not applicable for the operand type'#000+
'040','52_E_Constant Expression expected'#000+
'04052_E_Constant Expression expected'#000+
'04053_E_Operation "$1" not supported for types "$2" and "$3"'#000+
'04054_E_Illegal type conversion: "$1" to "$2"'#000+
'04055_H_Conversion between ordinals and pointers is not portable'#000+
'04056_W_Conversion between ordinal','s and pointers is not portable'#000+
'04055_H_','Conversion between ordinals and pointers is not portable'#000+
'04056_W_Conversion between ordinals and pointers is not portable'#000+
'04057_E_Can'#039't determine which overloaded function to call'#000+
'04058_E_Illegal counter variable'#000+
'05000_E_Identifier not found "$1"'#000+
'05000_E_Identifier not foun','d "$1"'#000+
'05001_F_Internal Error in SymTableStack()'#000+
'05002_E_Duplicate identifier "$1"'#000+
'05003_H_','Identifier already defined in $1 at line $2'#000+
'05003_H_Identifier already defined in $1 at line $2'#000+
'05004_E_Unknown identifier "$1"'#000+
'05005_E_Forward declaration not solved "$1"'#000+
'05007_E_Error in type definition'#000+
'05007_E_Error in type definit','ion'#000+
'05009_E_Forward type not resolved "$1"'#000+
'05010_E_Only static variables can be used in sta','tic methods or outsi'+
'de methods'#000+
'05010_E_Only static variables can be used in static methods or outside'+
' methods'#000+
'05012_F_record or class type expected'#000+
'05013_E_Instances of classes or objects with an abstract method are no'+
't allowed'#000+
't allowed'#000,
'05014_W_Label not defined "$1"'#000+
'05015_E_Label used but not defined "$1"'#000+
'05016_E_Illegal labe','l declaration'#000+
'05016_E_Illegal label declaration'#000+
'05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
'05018_E_Label not found'#000+
'05019_E_identifier isn'#039't a label'#000+
'05020_E_label already defined'#000+
'05020_E_label alread','y defined'#000+
'05021_E_illegal type declaration of set elements'#000+
'05022_E_Forward class definition',' not resolved "$1"'#000+
'05022_E_Forward class definition not resolved "$1"'#000+
'05023_H_Unit "$1" not used in $2'#000+
'05024_H_Parameter "$1" not used'#000+
'05025_N_Local variable "$1" not used'#000+
'05026_H_Value parameter "$1" is assigned but never used'#000+
'05026_H_Value parameter "$1"',' is assigned but never used'#000+
'05027_N_Local variable "$1" is assigned but never used'#000+
'05028_H_','Local $1 "$2" is not used'#000+
'05028_H_Local $1 "$2" is not used'#000+
'05029_N_Private field "$1.$2" is never used'#000+
'05030_N_Private field "$1.$2" is assigned but never used'#000+
'05031_N_Private method "$1.$2" never used'#000+
'05031_N_Private method',' "$1.$2" never used'#000+
'05032_E_Set type expected'#000+
'05033_W_Function result does not seem to be s','et'#000+
'05033_W_Function result does not seem to be set'#000+
'05034_W_Type "$1" is not aligned correctly in current record for C'#000+
'05035_E_Unknown record field identifier "$1"'#000+
'05036_W_Local variable "$1" does not seem to be initialized'#000+
'05036_W_Local variable "$1" does n','ot seem to be initialized'#000+
'05037_W_Variable "$1" does not seem to be initialized'#000+
'05038_E_ide','ntifier idents no member "$1"'#000+
'05038_E_identifier idents no member "$1"'#000+
'05039_H_Found declaration: $1'#000+
'05040_E_Data element too large'#000+
'05042_E_No matching implementation for interface method "$1" found'#000+
'05042_E_No matching implementation for interface method "$','1" found'#000+
'05043_W_Symbol "$1" is deprecated'#000+
'05044_W_Symbol "$1" is not portable'#000+
'05055_W_Symb','ol "$1" is not implemented'#000+
'05055_W_Symbol "$1" is not implemented'#000+
'05056_E_Can'#039't create unique type from this type'#000+
'06009_E_Parameter list size exceeds 65535 bytes'#000+
'06012_E_File types must be var parameters'#000+
'06012_E_File types must be',' var parameters'#000+
'06013_E_The use of a far pointer isn'#039't allowed there'#000+
'06015_E_EXPORT declare','d functions can'#039't be called'#000+
'06015_E_EXPORT declared functions can'#039't be called'#000+
'06016_W_Possible illegal call of constructor or destructor'#000+
'06017_N_Inefficient code'#000+
'06018_W_unreachable code'#000+
'06020_E_Abstract methods can'#039't be called directly'#000+
'06020_E_Abst','ract methods can'#039't be called directly'#000+
'06027_DL_Register $1 weight $2 $3'#000+
'06029_DL_Stack fram','e is omitted'#000+
'06029_DL_Stack frame is omitted'#000+
'06031_E_Object or class methods can'#039't be inline.'#000+
'06032_E_Procvar calls cannot be inline.'#000+
'06033_E_No code for inline procedure stored'#000+
'06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
'sed, use (set)length instead',#000+
'060','35_E_Element zero of an ansi/wide- or longstring can'#039't be acc'+
'essed, use (set)length instead'#000+
'06037_E_Constructors or destructors can not be called inside a '#039'wi'+
'th'#039' clause'#000+
'06038_E_Cannot call message handler methods directly'#000+
'06039_E_Jump in or outside of an exception block'#000+
'06040_E_Control flow statements aren'#039't allowed in a finally ','bloc'+
'k'#000+
'06039_E_Jump in or',' outside of an exception block'#000+
'06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
'06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
'06042_W_Local variable size exceed limit for certain cpu'#039's'#000+
'06043_E_Local variables size exceeds supported limit'#000+
'06043_E_Local variables size',' exceeds supported limit'#000+
'06044_E_BREAK not allowed'#000+
'06045_E_CONTINUE not allowed'#000+
'07000_DL_St','arting $1 styled assembler parsing'#000+
'07000_DL_Starting $1 styled assembler parsing'#000+
'07001_DL_Finished $1 styled assembler parsing'#000+
'07002_E_Non-label pattern contains @'#000+
'07004_E_Error building record offset'#000+
'07004_E_Error building record o','ffset'#000+
'07005_E_OFFSET used without identifier'#000+
'07006_E_TYPE used without identifier'#000+
'07007_E_C','annot use local variable or parameters here'#000+
'07007_E_Cannot use local variable or parameters here'#000+
'07008_E_need to use OFFSET here'#000+
'07009_E_need to use $ here'#000+
'07010_E_Cannot use multiple relocatable symbols'#000+
'07010_E_Cannot use multiple relocatable symbol','s'#000+
'07011_E_Relocatable symbol can only be added'#000+
'07012_E_Invalid constant expression'#000+
'07013_E_','Relocatable symbol is not allowed'#000+
'07013_E_Relocatable symbol is not allowed'#000+
'07014_E_Invalid reference syntax'#000+
'07015_E_You can not reach $1 from that code'#000+
'07016_E_Local symbols/labels aren'#039't allowed as references'#000+
'07016_E_Local symbols/labels aren'#039't al','lowed as references'#000+
'07017_E_Invalid base and index register usage'#000+
'07018_W_Possible error in',' object field handling'#000+
'07018_W_Possible error in object field handling'#000+
'07019_E_Wrong scale factor specified'#000+
'07020_E_Multiple index register usage'#000+
'07021_E_Invalid operand type'#000+
'07022_E_Invalid string as opcode operand: $1'#000+
'07022_E_Invalid string',' as opcode operand: $1'#000+
'07023_W_@CODE and @DATA not supported'#000+
'07024_E_Null label references ','are not allowed'#000+
'07024_E_Null label references are not allowed'#000+
'07025_E_Divide by zero in asm evaluator'#000+
'07026_E_Illegal expression'#000+
'07027_E_escape sequence ignored: $1'#000+
'07028_E_Invalid symbol reference'#000+
'07028_E_Invalid symbol referen','ce'#000+
'07029_W_Fwait can cause emulation problems with emu387'#000+
'07030_W_$1 without operand transl','ated into $1P'#000+
'07030_W_$1 without operand translated into $1P'#000+
'07031_W_ENTER instruction is not supported by Linux kernel'#000+
'07032_W_Calling an overload function in assembler'#000+
'07033_E_Unsupported symbol type for operand'#000+
'07033_E_Unsupported symbol',' type for operand'#000+
'07034_E_Constant value out of bounds'#000+
'07035_E_Error converting decimal $1'#000,
'07035_E_Error converting decimal $1'#000+
'07036_E_Error converting octal $1'#000+
'07037_E_Error converting binary $1'#000+
'07038_E_Error converting hexadecimal $1'#000+
'07039_H_$1 translated to $2'#000+
'07040_W_$1 is associated to an overloaded function'#000+
'07040_W_$1 i','s associated to an overloaded function'#000+
'07041_E_Cannot use SELF outside a method'#000+
'07042_E_Can','not use OLDEBP outside a nested procedure'#000+
'07042_E_Cannot use OLDEBP outside a nested procedure'#000+
'07043_W_Procedures can'#039't return any value in asm code'#000+
'07044_E_SEG not supported'#000+
'07045_E_Size suffix and destination or source size do not match'#000+
'07046_W_Size suffix and destination or source size do ','not match'#000+
'07045_E_Size suffix and des','tination or source size do not match'#000+
'07046_W_Size suffix and destination or source size do not match'#000+
'07047_E_Assembler syntax error'#000+
'07048_E_Invalid combination of opcode and operands'#000+
'07049_E_Assembler syntax error in operand'#000+
'07050_E_Assembler syntax error in constant'#000+
'07050_E_Assembl','er syntax error in constant'#000+
'07051_E_Invalid String expression'#000+
'07052_W_constant with symbol ','$1 for address which is not on a pointe'+
'r'#000+
'07052_W_constant with symbol $1 for address which is not on a pointer'#000+
'07053_E_Unrecognized opcode $1'#000+
'07054_E_Invalid or missing opcode'#000+
'07055_E_Invalid combination of prefix and opcode: $1'#000+
'07055_E_Invalid combination of prefix and o','pcode: $1'#000+
'07056_E_Invalid combination of override and opcode: $1'#000+
'07057_E_Too many operands ','on line'#000+
'07057_E_Too many operands on line'#000+
'07058_W_NEAR ignored'#000+
'07059_W_FAR ignored'#000+
'07060_E_Duplicate local symbol $1'#000+
'07061_E_Undefined local symbol $1'#000+
'07062_E_Unknown label identifier $1'#000+
'07062_E_Unknown label identifier',' $1'#000+
'07063_E_Invalid register name'#000+
'07064_E_Invalid floating point register name'#000+
'07066_W_Modu','lo not supported'#000+
'07066_W_Modulo not supported'#000+
'07067_E_Invalid floating point constant $1'#000+
'07068_E_Invalid floating point expression'#000+
'07069_E_Wrong symbol type'#000+
'07070_E_Cannot index a local var or parameter with a register'#000+
'07070_E_Cannot index ','a local var or parameter with a register'#000+
'07071_E_Invalid segment override expression'#000+
'07072_','W_Identifier $1 supposed external'#000+
'07072_W_Identifier $1 supposed external'#000+
'07073_E_Strings not allowed as constants'#000+
'07074_No type of variable specified'#000+
'07075_E_assembler code not returned to text section'#000+
'07075_E_assembler code not returned to',' text section'#000+
'07076_E_Not a directive or local symbol $1'#000+
'07077_E_Using a defined name as a ','local label'#000+
'07077_E_Using a defined name as a local label'#000+
'07078_E_Dollar token is used without an identifier'#000+
'07079_W_32bit constant created for address'#000+
'07080_N_.align is target specific, use .balign or .p2align'#000+
'07080_N_.align is target specific, use .bal','ign or .p2align'#000+
'07081_E_Can'#039't access fields directly for parameters'#000+
'07082_E_Can'#039't access fi','elds of objects/classes directly'#000+
'07082_E_Can'#039't access fields of objects/classes directly'#000+
'07083_E_No size specified and unable to determine the size of the oper'+
'ands'#000+
'07084_E_Cannot use RESULT in this function'#000+
'07084_E_Cannot use RESULT in this functio','n'#000+
'07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
'07087_W_"$1 %st(n)" translat','ed into "$1 %st,%st(n)"'#000+
'07087_W_"$1 %st(n)" translated into "$1 %st,%st(n)"'#000+
'07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
'07089_E_Char < not allowed here'#000+
'07090_E_Char > not allowed here'#000+
'07093_W_ALIGN not supported'#000+
'07093_W_A','LIGN not supported'#000+
'07094_E_Inc and Dec cannot be together'#000+
'07095_E_Invalid reglist for movem',#000+
'07095_E_Invalid reglist for movem'#000+
'07096_E_Reglist invalid for opcode'#000+
'07097_E_Higher cpu mode required ($1)'#000+
'07098_W_No size specified and unable to determine the size of the oper'+
'ands, using DWORD as default'#000+
'ands,',' using DWORD as default'#000+
'08000_F_Too many assembler files'#000+
'08001_F_Selected assembler output ','not supported'#000+
'08001_F_Selected assembler output not supported'#000+
'08002_F_Comp not supported'#000+
'08003_F_Direct not support for binary writers'#000+
'08004_E_Allocating of data is only allowed in bss section'#000+
'08005_F_No binary writer selected'#000+
'0800','5_F_No binary writer selected'#000+
'08006_E_Asm: Opcode $1 not in table'#000+
'08007_E_Asm: $1 invalid c','ombination of opcode and operands'#000+
'08007_E_Asm: $1 invalid combination of opcode and operands'#000+
'08008_E_Asm: 16 Bit references not supported'#000+
'08009_E_Asm: Invalid effective address'#000+
'08010_E_Asm: Immediate or reference expected'#000+
'08010_E_Asm: Immediate or refer','ence expected'#000+
'08011_E_Asm: $1 value exceeds bounds $2'#000+
'08012_E_Asm: Short jump is out of ran','ge $1'#000+
'08012_E_Asm: Short jump is out of range $1'#000+
'08013_E_Asm: Undefined label $1'#000+
'08014_E_Asm: Comp type not supported for this target'#000+
'08015_E_Asm: Extended type not supported for this target'#000+
'08016_E_Asm: Duplicate label $1'#000+
'0','8016_E_Asm: Duplicate label $1'#000+
'08017_E_Asm: Redefined label $1'#000+
'08018_E_Asm: First defined h','ere'#000+
'08018_E_Asm: First defined here'#000+
'08019_E_Asm: Invalid register $1'#000+
'09000_W_Source operating system redefined'#000+
'09001_I_Assembling (pipe) $1'#000+
'09002_E_Can'#039't create assember file: $1'#000+
'09003_E_Can'#039't create object file: $1'#000+
'09','003_E_Can'#039't create object file: $1'#000+
'09004_E_Can'#039't create archive file: $1'#000+
'09005_E_Assembler ','$1 not found, switching to external assembling'#000+
'09005_E_Assembler $1 not found, switching to external assembling'#000+
'09006_T_Using assembler: $1'#000+
'09007_E_Error while assembling exitcode $1'#000+
'09008_E_Can'#039't call the assembler, error $1 switching to external a'+
'ssembling'#000+
'09008_E_Can'#039't call the assemble','r, error $1 switching to external'+
' assembling'#000+
'09009_I_Assembling $1'#000+
'09010_I_Assembling with ','smartlinking $1'#000+
'09010_I_Assembling with smartlinking $1'#000+
'09011_W_Object $1 not found, Linking may fail !'#000+
'09012_W_Library $1 not found, Linking may fail !'#000+
'09013_E_Error while linking'#000+
'09014_E_Can'#039't call the linker, switching to external linking'#000+
'09014_E_','Can'#039't call the linker, switching to external linking'#000+
'09015_I_Linking $1'#000+
'09016_E_Util $1 not',' found, switching to external linking'#000+
'09016_E_Util $1 not found, switching to external linking'#000+
'09017_T_Using util $1'#000+
'09018_E_Creation of Executables not supported'#000+
'09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
'09019_E_Creation of Dynamic/Shared Librarie','s not supported'#000+
'09020_I_Closing script $1'#000+
'09021_E_resource compiler not found, switching to',' external mode'#000+
'09021_E_resource compiler not found, switching to external mode'#000+
'09022_I_Compiling resource $1'#000+
'09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
'king'#000+
'09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
#000+
'09025_T_unit $1 can'#039't be shared linked, switching to stat','ic link'+
'ing'#000+
'09024_T_unit $1 can'#039't be smart li','nked, switching to static linki'+
'ng'#000+
'09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
'g'#000+
'09026_E_unit $1 can'#039't be smart or static linked'#000+
'09027_E_unit $1 can'#039't be shared or static linked'#000+
'09028_F_Can'#039't post process executable $1'#000+
'09028_F_Can'#039't post process executable $1'#000,
'09029_F_Can'#039't open executable $1'#000+
'09030_X_Size of Code: $1 bytes'#000+
'09031_X_Size of initialized',' data: $1 bytes'#000+
'09031_X_Size of initialized data: $1 bytes'#000+
'09032_X_Size of uninitialized data: $1 bytes'#000+
'09033_X_Stack space reserved: $1 bytes'#000+
'09034_X_Stack space commited: $1 bytes'#000+
'10000_T_Unitsearch: $1'#000+
'10000_T_Un','itsearch: $1'#000+
'10001_T_PPU Loading $1'#000+
'10002_U_PPU Name: $1'#000+
'10003_U_PPU Flags: $1'#000+
'10004_U_PPU ','Crc: $1'#000+
'10004_U_PPU Crc: $1'#000+
'10005_U_PPU Time: $1'#000+
'10006_U_PPU File too short'#000+
'10007_U_PPU Invalid Header (no PPU at the begin)'#000+
'10008_U_PPU Invalid Version $1'#000+
'10009_U_PPU is compiled for another processor'#000+
'10009_U_PPU i','s compiled for another processor'#000+
'10010_U_PPU is compiled for an other target'#000+
'10011_U_PPU So','urce: $1'#000+
'10011_U_PPU Source: $1'#000+
'10012_U_Writing $1'#000+
'10013_F_Can'#039't Write PPU-File'#000+
'10014_F_Error reading PPU-File'#000+
'10015_F_unexpected end of PPU-File'#000+
'10016_F_Invalid PPU-File entry: $1'#000+
'10016_F_Invalid PPU-File e','ntry: $1'#000+
'10017_F_PPU Dbx count problem'#000+
'10018_E_Illegal unit name: $1'#000+
'10019_F_Too much units',#000+
'10019_F_Too much units'#000+
'10020_F_Circular unit reference between $1 and $2'#000+
'10021_F_Can'#039't compile unit $1, no sources available'#000+
'10022_F_Can'#039't find unit $1'#000+
'10023_W_Unit $1 was not found but $2 exists'#000+
'10023_W_Unit $1 was',' not found but $2 exists'#000+
'10024_F_Unit $1 searched but $2 found'#000+
'10025_W_Compiling the system',' unit requires the -Us switch'#000+
'10025_W_Compiling the system unit requires the -Us switch'#000+
'10026_F_There were $1 errors compiling module, stopping'#000+
'10027_U_Load from $1 ($2) unit $3'#000+
'10028_U_Recompiling $1, checksum changed for $2'#000+
'10028_U_Recompiling $1, check','sum changed for $2'#000+
'10029_U_Recompiling $1, source found only'#000+
'10030_U_Recompiling unit, stat','ic lib is older than ppufile'#000+
'10030_U_Recompiling unit, static lib is older than ppufile'#000+
'10031_U_Recompiling unit, shared lib is older than ppufile'#000+
'10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
'10032_U_Recompiling unit, obj and asm are older than ppufile'#000,
'10033_U_Recompiling unit, obj is older than asm'#000+
'10034_U_Parsing interface of $1'#000+
'10035_U_Par','sing implementation of $1'#000+
'10035_U_Parsing implementation of $1'#000+
'10036_U_Second load for unit $1'#000+
'10037_U_PPU Check file $1 time $2'#000+
'10038_H_Conditional $1 was not set at startup in last compilation of $'+
'2'#000+
'10038_H_Conditional $1 was not set at startup in last com','pilation of'+
' $2'#000+
'10039_H_Conditional $1 was set at startup in last compilation of $2'#000+
'10040_W_','Can'#039't recompile unit $1, but found modifed include files'+
#000+
'10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
'10041_H_File $1 is newer than Release PPU file $2'#000+
'10042_U_Using a unit which was not compiled with correct FPU mode'#000+
'10042_U_Using a unit which was not compile','d with correct FPU mode'#000+
'10043_U_Loading interface units from $1'#000+
'10044_U_Loading implementat','ion units from $1'#000+
'10044_U_Loading implementation units from $1'#000+
'10045_U_Interface CRC changed for unit $1'#000+
'10046_U_Implementation CRC changed for unit $1'#000+
'10047_U_Finished compiling unit $1'#000+
'10048_U_Add dependency of $1 to $2'#000+
'10048_U','_Add dependency of $1 to $2'#000+
'10049_U_No reload, is caller: $1'#000+
'10050_U_No reload, already in ','second compile: $1'#000+
'10050_U_No reload, already in second compile: $1'#000+
'10051_U_Flag for reload: $1'#000+
'10052_U_Forced reloading'#000+
'10053_U_Previous state of $1: $2'#000+
'10054_U_Already compiling $1, setting second compile'#000+
'10054_U_Already compiling $1, setting second',' compile'#000+
'10055_U_Loading unit $1'#000+
'10056_U_Finished loading unit $1'#000+
'10057_U_Registering new u','nit $1'#000+
'10057_U_Registering new unit $1'#000+
'10058_U_Re-resolving unit $1'#000+
'10059_U_Skipping re-resolving unit $1, still loading used units'#000+
'11000_$1 [options] <inputfile> [options]'#000+
'11001_W_Only one source file supported'#000+
'11001_W_','Only one source file supported'#000+
'11002_W_DEF file can be created only for OS/2'#000+
'11003_E_nested',' response files are not supported'#000+
'11003_E_nested response files are not supported'#000+
'11004_F_No source file name in command line'#000+
'11005_N_No option inside $1 config file'#000+
'11006_E_Illegal parameter: $1'#000+
'11007_H_-? writes help pages'#000+
'1','1007_H_-? writes help pages'#000+
'11008_F_Too many config files nested'#000+
'11009_F_Unable to open fil','e $1'#000+
'11009_F_Unable to open file $1'#000+
'11010_D_Reading further options from $1'#000+
'11011_W_Target is already set to: $1'#000+
'11012_W_Shared libs not supported on DOS platform, reverting to static'+
#000+
'11012_W_Shared libs not supported on DOS platform, reverting to sta','t'+
'ic'#000+
'11013_F_too many IF(N)DEFs'#000+
'11014_F_too many ENDIFs'#000+
'11015_F_open conditional at the end ','of the file'#000+
'11015_F_open conditional at the end of the file'#000+
'11016_W_Debug information generation is not supported by this executab'+
'le'#000+
'11017_H_Try recompiling with -dGDB'#000+
'11018_E_You are using the obsolete switch $1'#000+
'11018_E_You are using the obs','olete switch $1'#000+
'11019_E_You are using the obsolete switch $1, please use $2'#000+
'11020_N_Switchi','ng assembler to default source writing assembler'#000+
'11020_N_Switching assembler to default source writing assembler'#000+
'11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
'11022_W_"$1" assembler use forced'#000+
'11022_W_"$1" assembler use forced',#000+
'11026_T_Reading options from file $1'#000+
'11027_T_Reading options from environment $1'#000+
'11028_D_H','andling option "$1"'#000+
'11028_D_Handling option "$1"'#000+
'11029__*** press enter ***'#000+
'11030_H_Start of reading config file $1'#000+
'11031_H_End of reading config file $1'#000+
'11032_D_interpreting option "$1"'#000+
'11032_D_interpreting opt','ion "$1"'#000+
'11036_D_interpreting firstpass option "$1"'#000+
'11033_D_interpreting file option "$1"'#000+
'1','1034_D_Reading config file "$1"'#000+
'11034_D_Reading config file "$1"'#000+
'11035_D_found source file name "$1"'#000+
'11037_D_Defining symbol $1'#000+
'11038_D_Undefining symbol $1'#000+
'11039_E_Unknown code page'#000+
'11039_E_Unknown code page',#000+
'11023_Free Pascal Compiler version $FPCVERSION [$FPCDATE] for $FPCCPU'#010+
'Copyright (c) 1993-2','004 by Florian Klaempfl'#000+
'Copyright (c) 1993-2004 by Florian Klaempfl'#000+
'11024_Free Pascal Compiler version $FPCVERSION'#010+
#010+
'Compiler Date : $FPCDATE'#010+
'Compiler CPU Target: $FPCCPU'#010+
#010+
'Supported targets:'#010+
'Supported targets',':'#010+
' $OSTARGETS'#010+
#010+
'This program comes under the GNU General Public Licence'#010+
'For more informatio','n read COPYING.FPC'#010+
'For more information read COPYING.FPC'#010+
#010+
'Report bugs,suggestions etc to:'#010+
' bugrep@freepascal.org'#000+
'11025_**0*_put + after a boolean switch option to enable it, - to disa'+
'ble it'#010+
'11025_**0*_put + after a boolean switch option to enable i','t, - to di'+
'sable it'#010+
'**1a_the compiler doesn'#039't delete the generated assembler file'#010+
'**2al_list',' sourcecode lines in assembler file'#010+
'**2al_list sourcecode lines in assembler file'#010+
'**2an_list node info in assembler file'#010+
'*L2ap_use pipes instead of creating temporary assembler files'#010+
'**2ar_list register allocation/release info in assembler file'#010+
'**2at_list temp allocation/release info i','n assembler file'#010+
'**2ar_list r','egister allocation/release info in assembler file'#010+
'**2at_list temp allocation/release info in assembler file'#010+
'**1A<x>_output format:'#010+
'**2Adefault_use default assembler'#010+
'3*2Aas_assemble using GNU AS'#010+
'3*2Anasmcoff_coff (Go32v2) file using Nasm'#010+
'3*2Anasmelf_elf32 (Linux) file using Nasm'#010+
'3*2','Anasmelf_elf32 (Linux) file using Nasm'#010+
'3*2Awasm_obj file using Wasm (Watcom)'#010+
'3*2Anasmobj_ob','j file using Nasm'#010+
'3*2Anasmobj_obj file using Nasm'#010+
'3*2Amasm_obj file using Masm (Microsoft)'#010+
'3*2Atasm_obj file using Tasm (Borland)'#010+
'3*2Aelf_elf32 (Linux) using internal writer'#010+
'3*2Acoff_coff (Go32v2) using internal writer'#010+
'3*2Acof','f_coff (Go32v2) using internal writer'#010+
'3*2Apecoff_pecoff (Win32) using internal writer'#010+
'4*2Aa','s_assemble using GNU AS'#010+
'4*2Aas_assemble using GNU AS'#010+
'6*2Aas_Unix o-file using GNU AS'#010+
'6*2Agas_GNU Motorola assembler'#010+
'6*2Amit_MIT Syntax (old GAS)'#010+
'6*2Amot_Standard Motorola assembler'#010+
'6*2Amot_Standard Motorola assembl','er'#010+
'A*2Aas_assemble using GNU AS'#010+
'P*2Aas_assemble using GNU AS'#010+
'S*2Aas_assemble using GNU AS'#010+
'*','*1b_generate browser info'#010+
'**1b_generate browser info'#010+
'**2bl_generate local symbol info'#010+
'**1B_build all modules'#010+
'**1C<x>_code generation options:'#010+
'**2Cc<x>_set default calling convention to <x>'#010+
'**2Cc<x>_set default calling conve','ntion to <x>'#010+
'**2CD_create also dynamic library (not supported)'#010+
'**2Ce_Compilation with emula','ted floating point opcodes'#010+
'**2Ce_Compilation with emulated floating point opcodes'#010+
'**2Cf<x>_Select fpu instruction set to use to <x>'#010+
'**2Cg_Generate PIC code'#010+
'**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
'**2Ch<n>_<n> bytes heap (between 1023 and 671078','40)'#010+
'**2Ci_IO-checking'#010+
'**2Cn_omit linking stage'#010+
'**2Co_check overflow of integer operations'#010+
'*','*2Cr_range checking'#010+
'**2Cr_range checking'#010+
'**2CR_verify object method call validity'#010+
'**2Cs<n>_set stack size to <n>'#010+
'**2Ct_stack checking'#010+
'**2CX_create also smartlinked library'#010+
'**2CX_create also smartlinked librar','y'#010+
'**1d<x>_defines the symbol <x>'#010+
'**1D_generate a DEF file'#010+
'**2Dd<x>_set description to <x>'#010+
'*','*2Dv<x>_set DLL version to <x>'#010+
'**2Dv<x>_set DLL version to <x>'#010+
'*O2Dw_PM application'#010+
'**1e<x>_set path to executable'#010+
'**1E_same as -Cn'#010+
'**1F<x>_set file names and paths:'#010+
'**2Fc<x>_sets input codepage to <x>'#010+
'**2Fc<x>_sets i','nput codepage to <x>'#010+
'**2FD<x>_sets the directory where to search for compiler utilities'#010+
'**2','Fe<x>_redirect error output to <x>'#010+
'**2Fe<x>_redirect error output to <x>'#010+
'**2FE<x>_set exe/unit output path to <x>'#010+
'**2Fi<x>_adds <x> to include path'#010+
'**2Fl<x>_adds <x> to library path'#010+
'**2FL<x>_uses <x> as dynamic linker'#010+
'**2FL','<x>_uses <x> as dynamic linker'#010+
'**2Fo<x>_adds <x> to object path'#010+
'**2Fr<x>_load error message',' file <x>'#010+
'**2Fr<x>_load error message file <x>'#010+
'**2Fu<x>_adds <x> to unit path'#010+
'**2FU<x>_set unit output path to <x>, overrides -FE'#010+
'*g1g_generate debugger information:'#010+
'*g2gc_generate checks for pointers'#010+
'*g2gc_generate check','s for pointers'#010+
'*g2gd_use dbx'#010+
'*g2gg_use gsym'#010+
'*g2gh_use heap trace unit (for memory leak debu','gging)'#010+
'*g2gh_use heap trace unit (for memory leak debugging)'#010+
'*g2gl_use line info unit to show more info for backtraces'#010+
'*g2gv_generates programs tracable with valgrind'#010+
'*g2gw_generate dwarf debugging info'#010+
'*g2gw_generate dwarf debugging info'#010,
'**1i_information'#010+
'**2iD_return compiler date'#010+
'**2iV_return compiler version'#010+
'**2iSO_return com','piler OS'#010+
'**2iSO_return compiler OS'#010+
'**2iSP_return compiler processor'#010+
'**2iTO_return target OS'#010+
'**2iTP_return target processor'#010+
'**1I<x>_adds <x> to include path'#010+
'**1k<x>_Pass <x> to the linker'#010+
'**1k<x>_Pass <x> to',' the linker'#010+
'**1l_write logo'#010+
'**1M<x>_set language mode to <x>'#010+
'**2Mfpc_free pascal dialect (d','efault)'#010+
'**2Mfpc_free pascal dialect (default)'#010+
'**2Mobjfpc_switch some Delphi 2 extensions on'#010+
'**2Mdelphi_tries to be Delphi compatible'#010+
'**2Mtp_tries to be TP/BP 7.0 compatible'#010+
'**2Mgpc_tries to be gpc compatible'#010+
'**2Mgpc_tries ','to be gpc compatible'#010+
'**2Mmacpas_tries to be compatible to the macintosh pascal dialects'#010+
'**1','n_don'#039't read the default config file'#010+
'**1n_don'#039't read the default config file'#010+
'**1o<x>_change the name of the executable produced to <x>'#010+
'**1O<x>_optimizations:'#010+
'3*2Og_generate smaller code'#010+
'3*2OG_generate faster code (default)'#010+
'3*2','OG_generate faster code (default)'#010+
'**2Or_keep certain variables in registers'#010+
'3*2Ou_enable un','certain optimizations (see docs)'#010+
'3*2Ou_enable uncertain optimizations (see docs)'#010+
'3*2O1_level 1 optimizations (quick optimizations)'#010+
'3*2O2_level 2 optimizations (-O1 + slower optimizations)'#010+
'3*2O3_level 3 optimizations (-O2 repeatedly, max 5 times)'#010+
'3*2O3_lev','el 3 optimizations (-O2 repeatedly, max 5 times)'#010+
'3*2Op<x>_target processor:'#010+
'3*3Op1_set targ','et processor to 386/486'#010+
'3*3Op1_set target processor to 386/486'#010+
'3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#010+
'3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#010+
'6*2Og_generate smaller code'#010+
'6*2Og_generate s','maller code'#010+
'6*2OG_generate faster code (default)'#010+
'6*2Ox_optimize maximum (still BUGGY!!!)'#010+
'6*','2O0_set target processor to a MC68000'#010+
'6*2O0_set target processor to a MC68000'#010+
'6*2O2_set target processor to a MC68020+ (default)'#010+
'**1pg_generate profile code for gprof (defines FPC_PROFILE)'#010+
'**1pg_generate profile code for gprof (defines FPC_PROFILE)'#010,
'**1R<x>_assembler reading style:'#010+
'**2Rdefault_use default assembler'#010+
'3*2Ratt_read AT&T style ','assembler'#010+
'3*2Ratt_read AT&T style assembler'#010+
'3*2Rintel_read Intel style assembler'#010+
'6*2RMOT_read motorola style assembler'#010+
'**1S<x>_syntax options:'#010+
'**2S2_same as -Mobjfpc'#010+
'**2Sc_supports operators like C (*=,+=,/= and -=)'#010+
'**2Sc_supports op','erators like C (*=,+=,/= and -=)'#010+
'**2Sa_include assertion code.'#010+
'**2Sd_same as -Mdelphi'#010+
'**2Se','<x>_compiler stops after the <x> errors (default is 1)'#010+
'**2Se<x>_compiler stops after the <x> errors (default is 1)'#010+
'**2Sg_allow LABEL and GOTO'#010+
'**2Sh_Use ansistrings'#010+
'**2Si_support C++ styled INLINE'#010+
'**2SI<x>_set interface style to <x>'#010+
'**2SI<x>_set ','interface style to <x>'#010+
'**3SIcom COM compatible interface (default)'#010+
'**3SIcorba CORBA compati','ble interface'#010+
'**3SIcorba CORBA compatible interface'#010+
'**2Sm_support macros like C (global)'#010+
'**2So_same as -Mtp'#010+
'**2Sp_same as -Mgpc'#010+
'**2Ss_constructor name must be init (destructor must be done)'#010+
'**2Ss_constructor name must be init (destructor must be don','e)'#010+
'**2St_allow static keyword in objects'#010+
'**1s_don'#039't call assembler and linker'#010+
'**2sh_Generat','e script to link on host'#010+
'**2sh_Generate script to link on host'#010+
'**2st_Generate script to link on target'#010+
'**2sr_Skip register allocation phase (use with -alr)'#010+
'**1T<x>_Target operating system:'#010+
'**1T<x>_Target operating system',':'#010+
'3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
'3*2Tfreebsd_FreeBSD'#010+
'3*2Tgo32v2_Version ','2 of DJ Delorie DOS extender'#010+
'3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
'3*2Tlinux_Linux'#010+
'3*2Tnetbsd_NetBSD'#010+
'3*2Tnetware_Novell Netware Module (clib)'#010+
'3*2Tnetwlibc_Novell Netware Module (libc)'#010+
'3*2Topenbsd_OpenBSD'#010+
'3*2','Topenbsd_OpenBSD'#010+
'3*2Tos2_OS/2 / eComStation'#010+
'3*2Tsunos_SunOS/Solaris'#010+
'3*2Twatcom_Watcom compa','tible DOS extender'#010+
'3*2Twatcom_Watcom compatible DOS extender'#010+
'3*2Twdosx_WDOSX DOS extender'#010+
'3*2Twin32_Windows 32 Bit'#010+
'4*2Tlinux_Linux'#010+
'6*2Tamiga_Commodore Amiga'#010+
'6*2Tatari_Atari ST/STe/TT'#010+
'6*2Tlinux_Linux-68k'#010+
'6*2Tlinu','x_Linux-68k'#010+
'6*2Tmacos_Macintosh m68k (not supported)'#010+
'6*2Tpalmos_PalmOS'#010+
'A*2Tlinux_Linux'#010+
'P*2T','darwin_Darwin and MacOS X on PowerPC'#010+
'P*2Tdarwin_Darwin and MacOS X on PowerPC'#010+
'P*2Tlinux_Linux on PowerPC'#010+
'P*2Tmacos_MacOS (classic) on PowerPC'#010+
'P*2Tmorphos_MorphOS'#010+
'S*2Tlinux_Linux'#010+
'**1u<x>_undefines the symbol <x>'#010+
'**1u<x>_unde','fines the symbol <x>'#010+
'**1U_unit options:'#010+
'**2Un_don'#039't check the unit name'#010+
'**2Ur_generate rele','ase unit files'#010+
'**2Ur_generate release unit files'#010+
'**2Us_compile a system unit'#010+
'**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
'**2*_e : Show errors (default) d : Show debug info'#010+
'**2*_e : Show errors (default) d ',': Show debug info'#010+
'**2*_w : Show warnings u : Show unit info'#010+
'**2*_n : Show not','es t : Show tried/used files'#010+
'**2*_n : Show notes t : Show tried/used files'#010+
'**2*_h : Show hints m : Show defined macros'#010+
'**2*_i : Show general info p : Show compiled procedures'#010+
'**2*_i : Show general info p : S','how compiled procedures'#010+
'**2*_l : Show linenumbers c : Show conditionals'#010+
'**2*_a :',' Show everything 0 : Show nothing (except errors'+
')'#010+
'**2*_a : Show everything 0 : Show nothing (except errors)'#010+
'**2*_b : Show all procedure r : Rhide/GCC compatibility mode'#010+
'**2*_ declarations if an error x : Executable info (Win32 only)'#010+
'**2*_ declarat','ions if an error x : Executable info (Win32 only'+
')'#010+
'**2*_ occurs'#010+
'**1V_write fpcdebug.tx','t file with lots of debugging info'#010+
'**1V_write fpcdebug.txt file with lots of debugging info'#010+
'3*1W<x>_Win32-like target options'#010+
'3*2WB<x>_Set Image base to Hexadecimal <x> value'#010+
'3*2WC_Specify console type application'#010+
'3*2WC_Specify console type appl','ication'#010+
'3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
'3*2WF_Specify full-screen type ','application (OS/2 only)'#010+
'3*2WF_Specify full-screen type application (OS/2 only)'#010+
'3*2WG_Specify graphic type application'#010+
'3*2WN_Do not generate relocation code (necessary for debugging)'#010+
'3*2WR_Generate relocation code'#010+
'3*2WR_Generate relocat','ion code'#010+
'P*2WC_Specify console type application (MacOS only)'#010+
'P*2WG_Specify graphic type app','lication (MacOS only)'#010+
'P*2WG_Specify graphic type application (MacOS only)'#010+
'P*2WT_Specify tool type application (MPW tool, MacOS only)'#010+
'**1X_executable options:'#010+
'**2Xc_link with the c library'#010+
'**2Xd_don'#039't use standard library search path (needed for cross com'+
'pile)'#010+
'**2XD_try to link units dynamic ',' (defines FPC_LINK_DYNAMIC)'#010+
'**2Xd_don'#039't u','se standard library search path (needed for cross c'+
'ompile)'#010+
'**2XD_try to link units dynamic (defines FPC_LINK_DYNAMIC)'#010+
'**2XP<x>_prepend the binutils names with the prefix <x>'#010+
'**2Xr<x>_set library search path to <x> (needed for cross compile)'#010+
'**2Xr<x>_set library search path to <x> (needed for cross',' compile)'#010+
'**2Xs_strip all symbols from executable'#010+
'**2XS_try to link units static (default) ','(defines FPC_LINK_STATIC)'#010+
'**2XS_try to link units static (default) (defines FPC_LINK_STATIC)'#010+
'**2Xt_link with static libraries (-static is passed to linker)'#010+
'**2XX_try to link units smart (defines FPC_LINK_SMART)'#010+
'**2XX_try to link units smart (defines FPC_LINK_S','MART)'#010+
'**1*_'#010+
'**1?_shows this help'#010+
'**1h_shows this help without waiting'#000

View File

@ -573,6 +573,9 @@ implementation
procedure tclassheader.eachsym(sym : tnamedindexitem;arg:pointer);
const
po_comp = [po_classmethod,po_virtualmethod,po_staticmethod,po_interrupt,po_iocheck,po_msgstr,po_msgint,
po_exports,po_varargs,po_explicitparaloc,po_nostackframe];
label
handlenextdef;
var
@ -695,10 +698,8 @@ implementation
{ the flags have to match except abstract and override }
{ only if both are virtual !! }
if (procdefcoll^.data.proccalloption<>pd.proccalloption) or
(procdefcoll^.data.proctypeoption<>pd.proctypeoption) or
((procdefcoll^.data.procoptions-
[po_abstractmethod,po_overridingmethod,po_assembler,po_overload,po_public,po_reintroduce])<>
(pd.procoptions-[po_abstractmethod,po_overridingmethod,po_assembler,po_overload,po_public,po_reintroduce])) then
(procdefcoll^.data.proctypeoption<>pd.proctypeoption) or
((procdefcoll^.data.procoptions*po_comp)<>(pd.procoptions*po_comp)) then
begin
MessagePos1(pd.fileinfo,parser_e_header_dont_match_forward,pd.fullprocname(false));
tprocsym(procdefcoll^.data.procsym).write_parameter_lists(pd);
@ -1399,7 +1400,11 @@ initialization
end.
{
$Log$
Revision 1.81 2004-11-15 23:35:31 peter
Revision 1.82 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.81 2004/11/15 23:35:31 peter
* tparaitem removed, use tparavarsym instead
* parameter order is now calculated from paranr value in tparavarsym

View File

@ -1736,6 +1736,7 @@ begin
def_symbol('HAS_ADDR_STACK_ON_STACK');
def_symbol('NOBOUNDCHECK');
def_symbol('HASCOMPILERPROC');
def_symbol('INTERNCONSTINTF');
def_symbol('VALUEGETMEM');
def_symbol('VALUEFREEMEM');
def_symbol('HASCURRENCY');
@ -2089,7 +2090,11 @@ finalization
end.
{
$Log$
Revision 1.152 2004-11-01 12:43:28 peter
Revision 1.153 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.152 2004/11/01 12:43:28 peter
* shortstr compare with empty string fixed
* removed special i386 code

View File

@ -47,6 +47,7 @@ interface
procedure insert_funcret_local(pd:tprocdef);
function proc_add_definition(var pd:tprocdef):boolean;
procedure proc_set_mangledname(pd:tprocdef);
procedure handle_calling_convention(pd:tabstractprocdef);
@ -1007,13 +1008,6 @@ begin
Message(parser_e_methods_dont_be_export);
if pd.parast.symtablelevel>normal_function_level then
Message(parser_e_dont_nest_export);
{ only os/2 and emx need this }
if target_info.system in [system_i386_os2,system_i386_emx] then
begin
tprocdef(pd).aliasnames.insert(tprocdef(pd).procsym.realname);
if cs_link_deffile in aktglobalswitches then
deffile.AddExport(tprocdef(pd).mangledname);
end;
end;
procedure pd_forward(pd:tabstractprocdef);
@ -1023,19 +1017,34 @@ begin
tprocdef(pd).forwarddef:=true;
end;
procedure pd_alias(pd:tabstractprocdef);
begin
if pd.deftype<>procdef then
internalerror(200304266);
consume(_COLON);
tprocdef(pd).aliasnames.insert(get_stringconst);
include(pd.procoptions,po_has_public_name);
end;
procedure pd_public(pd:tabstractprocdef);
begin
if pd.deftype<>procdef then
internalerror(200304266);
if try_to_consume(_NAME) then
begin
tprocdef(pd).aliasnames.insert(get_stringconst);
include(pd.procoptions,po_has_public_name);
end;
end;
procedure pd_asmname(pd:tabstractprocdef);
begin
if pd.deftype<>procdef then
internalerror(200304267);
tprocdef(pd).setmangledname(target_info.Cprefix+pattern);
tprocdef(pd).aliasnames.insert(target_info.Cprefix+pattern);
if token=_CCHAR then
consume(_CCHAR)
else
@ -1051,7 +1060,7 @@ begin
pd.parast.foreach_static(@check_inline_para,pd);
end;
procedure pd_intern(pd:tabstractprocdef);
procedure pd_internconst(pd:tabstractprocdef);
begin
if pd.deftype<>procdef then
internalerror(200304268);
@ -1059,6 +1068,16 @@ begin
tprocdef(pd).extnumber:=get_intconst;
end;
procedure pd_internproc(pd:tabstractprocdef);
begin
if pd.deftype<>procdef then
internalerror(200304268);
consume(_COLON);
tprocdef(pd).extnumber:=get_intconst;
{ the proc is defined }
tprocdef(pd).forwarddef:=false;
end;
procedure pd_interrupt(pd:tabstractprocdef);
begin
if pd.parast.symtablelevel>normal_function_level then
@ -1222,67 +1241,53 @@ procedure pd_external(pd:tabstractprocdef);
that case either import_nr<>0 or import_name<>nil is true, so
the procedure is either imported by number or by name. (DM)
}
var
import_dll,
import_name : string;
import_nr : word;
begin
if pd.deftype<>procdef then
internalerror(2003042615);
tprocdef(pd).forwarddef:=false;
{ forbid local external procedures }
if pd.parast.symtablelevel>normal_function_level then
Message(parser_e_no_local_proc_external);
{ If the procedure should be imported from a DLL, a constant string follows.
This isn't really correct, an contant string expression follows
so we check if an semicolon follows, else a string constant have to
follow (FK) }
import_nr:=0;
import_name:='';
if not(token=_SEMICOLON) and not(idtoken=_NAME) then
with tprocdef(pd) do
begin
import_dll:=get_stringconst;
if (idtoken=_NAME) then
begin
consume(_NAME);
import_name:=get_stringconst;
end;
if (idtoken=_INDEX) then
begin
{After the word index follows the index number in the DLL.}
consume(_INDEX);
import_nr:=get_intconst;
end;
{ default is to used the realname of the procedure }
if (import_nr=0) and (import_name='') then
import_name:=tprocdef(pd).procsym.realname;
{ create importlib if not already done }
if not(current_module.uses_imports) then
begin
current_module.uses_imports:=true;
importlib.preparelib(current_module.modulename^);
end;
importlib.importprocedure(tprocdef(pd),import_dll,import_nr,import_name);
end
else
begin
if (idtoken=_NAME) then
begin
consume(_NAME);
import_name:=get_stringconst;
tprocdef(pd).setmangledname(import_name);
end
else if (m_mac in aktmodeswitches) and (token=_SEMICOLON) then
forwarddef:=false;
{ forbid local external procedures }
if parast.symtablelevel>normal_function_level then
Message(parser_e_no_local_proc_external);
{ If the procedure should be imported from a DLL, a constant string follows.
This isn't really correct, an contant string expression follows
so we check if an semicolon follows, else a string constant have to
follow (FK) }
if not(token=_SEMICOLON) and not(idtoken=_NAME) then
begin
{In MacPas a single "external" has the same effect as "external name 'xxx'"}
{ don't do this if the procedure is also cdecl; in that case the c-prefix }
{ must also be used (handled later) }
if not(pd.proccalloption in [pocall_cdecl,pocall_cppdecl]) then
tprocdef(pd).setmangledname(tprocdef(pd).procsym.realname);
import_dll:=stringdup(get_stringconst);
if (idtoken=_NAME) then
begin
consume(_NAME);
import_name:=stringdup(get_stringconst);
if import_name^='' then
message(parser_e_empty_import_name);
end;
if (idtoken=_INDEX) then
begin
{After the word index follows the index number in the DLL.}
consume(_INDEX);
import_nr:=get_intconst;
end;
{ default is to used the realname of the procedure }
if (import_nr=0) and not assigned(import_name) then
import_name:=stringdup(procsym.realname);
end
else
begin
if (idtoken=_NAME) then
begin
consume(_NAME);
import_name:=stringdup(get_stringconst);
if import_name^='' then
message(parser_e_empty_import_name);
end;
end;
end;
end;
type
pd_handler=procedure(pd:tabstractprocdef);
proc_dir_rec=record
@ -1428,8 +1433,8 @@ const
mutexclpo : [po_exports,po_external,po_interrupt,po_virtualmethod]
),(
idtok:_INTERNCONST;
pd_flags : [pd_implemen,pd_body,pd_notobject,pd_notobjintf];
handler : @pd_intern;
pd_flags : [pd_interface,pd_body,pd_notobject,pd_notobjintf];
handler : @pd_internconst;
pocall : pocall_none;
pooption : [po_internconst];
mutexclpocall : [];
@ -1437,8 +1442,8 @@ const
mutexclpo : []
),(
idtok:_INTERNPROC;
pd_flags : [pd_implemen,pd_notobject,pd_notobjintf];
handler : @pd_intern;
pd_flags : [pd_interface,pd_notobject,pd_notobjintf];
handler : @pd_internproc;
pocall : pocall_internproc;
pooption : [];
mutexclpocall : [];
@ -1520,7 +1525,7 @@ const
),(
idtok:_PUBLIC;
pd_flags : [pd_implemen,pd_body,pd_notobject,pd_notobjintf];
handler : nil;
handler : @pd_public;
pocall : pocall_none;
pooption : [po_public];
mutexclpocall : [pocall_internproc,pocall_inline];
@ -1793,6 +1798,85 @@ const
end;
procedure proc_set_mangledname(pd:tprocdef);
begin
{ When the mangledname is already set we aren't allowed to change
it because it can already be used somewhere (PFV) }
if not(po_has_mangledname in pd.procoptions) then
begin
{ External Procedures }
if (po_external in pd.procoptions) then
begin
{ external name specified }
if assigned(pd.import_name) then
begin
{ Win32 imports need to use the normal name since to functions
can refer to the same DLL function. This is also needed for compatability
with Delphi and TP7 }
if assigned(pd.import_dll) and
not(target_info.system in [system_i386_win32,system_i386_wdosx]) then
pd.setmangledname(pd.import_name^);
end
else
begin
{ Default names when importing variables }
case pd.proccalloption of
pocall_cdecl :
begin
if assigned(pd._class) then
pd.setmangledname(target_info.Cprefix+pd._class.objrealname^+'_'+pd.procsym.realname)
else
pd.setmangledname(target_info.Cprefix+pd.procsym.realname);
end;
pocall_cppdecl :
begin
pd.setmangledname(target_info.Cprefix+pd.cplusplusmangledname);
end;
else
begin
{In MacPas a single "external" has the same effect as "external name 'xxx'" }
if (m_mac in aktmodeswitches) then
tprocdef(pd).setmangledname(tprocdef(pd).procsym.realname);
end;
end;
end;
end
else
{ Normal procedures }
begin
case pd.proccalloption of
pocall_compilerproc :
begin
pd.setmangledname(lower(pd.procsym.name));
end;
end;
end;
end;
{ Public/exported alias names }
if (po_public in pd.procoptions) and
not(po_has_public_name in pd.procoptions) then
begin
case pd.proccalloption of
pocall_cdecl :
begin
if assigned(pd._class) then
pd.aliasnames.insert(target_info.Cprefix+pd._class.objrealname^+'_'+pd.procsym.realname)
else
pd.aliasnames.insert(target_info.Cprefix+pd.procsym.realname);
end;
pocall_cppdecl :
begin
pd.aliasnames.insert(target_info.Cprefix+pd.cplusplusmangledname);
end;
end;
{ prevent adding the alias a second time }
include(pd.procoptions,po_has_public_name);
end;
end;
procedure handle_calling_convention(pd:tabstractprocdef);
begin
{ set the default calling convention if none provided }
@ -1806,39 +1890,11 @@ const
{ handle proccall specific settings }
case pd.proccalloption of
pocall_cdecl :
begin
{ set mangledname }
if (pd.deftype=procdef) then
begin
if not tprocdef(pd).has_mangledname then
begin
if assigned(tprocdef(pd)._class) then
tprocdef(pd).setmangledname(target_info.Cprefix+tprocdef(pd)._class.objrealname^+'_'+tprocdef(pd).procsym.realname)
else
tprocdef(pd).setmangledname(target_info.Cprefix+tprocdef(pd).procsym.realname);
end;
{ check C cdecl para types }
pd.parast.foreach_static(@check_c_para,nil);
end;
end;
pocall_cdecl,
pocall_cppdecl :
begin
{ set mangledname }
if (pd.deftype=procdef) then
begin
if not tprocdef(pd).has_mangledname then
tprocdef(pd).setmangledname(target_info.Cprefix+tprocdef(pd).cplusplusmangledname);
{ check C cdecl para types }
pd.parast.foreach_static(@check_c_para,nil);
end;
end;
pocall_compilerproc :
begin
if (pd.deftype<>procdef) then
internalerror(200110232);
if (target_info.system<>system_i386_watcom) then
tprocdef(pd).setmangledname(lower(tprocdef(pd).procsym.name));
{ check C cdecl para types }
pd.parast.foreach_static(@check_c_para,nil);
end;
pocall_far16 :
begin
@ -1898,12 +1954,6 @@ const
{ Calculate parameter tlist }
pd.calcparas;
{ add mangledname to external list, must be done after pd.calcparas }
if (pd.deftype=procdef) and
(po_external in pd.procoptions) and
target_info.DllScanSupported then
current_module.externals.insert(tExternalsItem.create(tprocdef(pd).mangledname));
end;
@ -2074,10 +2124,6 @@ const
else
if (pd.proccalloption=pocall_internproc) then
hd.proccalloption:=pd.proccalloption;
if (po_internconst in hd.procoptions) then
include(pd.procoptions,po_internconst)
else if (po_internconst in pd.procoptions) then
include(hd.procoptions,po_internconst);
{ Check calling convention }
if (hd.proccalloption<>pd.proccalloption) then
@ -2125,7 +2171,24 @@ const
{ This error is non-fatal, we can recover }
end;
{ Check manglednames }
{ Forward declaration is external? }
if (po_external in hd.procoptions) then
MessagePos(pd.fileinfo,parser_e_proc_already_external)
else
{ Body declaration is external? }
if (po_external in pd.procoptions) then
begin
{ Win32 supports declaration in interface and external in
implementation for dll imports. Support this for backwards
compatibility with Tp7 and Delphi }
if not(
(target_info.system in [system_i386_win32,system_i386_wdosx]) and
assigned(pd.import_dll)
) then
MessagePos(pd.fileinfo,parser_e_proc_no_external_allowed);
end;
{ Check parameters }
if (m_repeat_forward in aktmodeswitches) or
(pd.minparacount>0) then
begin
@ -2174,13 +2237,18 @@ const
hd.fileinfo:=pd.fileinfo;
if assigned(hd.funcretsym) then
hd.funcretsym.fileinfo:=pd.fileinfo;
{ update mangledname if the implementation has a fixed mangledname set }
if pd.has_mangledname then
begin
{ rename also asmsymbol first, because the name can already be used }
objectlibrary.renameasmsymbol(hd.mangledname,pd.mangledname);
hd.setmangledname(pd.mangledname);
end;
{ import names }
if assigned(pd.import_dll) then
begin
stringdispose(hd.import_dll);
hd.import_name:=stringdup(pd.import_dll^);
end;
if assigned(pd.import_name) then
begin
stringdispose(hd.import_name);
hd.import_name:=stringdup(pd.import_name^);
end;
hd.import_nr:=pd.import_nr;
{ for compilerproc defines we need to rename and update the
symbolname to lowercase }
if (pd.proccalloption=pocall_compilerproc) then
@ -2208,7 +2276,10 @@ const
if (po_abstractmethod in hd.procoptions) then
MessagePos(pd.fileinfo,parser_e_abstract_no_definition)
else
MessagePos(pd.fileinfo,parser_e_overloaded_have_same_parameters);
begin
MessagePos(pd.fileinfo,parser_e_overloaded_have_same_parameters);
aprocsym.write_parameter_lists(pd);
end;
end;
{ we found one proc with the same arguments, there are no others
@ -2257,7 +2328,11 @@ const
end.
{
$Log$
Revision 1.207 2004-11-16 22:09:57 peter
Revision 1.208 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.207 2004/11/16 22:09:57 peter
* _mangledname for symbols moved only to symbols that really need it
* overload number removed, add function result type to the mangledname fo
procdefs

View File

@ -2468,6 +2468,7 @@ implementation
var
p:tnode;
begin
result:=0;
p:=comp_expr(true);
if not codegenerror then
begin
@ -2475,7 +2476,7 @@ implementation
not(is_integer(p.resulttype.def)) then
Message(parser_e_illegal_expression)
else
get_intconst:=tordconstnode(p).value;
result:=tordconstnode(p).value;
end;
p.free;
end;
@ -2504,7 +2505,11 @@ implementation
end.
{
$Log$
Revision 1.172 2004-11-15 23:35:31 peter
Revision 1.173 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.172 2004/11/15 23:35:31 peter
* tparaitem removed, use tparavarsym instead
* parameter order is now calculated from paranr value in tparavarsym

View File

@ -92,7 +92,7 @@ implementation
pass_2,
{$endif}
{ parser }
scanner,
scanner,import,gendef,
pbase,pstatmnt,pdecl,pdecsub,pexports,
{ codegen }
tgobj,cgobj,
@ -1201,6 +1201,9 @@ implementation
end;
end;
{ Set mangled name }
proc_set_mangledname(pd);
{ compile procedure when a body is needed }
if (pd_body in pdflags) then
begin
@ -1215,6 +1218,15 @@ implementation
{ Insert mangledname }
pd.aliasnames.insert(pd.mangledname);
{ Handle Export of this procedure }
if (po_exports in pd.procoptions) and
(target_info.system in [system_i386_os2,system_i386_emx]) then
begin
pd.aliasnames.insert(pd.procsym.realname);
if cs_link_deffile in aktglobalswitches then
deffile.AddExport(pd.mangledname);
end;
{ Insert result variables in the localst }
insert_funcret_local(pd);
@ -1264,6 +1276,34 @@ implementation
current_procinfo.free;
consume(_SEMICOLON);
end
else
begin
{ Handle imports }
if (po_external in pd.procoptions) then
begin
{ Import DLL specified? }
if assigned(pd.import_dll) then
begin
{ create importlib if not already done }
if not(current_module.uses_imports) then
begin
current_module.uses_imports:=true;
importlib.preparelib(current_module.modulename^);
end;
if assigned(pd.import_name) then
importlib.importprocedure(pd,pd.import_dll^,pd.import_nr,pd.import_name^)
else
importlib.importprocedure(pd,pd.import_dll^,pd.import_nr,'');
end
else
begin
{ add mangledname to external list for DLL scanning }
if target_info.DllScanSupported then
current_module.externals.insert(tExternalsItem.create(pd.mangledname));
end;
end;
end;
{ Restore old state }
@ -1398,7 +1438,11 @@ implementation
end.
{
$Log$
Revision 1.216 2004-11-16 20:32:41 peter
Revision 1.217 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.216 2004/11/16 20:32:41 peter
* fixes for win32 mangledname
Revision 1.215 2004/11/15 23:35:31 peter

View File

@ -244,7 +244,10 @@ type
conventions like that one of MorphOS }
po_explicitparaloc,
{ no stackframe will be generated, used by lowlevel assembler like get_frame }
po_nostackframe
po_nostackframe,
po_has_mangledname,
po_has_public_name,
po_forward
);
tprocoptions=set of tprocoption;
@ -302,7 +305,8 @@ type
vo_is_loop_counter, { used to detect assignments to loop counter }
vo_is_hidden_para,
vo_has_explicit_paraloc,
vo_is_syscall_lib
vo_is_syscall_lib,
vo_has_mangledname
);
tvaroptions=set of tvaroption;
@ -423,7 +427,11 @@ initialization
end.
{
$Log$
Revision 1.93 2004-11-15 23:35:31 peter
Revision 1.94 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.93 2004/11/15 23:35:31 peter
* tparaitem removed, use tparavarsym instead
* parameter order is now calculated from paranr value in tparavarsym

View File

@ -562,8 +562,10 @@ interface
interfacedef : boolean;
{ true if the procedure has a forward declaration }
hasforward : boolean;
{ check the problems of manglednames }
has_mangledname : boolean;
{ import info }
import_dll,
import_name : pstring;
import_nr : word;
{ info for inlining the subroutine, if this pointer is nil,
the procedure can't be inlined }
inlininginfo : pinlininginfo;
@ -3586,7 +3588,6 @@ implementation
begin
inherited create(level);
deftype:=procdef;
has_mangledname:=false;
_mangledname:=nil;
fileinfo:=aktfilepos;
extnumber:=$ffff;
@ -3606,7 +3607,9 @@ implementation
interfacedef:=false;
hasforward:=false;
_class := nil;
import_dll:=nil;
import_name:=nil;
import_nr:=0;
new(inlininginfo);
fillchar(inlininginfo^,sizeof(tinlininginfo),0);
{$ifdef GDB}
@ -3622,8 +3625,7 @@ implementation
inherited ppuload(ppufile);
deftype:=procdef;
has_mangledname:=boolean(ppufile.getbyte);
if has_mangledname then
if po_has_mangledname in procoptions then
_mangledname:=stringdup(ppufile.getstring)
else
_mangledname:=nil;
@ -3637,6 +3639,10 @@ implementation
{ library symbol for AmigaOS/MorphOS }
ppufile.getderef(libsymderef);
{$endif powerpc}
{ import stuff }
import_dll:=nil;
import_name:=nil;
import_nr:=0;
{ inline stuff }
if proccalloption=pocall_inline then
begin
@ -3647,7 +3653,6 @@ implementation
end
else
funcretsym:=nil;
{ load para symtable }
parast:=tparasymtable.create(level);
tparasymtable(parast).ppuload(ppufile);
@ -3662,13 +3667,11 @@ implementation
end
else
localst:=nil;
{ inline stuff }
if proccalloption=pocall_inline then
inlininginfo^.code:=ppuloadnodetree(ppufile)
else
inlininginfo := nil;
{ default values for no persistent data }
if (cs_link_deffile in aktglobalswitches) and
(tf_need_export in target_info.flags) and
@ -3716,6 +3719,8 @@ implementation
memprocnodetree.start;
{$endif MEMDEBUG}
end;
stringdispose(import_dll);
stringdispose(import_name);
if assigned(inlininginfo) then
dispose(inlininginfo);
if (po_msgstr in procoptions) then
@ -3753,8 +3758,7 @@ implementation
oldintfcrc:=ppufile.do_interface_crc;
ppufile.do_interface_crc:=false;
ppufile.do_interface_crc:=oldintfcrc;
ppufile.putbyte(byte(has_mangledname));
if has_mangledname then
if po_has_mangledname in procoptions then
ppufile.putstring(_mangledname^);
ppufile.putword(extnumber);
ppufile.putbyte(parast.symtablelevel);
@ -4364,13 +4368,17 @@ implementation
procedure tprocdef.setmangledname(const s : string);
begin
stringdispose(_mangledname);
{ This is not allowed anymore, the forward declaration
already needs to create the correct mangledname, no changes
afterwards are allowed (PFV) }
if assigned(_mangledname) then
internalerror(200411171);
{$ifdef compress}
_mangledname:=stringdup(minilzw_encode(s));
{$else}
_mangledname:=stringdup(s);
{$endif}
has_mangledname:=true;
include(procoptions,po_has_mangledname);
end;
@ -6126,7 +6134,11 @@ implementation
end.
{
$Log$
Revision 1.272 2004-11-16 22:09:57 peter
Revision 1.273 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.272 2004/11/16 22:09:57 peter
* _mangledname for symbols moved only to symbols that really need it
* overload number removed, add function result type to the mangledname fo
procdefs

View File

@ -218,7 +218,6 @@ interface
private
_mangledname : pstring;
public
has_mangledname : boolean;
constructor create(const n : string;vsp:tvarspez;const tt : ttype);
constructor create_dll(const n : string;vsp:tvarspez;const tt : ttype);
constructor create_C(const n,mangled : string;vsp:tvarspez;const tt : ttype);
@ -233,8 +232,6 @@ interface
end;
tabsolutevarsym = class(tabstractvarsym)
private
_mangledname : pstring;
public
abstyp : absolutetyp;
{$ifdef i386}
@ -1537,8 +1534,7 @@ implementation
begin
inherited ppuload(ppufile);
typ:=globalvarsym;
has_mangledname:=boolean(ppufile.getbyte);
if has_mangledname then
if vo_has_mangledname in varoptions then
_mangledname:=stringdup(ppufile.getstring)
else
_mangledname:=nil;
@ -1564,8 +1560,7 @@ implementation
procedure tglobalvarsym.ppuwrite(ppufile:tcompilerppufile);
begin
inherited ppuwrite(ppufile);
ppufile.putbyte(byte(has_mangledname));
if has_mangledname then
if vo_has_mangledname in varoptions then
ppufile.putstring(_mangledname^);
ppufile.writeentry(ibglobalvarsym);
end;
@ -1593,7 +1588,7 @@ implementation
{$else}
_mangledname:=stringdup(s);
{$endif}
has_mangledname:=true;
include(varoptions,vo_has_mangledname);
end;
@ -2560,7 +2555,11 @@ implementation
end.
{
$Log$
Revision 1.193 2004-11-16 22:09:57 peter
Revision 1.194 2004-11-17 22:21:35 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.193 2004/11/16 22:09:57 peter
* _mangledname for symbols moved only to symbols that really need it
* overload number removed, add function result type to the mangledname fo
procdefs

View File

@ -41,7 +41,7 @@ implementation
strings,
dos,
cutils,cclasses,
globtype,comphook,systems,symsym,symdef,
globtype,comphook,systems,symconst,symsym,symdef,
globals,verbose,fmodule,script,
import,link,i_emx,ppu;
@ -291,7 +291,7 @@ var tmp1,tmp2,tmp3:string;
func : string;
begin
{ force the current mangledname }
aprocdef.has_mangledname:=true;
include(aprocdef.procoptions,po_has_mangledname);
func:=aprocdef.mangledname;
aout_init;
@ -513,7 +513,11 @@ initialization
end.
{
$Log$
Revision 1.10 2004-10-25 15:38:41 peter
Revision 1.11 2004-11-17 22:22:12 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.10 2004/10/25 15:38:41 peter
* heap and heapsize removed
* checkpointer fixes

View File

@ -82,13 +82,6 @@ procedure timportliblinux.importprocedure(aprocdef:tprocdef;const module:string;
begin
{ insert sharedlibrary }
current_module.linkothersharedlibs.add(SplitName(module),link_allways);
{ do nothing with the procedure, only set the mangledname }
if name<>'' then
begin
aprocdef.setmangledname(name);
end
else
message(parser_e_empty_import_name);
end;
@ -284,12 +277,10 @@ Var
s,s1,s2 : string;
found1,
found2,
linkdynamic,
linklibc : boolean;
begin
WriteResponseFile:=False;
{ set special options for some targets }
linkdynamic:=not(SharedLibFiles.empty);
linklibc:=(SharedLibFiles.Find('c')<>nil);
if isdll then
begin
@ -398,7 +389,6 @@ begin
else
begin
linklibc:=true;
linkdynamic:=false; { libc will include the ld-linux for us }
end;
end;
{ be sure that libc is the last lib }
@ -407,10 +397,6 @@ begin
{ when we have -static for the linker the we also need libgcc }
if (cs_link_staticflag in aktglobalswitches) then
LinkRes.Add('-lgcc');
{ the dyn. linker should be passed only with -dynamic-linker to ld
if linkdynamic and (Info.DynamicLinker<>'') then
LinkRes.AddFileName(Info.DynamicLinker);
}
LinkRes.Add(')');
end;
@ -592,7 +578,11 @@ end.
{
$Log$
Revision 1.29 2004-11-08 22:09:59 peter
Revision 1.30 2004-11-17 22:22:12 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.29 2004/11/08 22:09:59 peter
* tvarsym splitted
Revision 1.28 2004/11/05 12:27:27 florian

View File

@ -41,7 +41,7 @@ implementation
strings,
dos,
cutils,cclasses,
globtype,comphook,systems,symsym,symdef,
globtype,comphook,systems,symconst,symsym,symdef,
globals,verbose,fmodule,script,
import,link,i_os2,ppu;
@ -291,7 +291,7 @@ var tmp1,tmp2,tmp3:string;
func : string;
begin
{ force the current mangledname }
aprocdef.has_mangledname:=true;
include(aprocdef.procoptions,po_has_mangledname);
func:=aprocdef.mangledname;
aout_init;
@ -513,7 +513,11 @@ initialization
end.
{
$Log$
Revision 1.14 2004-10-25 15:38:41 peter
Revision 1.15 2004-11-17 22:22:12 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.14 2004/10/25 15:38:41 peter
* heap and heapsize removed
* checkpointer fixes

View File

@ -141,13 +141,13 @@ implementation
current_module.imports.concat(hp1);
end;
{ search for reuse of old import item }
if assigned(aprocdef) then
if name<>'' then
begin
hp2:=twin32imported_item(hp1.imported_items.first);
while assigned(hp2) do
begin
if hp2.procdef=aprocdef then
break;
if (hp2.name^=name) then
break;
hp2:=twin32imported_item(hp2.next);
end;
end
@ -156,8 +156,8 @@ implementation
hp2:=twin32imported_item(hp1.imported_items.first);
while assigned(hp2) do
begin
if hp2.func^=func then
break;
if (hp2.ordnr=index) then
break;
hp2:=twin32imported_item(hp2.next);
end;
end;
@ -1623,7 +1623,11 @@ initialization
end.
{
$Log$
Revision 1.43 2004-11-16 20:32:41 peter
Revision 1.44 2004-11-17 22:22:12 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.43 2004/11/16 20:32:41 peter
* fixes for win32 mangledname
Revision 1.42 2004/11/08 22:09:59 peter

View File

@ -810,7 +810,6 @@ type
po_msgint, { method for int message handling }
po_exports, { Procedure has export directive (needed for OS/2) }
po_external, { Procedure is external (in other object or lib)}
po_saveregisters, { save all registers }
po_overload, { procedure is declared with overload directive }
po_varargs, { printf like arguments }
po_internconst, { procedure has constant evaluator intern }
@ -827,8 +826,9 @@ type
po_explicitparaloc,
{ no stackframe will be generated, used by lowlevel assembler like get_frame }
po_nostackframe,
{ localst is valid }
po_haslocalst
po_has_mangledname,
po_has_public_name,
po_forward
);
tprocoptions=set of tprocoption;
procedure read_abstract_proc_def(var proccalloption:tproccalloption;var procoptions:tprocoptions);
@ -870,7 +870,7 @@ const
(mask:potype_destructor; str:'Destructor'),
(mask:potype_operator; str:'Operator')
);
procopts=24;
procopts=25;
procopt : array[1..procopts] of tprocopt=(
(mask:po_classmethod; str:'ClassMethod'),
(mask:po_virtualmethod; str:'VirtualMethod'),
@ -885,7 +885,6 @@ const
(mask:po_msgint; str:'MsgInt'),
(mask:po_exports; str:'Exports'),
(mask:po_external; str:'External'),
(mask:po_saveregisters; str:'SaveRegisters'),
(mask:po_overload; str:'Overload'),
(mask:po_varargs; str:'VarArgs'),
(mask:po_internconst; str:'InternConst'),
@ -895,7 +894,9 @@ const
(mask:po_reintroduce; str:'ReIntroduce'),
(mask:po_explicitparaloc; str:'ExplicitParaloc'),
(mask:po_nostackframe; str:'NoStackFrame'),
(mask:po_haslocalst; str:'HasLocalst')
(mask:po_has_mangledname; str:'HasMangledName'),
(mask:po_has_public_name; str:'HasPublicName'),
(mask:po_forward; str:'Forward')
);
var
proctypeoption : tproctypeoption;
@ -960,7 +961,9 @@ type
vo_is_parentfp,
vo_is_loop_counter, { used to detect assignments to loop counter }
vo_is_hidden_para,
vo_has_explicit_paraloc
vo_has_explicit_paraloc,
vo_is_syscall_lib,
vo_has_mangledname
);
tvaroptions=set of tvaroption;
{ register variable }
@ -976,7 +979,7 @@ type
str : string[30];
end;
const
varopts=16;
varopts=18;
varopt : array[1..varopts] of tvaropt=(
(mask:vo_is_C_var; str:'CVar'),
(mask:vo_is_external; str:'External'),
@ -993,7 +996,9 @@ const
(mask:vo_is_parentfp; str:'ParentFP'),
(mask:vo_is_loop_counter; str:'LoopCounter'),
(mask:vo_is_hidden_para; str:'Hidden'),
(mask:vo_has_explicit_paraloc;str:'ExplicitParaloc')
(mask:vo_has_explicit_paraloc;str:'ExplicitParaloc'),
(mask:vo_is_syscall_lib; str:'SysCallLib'),
(mask:vo_has_mangledname; str:'HasMangledName')
);
var
i : longint;
@ -1225,7 +1230,7 @@ begin
readabstractvarsym('Global Variable symbol ',varoptions);
write (space,' DefaultConst : ');
readderef;
if (vo_is_C_var in varoptions) then
if (vo_has_mangledname in varoptions) then
writeln(space,' Mangledname : ',getstring);
end;
@ -1435,7 +1440,7 @@ begin
begin
readcommondef('Procedure definition');
read_abstract_proc_def(calloption,procoptions);
if (getbyte<>0) then
if (po_has_mangledname in procoptions) then
writeln(space,' Mangled name : ',getstring);
writeln(space,' Overload Number : ',getword);
writeln(space,' Number : ',getword);
@ -1469,8 +1474,7 @@ begin
readdefinitions('parast',false);
readsymbols('parast');
{ localst }
if (po_haslocalst in procoptions) or
(calloption = pocall_inline) then
if (calloption = pocall_inline) then
begin
readdefinitions('localst',false);
readsymbols('localst');
@ -2083,7 +2087,11 @@ begin
end.
{
$Log$
Revision 1.60 2004-11-16 20:49:08 peter
Revision 1.61 2004-11-17 22:22:12 peter
mangledname setting moved to place after the complete proc declaration is read
import generation moved to place where body is also parsed (still gives problems with win32)
Revision 1.60 2004/11/16 20:49:08 peter
* fixed rangecheck error with derefdata
Revision 1.59 2004/11/15 23:35:31 peter