From 0cfc6e1cacac24154bce0bf9654b0b1e8304bcda Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Sat, 13 Mar 2010 22:13:20 +0000 Subject: [PATCH] + support for "univ" in macpas mode: a parameter modifier that allows passing any value to that parameter which has the same size as the parameter (it basically acts as if there is an explicit type conversion to the parameter type around the value at the caller side). If a procvar has an univ parameter, all procvars whose corresponding parameter has the same size as that univ parameter are similarly compatible. This transparent compatibility can however cause crashes in case of of the procvars when one of the types is passed on the stack and the other isn't (because then the called routine will a) load the parameter from a wrong location and b) pop the wrong amount off of the stack at then end). Therefore FPC will warn in most cases where this can happen. (mantis #15777) git-svn-id: trunk@15010 - --- .gitattributes | 4 + compiler/defcmp.pas | 94 ++++- compiler/defutil.pas | 13 + compiler/htypechk.pas | 15 +- compiler/msg/errore.msg | 35 +- compiler/msgidx.inc | 6 +- compiler/msgtxt.inc | 793 ++++++++++++++++++++------------------- compiler/ncal.pas | 30 +- compiler/ncnv.pas | 51 +-- compiler/nobj.pas | 6 +- compiler/pdecsub.pas | 20 +- compiler/ppu.pas | 2 +- compiler/symdef.pas | 2 + compiler/symsym.pas | 8 +- tests/webtbf/tw15777b.pp | 119 ++++++ tests/webtbs/tw15777a.pp | 27 ++ tests/webtbs/tw15777c.pp | 163 ++++++++ tests/webtbs/tw15777d.pp | 80 ++++ 18 files changed, 1018 insertions(+), 450 deletions(-) create mode 100644 tests/webtbf/tw15777b.pp create mode 100644 tests/webtbs/tw15777a.pp create mode 100644 tests/webtbs/tw15777c.pp create mode 100644 tests/webtbs/tw15777d.pp diff --git a/.gitattributes b/.gitattributes index 8423f1337a..000f77e3d6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9641,6 +9641,7 @@ tests/webtbf/tw15447.pp svneol=native#text/plain tests/webtbf/tw15594a.pp svneol=native#text/plain tests/webtbf/tw15594b.pp svneol=native#text/plain tests/webtbf/tw15727b.pp svneol=native#text/plain +tests/webtbf/tw15777b.pp svneol=native#text/plain tests/webtbf/tw1599.pp svneol=native#text/plain tests/webtbf/tw1599b.pp svneol=native#text/plain tests/webtbf/tw1633.pp svneol=native#text/plain @@ -10303,6 +10304,9 @@ tests/webtbs/tw15694.pp svneol=native#text/plain tests/webtbs/tw15727a.pp svneol=native#text/plain tests/webtbs/tw15728.pp svneol=native#text/plain tests/webtbs/tw1573.pp svneol=native#text/plain +tests/webtbs/tw15777a.pp svneol=native#text/plain +tests/webtbs/tw15777c.pp svneol=native#text/plain +tests/webtbs/tw15777d.pp svneol=native#text/plain tests/webtbs/tw15812.pp svneol=native#text/plain tests/webtbs/tw1592.pp svneol=native#text/plain tests/webtbs/tw1617.pp svneol=native#text/plain diff --git a/compiler/defcmp.pas b/compiler/defcmp.pas index 2db807bd98..3701b8ebd0 100644 --- a/compiler/defcmp.pas +++ b/compiler/defcmp.pas @@ -34,10 +34,10 @@ interface type { if acp is cp_all the var const or nothing are considered equal } tcompare_paras_type = ( cp_none, cp_value_equal_const, cp_all,cp_procvar); - tcompare_paras_option = (cpo_allowdefaults,cpo_ignorehidden,cpo_allowconvert,cpo_comparedefaultvalue,cpo_openequalisexact); + tcompare_paras_option = (cpo_allowdefaults,cpo_ignorehidden,cpo_allowconvert,cpo_comparedefaultvalue,cpo_openequalisexact,cpo_ignoreuniv,cpo_warn_incompatible_univ); tcompare_paras_options = set of tcompare_paras_option; - tcompare_defs_option = (cdo_internal,cdo_explicit,cdo_check_operator,cdo_allow_variant,cdo_parameter); + tcompare_defs_option = (cdo_internal,cdo_explicit,cdo_check_operator,cdo_allow_variant,cdo_parameter,cdo_warn_incompatible_univ); tcompare_defs_options = set of tcompare_defs_option; tconverttype = (tc_none, @@ -100,10 +100,13 @@ interface function is_subequal(def1, def2: tdef): boolean; {# true, if two parameter lists are equal - if acp is cp_none, all have to match exactly + if acp is cp_all, all have to match exactly if acp is cp_value_equal_const call by value and call by const parameter are assumed as equal + if acp is cp_procvar then the varspez have to match, + and all parameter types must be at least te_equal + if acp is cp_none, then we don't check the varspez at all allowdefaults indicates if default value parameters are allowed (in this case, the search order will first search for a routine with default parameters, before @@ -114,7 +117,7 @@ interface { True if a function can be assigned to a procvar } { changed first argument type to pabstractprocdef so that it can also be } { used to test compatibility between two pprocvardefs (JM) } - function proc_to_procvar_equal(def1:tabstractprocdef;def2:tprocvardef):tequaltype; + function proc_to_procvar_equal(def1:tabstractprocdef;def2:tprocvardef;checkincompatibleuniv: boolean):tequaltype; { Parentdef is the definition of a method defined in a parent class or interface } { Childdef is the definition of a method defined in a child class, interface or } @@ -1186,7 +1189,7 @@ implementation if (m_tp_procvar in current_settings.modeswitches) or (m_mac_procvar in current_settings.modeswitches) then begin - subeq:=proc_to_procvar_equal(tprocdef(def_from),tprocvardef(def_to)); + subeq:=proc_to_procvar_equal(tprocdef(def_from),tprocvardef(def_to),cdo_warn_incompatible_univ in cdoptions); if subeq>te_incompatible then begin doconv:=tc_proc_2_procvar; @@ -1197,7 +1200,7 @@ implementation procvardef : begin { procvar -> procvar } - eq:=proc_to_procvar_equal(tprocvardef(def_from),tprocvardef(def_to)); + eq:=proc_to_procvar_equal(tprocvardef(def_from),tprocvardef(def_to),cdo_warn_incompatible_univ in cdoptions); end; pointerdef : begin @@ -1533,6 +1536,39 @@ implementation end; + function potentially_incompatible_univ_paras(def1, def2: tdef): boolean; + begin + result := + { not entirely safe: different records can be passed differently + depending on the types of their fields, but they're hard to compare + (variant records, bitpacked vs non-bitpacked) } + ((def1.typ in [floatdef,recorddef,arraydef,filedef,variantdef]) and + (def1.typ<>def2.typ)) or + { pointers, ordinals and small sets are all passed the same} + (((def1.typ in [orddef,enumdef,pointerdef,procvardef,classrefdef]) or + (is_class_or_interface_or_objc(def1)) or + is_dynamic_array(def1) or + is_smallset(def1) or + is_ansistring(def1) or + is_unicodestring(def1)) <> + (def2.typ in [orddef,enumdef,pointerdef,procvardef,classrefdef]) or + (is_class_or_interface_or_objc(def2)) or + is_dynamic_array(def2) or + is_smallset(def2) or + is_ansistring(def2) or + is_unicodestring(def2)) or + { shortstrings } + (is_shortstring(def1)<> + is_shortstring(def2)) or + { winlike widestrings } + (is_widestring(def1)<> + is_widestring(def2)) or + { TP-style objects } + (is_object(def1) <> + is_object(def2)); + end; + + function compare_paras(para1,para2 : TFPObjectList; acp : tcompare_paras_type; cpoptions: tcompare_paras_options):tequaltype; var currpara1, @@ -1594,6 +1630,10 @@ implementation case acp of cp_value_equal_const : begin + { this one is used for matching parameters from a call + statement to a procdef -> univ state can't be equal + in any case since the call statement does not contain + any information about that } if ( (currpara1.varspez<>currpara2.varspez) and ((currpara1.varspez in [vs_var,vs_out]) or @@ -1605,7 +1645,10 @@ implementation end; cp_all : begin - if (currpara1.varspez<>currpara2.varspez) then + { used to resolve forward definitions -> headers must + match exactly, including the "univ" specifier } + if (currpara1.varspez<>currpara2.varspez) or + (currpara1.univpara<>currpara2.univpara) then exit; eq:=compare_defs_ext(currpara1.vardef,currpara2.vardef,nothingn, convtype,hpd,cdoptions); @@ -1614,6 +1657,10 @@ implementation begin if (currpara1.varspez<>currpara2.varspez) then exit; + { "univ" state doesn't matter here: from univ to non-univ + matches if the types are compatible (i.e., as usual), + from from non-univ to univ also matches if the types + have the same size (checked below) } eq:=compare_defs_ext(currpara1.vardef,currpara2.vardef,nothingn, convtype,hpd,cdoptions); { Parameters must be at least equal otherwise the are incompatible } @@ -1627,7 +1674,30 @@ implementation end; { check type } if eq=te_incompatible then - exit; + begin + { special case: "univ" parameters match if their size is equal } + if not(cpo_ignoreuniv in cpoptions) and + currpara2.univpara and + is_valid_univ_para_type(currpara1.vardef) and + (currpara1.vardef.size=currpara2.vardef.size) then + begin + { only pick as last choice } + eq:=te_convert_l5; + if (acp=cp_procvar) and + (cpo_warn_incompatible_univ in cpoptions) then + begin + { if the types may be passed in different ways by the + calling convention then this can lead to crashes + (note: not an exhaustive check, and failing this + this check does not mean things will crash on all + platforms) } + if potentially_incompatible_univ_paras(currpara1.vardef,currpara2.vardef) then + Message2(type_w_procvar_univ_conflicting_para,currpara1.vardef.typename,currpara2.vardef.typename) + end; + end + else + exit; + end; { open strings can never match exactly, since you cannot define } { a separate "open string" type -> we have to be able to } { consider those as exact when resolving forward definitions. } @@ -1676,10 +1746,11 @@ implementation end; - function proc_to_procvar_equal(def1:tabstractprocdef;def2:tprocvardef):tequaltype; + function proc_to_procvar_equal(def1:tabstractprocdef;def2:tprocvardef; checkincompatibleuniv: boolean):tequaltype; var eq : tequaltype; po_comp : tprocoptions; + pa_comp: tcompare_paras_options; begin proc_to_procvar_equal:=te_incompatible; if not(assigned(def1)) or not(assigned(def2)) then @@ -1688,6 +1759,9 @@ implementation if (def1.is_methodpointer xor def2.is_methodpointer) or (def1.is_addressonly xor def2.is_addressonly) then exit; + pa_comp:=[]; + if checkincompatibleuniv then + include(pa_comp,cpo_warn_incompatible_univ); { check return value and options, methodpointer is already checked } po_comp:=[po_staticmethod,po_interrupt, po_iocheck,po_varargs]; @@ -1700,7 +1774,7 @@ implementation { return equal type based on the parameters, but a proc->procvar is never exact, so map an exact match of the parameters to te_equal } - eq:=compare_paras(def1.paras,def2.paras,cp_procvar,[]); + eq:=compare_paras(def1.paras,def2.paras,cp_procvar,pa_comp); if eq=te_exact then eq:=te_equal; proc_to_procvar_equal:=eq; diff --git a/compiler/defutil.pas b/compiler/defutil.pas index fae218a164..09f3ca404f 100644 --- a/compiler/defutil.pas +++ b/compiler/defutil.pas @@ -254,6 +254,10 @@ interface signdness, the result will also get that signdness } function get_common_intdef(ld, rd: torddef; keep_sign_if_equal: boolean): torddef; + { # returns whether the type is potentially a valid type of/for an "univ" parameter + (basically: it must have a compile-time size) } + function is_valid_univ_para_type(def: tdef): boolean; + implementation uses @@ -1107,4 +1111,13 @@ implementation end; end; + + function is_valid_univ_para_type(def: tdef): boolean; + begin + result:= + not is_open_array(def) and + not is_void(def) and + (def.typ<>formaldef); + end; + end. diff --git a/compiler/htypechk.pas b/compiler/htypechk.pas index ae4f2510e2..0546b85e61 100644 --- a/compiler/htypechk.pas +++ b/compiler/htypechk.pas @@ -1590,7 +1590,7 @@ implementation if ((m_tp_procvar in current_settings.modeswitches) or (m_mac_procvar in current_settings.modeswitches)) and (p.left.nodetype=calln) and - (proc_to_procvar_equal(tprocdef(tcallnode(p.left).procdefinition),tprocvardef(def_to))>=te_equal) then + (proc_to_procvar_equal(tprocdef(tcallnode(p.left).procdefinition),tprocvardef(def_to),false)>=te_equal) then eq:=te_equal else if (m_mac_procvar in current_settings.modeswitches) and @@ -1615,7 +1615,7 @@ implementation (eq<>te_incompatible) do begin if (acn.left.nodetype=calln) then - tmpeq:=proc_to_procvar_equal(tprocdef(tcallnode(acn.left).procdefinition),tprocvardef(tarraydef(def_to).elementdef)) + tmpeq:=proc_to_procvar_equal(tprocdef(tcallnode(acn.left).procdefinition),tprocvardef(tarraydef(def_to).elementdef),false) else tmpeq:=compare_defs(acn.left.resultdef,tarraydef(def_to).elementdef,acn.left.nodetype); if tmpeqcurrpt) and (eq=te_exact) then diff --git a/compiler/msg/errore.msg b/compiler/msg/errore.msg index b63351f026..c29bce1a97 100644 --- a/compiler/msg/errore.msg +++ b/compiler/msg/errore.msg @@ -368,7 +368,7 @@ scanner_w_illegal_warn_identifier=02087_W_Illegal identifier "$1" for $WARN dire # # Parser # -# 03284 is the last used one +# 03287 is the last used one # % \section{Parser messages} % This section lists all parser messages. The parser takes care of the @@ -1293,11 +1293,14 @@ parser_e_more_array_elements_expected=03285_E_Expected another $1 array elements parser_e_string_const_too_long=03286_E_String constant too long while ansistrings are disabled % Only when a piece of code is compiled with ansistrings enabled (\var{\{\$H+\}}), string constants % longer than 255 characters are allowed. +parser_e_invalid_univ_para=03287_E_Type cannot be used as univ parameter because its size is unknown at compile time: "$1" +% \var{univ} parameters are compatible with all values of the same size, but this +% cannot be checked in case a parameter's size is unknown at compile time. % \end{description} # # Type Checking # -# 04094 is the last used one +# 04095 is the last used one # % \section{Type checking errors} % This section lists all errors that can occur when type checking is @@ -1613,8 +1616,32 @@ type_e_objc_type_unsupported=04092_E_The type "$1" is not supported for interact type_e_class_or_objcclass_type_expected=04093_E_Class or objcclass type expected, but got "$1" % It is only possible to create class reference types of \var{class} and \var{objcclass} type_e_objcclass_type_expected=04094_E_Objcclass type expected -% The compiler expected an Objc -% \var{objcclass} types +% The compiler expected an \var{objcclass} type +type_w_procvar_univ_conflicting_para=04095_W_Coerced univ parameter type in procedural variable may cause crash or memory corruption: $1 to $2 +% \var{univ} parameters are implicitly compatible with all types of the same size, +% also in procedural variable definitions. That means that the following code is +% legal, because \var{single} and \var{longint} have the same size: +% \begin{verbatim} +% {$mode macpas} +% Type +% TIntProc = procedure (l: univ longint); +% +% procedure test(s: single); +% begin +% writeln(s); +% end; +% +% var +% p: TIntProc; +% begin +% p:=test; +% p(4); +% end. +% \end{verbatim} +% This code may however crash on platforms that pass integers in registers and +% floating point values on the stack, because then the stack will be unbalanced. +% Note that this warning will not flagg all potentially dangerous situations. +% when \var{test} returns. % % \end{description} # diff --git a/compiler/msgidx.inc b/compiler/msgidx.inc index c38391c2f2..9fe129b776 100644 --- a/compiler/msgidx.inc +++ b/compiler/msgidx.inc @@ -375,6 +375,7 @@ const parser_e_operator_not_overloaded_3=03284; parser_e_more_array_elements_expected=03285; parser_e_string_const_too_long=03286; + parser_e_invalid_univ_para=03287; type_e_mismatch=04000; type_e_incompatible_types=04001; type_e_not_equal_types=04002; @@ -460,6 +461,7 @@ const type_e_objc_type_unsupported=04092; type_e_class_or_objcclass_type_expected=04093; type_e_objcclass_type_expected=04094; + type_w_procvar_univ_conflicting_para=04095; sym_e_id_not_found=05000; sym_f_internal_error_in_symtablestack=05001; sym_e_duplicate_id=05002; @@ -852,9 +854,9 @@ const option_info=11024; option_help_pages=11025; - MsgTxtSize = 55890; + MsgTxtSize = 56081; MsgIdxMax : array[1..20] of longint=( - 24,88,287,95,80,51,110,22,202,63, + 24,88,288,96,80,51,110,22,202,63, 49,20,1,1,1,1,1,1,1,1 ); diff --git a/compiler/msgtxt.inc b/compiler/msgtxt.inc index 59673ecda5..6355a67157 100644 --- a/compiler/msgtxt.inc +++ b/compiler/msgtxt.inc @@ -1,7 +1,7 @@ {$ifdef Delphi} -const msgtxt : array[0..000232] of string[240]=( +const msgtxt : array[0..000233] of string[240]=( {$else Delphi} -const msgtxt : array[0..000232,1..240] of char=( +const msgtxt : array[0..000233,1..240] of char=( {$endif Delphi} '01000_T_Compiler: $1'#000+ '01001_D_Compiler OS: $1'#000+ @@ -145,856 +145,861 @@ const msgtxt : array[0..000232,1..240] of char=( '03030_E_function header "$1" doesn'#039't match forward : var name chan'+ 'ges $2 => $3'#000+ '03031_N_Values in enumeration types have to be ascending'#000+ - '03033_E_With can not be used for variables in a different segment'#000+ - '03034_E_function',' nesting > 31'#000+ + '03033_E_With cannot be used for variables in a different segment'#000+ + '03034_E_function ','nesting > 31'#000+ '03035_E_range check error while evaluating constants'#000+ '03036_W_range check error while evaluating constants'#000+ '03037_E_duplicate case label'#000+ '03038_E_Upper bound of case range is less than lower bound'#000+ - '03039_E_typed constants of class','es or interfaces are not allowed'#000+ + '03039_E_typed constants of classe','s or interfaces are not allowed'#000+ '03040_E_functions variables of overloaded functions are not allowed'#000+ '03041_E_string length must be a value from 1 to 255'#000+ '03042_W_use extended syntax of NEW and DISPOSE for instances of object'+ 's'#000+ - '03043_W_use of ','NEW or DISPOSE for untyped pointers is meaningless'#000+ + '03043_W_use of N','EW or DISPOSE for untyped pointers is meaningless'#000+ '03044_E_use of NEW or DISPOSE is not possible for untyped pointers'#000+ '03045_E_class identifier expected'#000+ '03046_E_type identifier not allowed here'#000+ '03047_E_method identifier expected'#000+ - '03048_E_func','tion header doesn'#039't match any method of this class "'+ + '03048_E_funct','ion header doesn'#039't match any method of this class "'+ '$1"'#000+ '03049_DL_procedure/function $1'#000+ '03050_E_Illegal floating point constant'#000+ '03051_E_FAIL can be used in constructors only'#000+ '03052_E_Destructors can'#039't have parameters'#000+ - '03053_E_Only class method','s, class properties and class variables can'+ + '03053_E_Only class methods',', class properties and class variables can'+ ' be referred with class references'#000+ '03054_E_Only class class methods, class properties and class variables'+ ' can be accessed in class methods'#000+ '03055_E_Constant and CASE types do not match'#000+ - '03056_E_The s','ymbol can'#039't be exported from a library'#000+ + '03056_E_The sy','mbol can'#039't be exported from a library'#000+ '03057_W_An inherited method is hidden by "$1"'#000+ '03058_E_There is no method in an ancestor class to be overridden: "$1"'+ #000+ '03059_E_No member is provided to access property'#000+ - '03060_W_Stored property directive i','s not yet implemented'#000+ + '03060_W_Stored property directive is',' not yet implemented'#000+ '03061_E_Illegal symbol for property access'#000+ '03062_E_Cannot access a protected field of an object here'#000+ '03063_E_Cannot access a private field of an object here'#000+ - '03066_E_Overridden methods must have the same return type: "$','2" is o'+ + '03066_E_Overridden methods must have the same return type: "$2','" is o'+ 'verriden by "$1" which has another return type'#000+ '03067_E_EXPORT declared functions can'#039't be nested'#000+ '03068_E_Methods can'#039't be EXPORTed'#000+ '03069_E_Call by var for arg no. $1 has to match exactly: Got "$2" expe'+ 'cted "$3"'#000+ - '03070_E_Class isn'#039't a ','parent class of the current class'#000+ + '03070_E_Class isn'#039't a p','arent class of the current class'#000+ '03071_E_SELF is only allowed in methods'#000+ '03072_E_Methods can be only in other methods called direct with type i'+ 'dentifier of the class'#000+ '03073_E_Illegal use of '#039':'#039#000+ - '03074_E_range check error in set constructor o','r duplicate set elemen'+ + '03074_E_range check error in set constructor or',' duplicate set elemen'+ 't'#000+ '03075_E_Pointer to object expected'#000+ '03076_E_Expression must be constructor call'#000+ '03077_E_Expression must be destructor call'#000+ '03078_E_Illegal order of record elements'#000+ - '03079_E_Expression type must be class or record type'#000, - '03080_E_Procedures can'#039't return a value'#000+ + '03079_E_Expression type must be class or record type'#000+ + '0','3080_E_Procedures can'#039't return a value'#000+ '03081_E_constructors and destructors must be methods'#000+ '03082_E_Operator is not overloaded'#000+ '03083_E_Impossible to overload assignment for equal types'#000+ '03084_E_Impossible operator overload'#000+ - '03085_E_Re-raise ','isn'#039't possible there'#000+ + '03085_E_Re-raise i','sn'#039't possible there'#000+ '03086_E_The extended syntax of new or dispose isn'#039't allowed for a '+ 'class'#000+ '03088_E_Procedure overloading is switched off'#000+ '03089_E_It is not possible to overload this operator. Related overload'+ - 'able operators (if any) are: $1',#000+ + 'able operators (if any) are: $1'#000, '03090_E_Comparative operator must return a boolean value'#000+ '03091_E_Only virtual methods can be abstract'#000+ '03092_F_Use of unsupported feature!'#000+ '03093_E_The mix of different kind of objects (class, object, interface'+ ', etc) isn'#039't allowed'#000+ - '03094_W_Un','known procedure directive had to be ignored: "$1"'#000+ + '03094_W_Unk','nown procedure directive had to be ignored: "$1"'#000+ '03095_E_absolute can only be associated to one variable'#000+ '03096_E_absolute can only be associated with a var or const'#000+ '03097_E_Only one variable can be initialized'#000+ - '03098_E_Abstract methods shou','ldn'#039't have any definition (with fun'+ + '03098_E_Abstract methods shoul','dn'#039't have any definition (with fun'+ 'ction body)'#000+ '03099_E_This overloaded function can'#039't be local (must be exported)'+ #000+ '03100_W_Virtual methods are used without a constructor in "$1"'#000+ '03101_CL_Macro defined: $1'#000+ '03102_CL_Macro undefined: $1'#000+ - '03103_C','L_Macro $1 set to $2'#000+ + '03103_CL','_Macro $1 set to $2'#000+ '03104_I_Compiling $1'#000+ '03105_UL_Parsing interface of unit $1'#000+ '03106_UL_Parsing implementation of $1'#000+ '03107_DL_Compiling $1 for the second time'#000+ '03109_E_No property found to override'#000+ - '03110_E_Only one default property is allow','ed'#000+ + '03110_E_Only one default property is allowe','d'#000+ '03111_E_The default property must be an array property'#000+ '03112_E_Virtual constructors are only supported in class object model'#000+ '03113_E_No default property available'#000+ '03114_E_The class can'#039't have a published section, use the {$M+} sw'+ 'itch'#000+ - '031','15_E_Forward declaration of class "$1" must be resolved here to u'+ + '0311','5_E_Forward declaration of class "$1" must be resolved here to u'+ 'se the class as ancestor'#000+ '03116_E_Local operators not supported'#000+ '03117_E_Procedure directive "$1" not allowed in interface section'#000+ - '03118_E_Procedure directive "$1" not allowed i','n implementation secti'+ + '03118_E_Procedure directive "$1" not allowed in',' implementation secti'+ 'on'#000+ '03119_E_Procedure directive "$1" not allowed in procvar declaration'#000+ '03120_E_Function is already declared Public/Forward "$1"'#000+ '03121_E_Can'#039't use both EXPORT and EXTERNAL'#000+ - '03123_W_"$1" not yet supported inside inline pr','ocedure/function'#000+ + '03123_W_"$1" not yet supported inside inline pro','cedure/function'#000+ '03124_W_Inlining disabled'#000+ '03125_I_Writing Browser log $1'#000+ '03126_H_may be pointer dereference is missing'#000+ '03127_F_Selected assembler reader not supported'#000+ '03128_E_Procedure directive "$1" has conflicts with other directives'#000+ - '031','29_E_Calling convention doesn'#039't match forward'#000+ + '0312','9_E_Calling convention doesn'#039't match forward'#000+ '03131_E_Property can'#039't have a default value'#000+ '03132_E_The default value of a property must be constant'#000+ '03133_E_Symbol can'#039't be published, can be only a class'#000+ - '03134_E_This kind of property can'#039't be',' published'#000+ + '03134_E_This kind of property can'#039't be ','published'#000+ '03136_E_An import name is required'#000+ '03138_E_Division by zero'#000+ '03139_E_Invalid floating point operation'#000+ '03140_E_Upper bound of range is less than lower bound'#000+ '03141_W_string "$1" is longer than "$2"'#000+ - '03142_E_string length is larger th','an array of char length'#000+ + '03142_E_string length is larger tha','n array of char length'#000+ '03143_E_Illegal expression after message directive'#000+ '03144_E_Message handlers can take only one call by ref. parameter'#000+ '03145_E_Duplicate message label: "$1"'#000+ - '03146_E_Self can only be an explicit parameter in methods whi','ch are '+ + '03146_E_Self can only be an explicit parameter in methods whic','h are '+ 'message handlers'#000+ '03147_E_Threadvars can be only static or global'#000+ '03148_F_Direct assembler not supported for binary output format'#000+ '03149_W_Don'#039't load OBJPAS unit manually, use \{\$mode objfpc\} or '+ '\{\$mode delphi\} instead'#000+ - '03150_E_OVER','RIDE can'#039't be used in objects'#000+ + '03150_E_OVERR','IDE can'#039't be used in objects'#000+ '03151_E_Data types which require initialization/finalization can'#039't'+ ' be used in variant records'#000+ '03152_E_Resourcestrings can be only static or global'#000+ '03153_E_Exit with argument can'#039't be used here'#000+ - '03154_E_The type ','of the storage symbol must be boolean'#000+ + '03154_E_The type o','f the storage symbol must be boolean'#000+ '03155_E_This symbol isn'#039't allowed as storage symbol'#000+ '03156_E_Only classes which are compiled in $M+ mode can be published'#000+ '03157_E_Procedure directive expected'#000+ - '03158_E_The value for a property index must ','be of an ordinal type'#000+ + '03158_E_The value for a property index must b','e of an ordinal type'#000+ '03159_E_Procedure name too short to be exported'#000+ '03160_E_No DEFFILE entry can be generated for unit global vars'#000+ '03161_E_Compile without -WD option'#000+ '03162_F_You need ObjFpc (-S2) or Delphi (-Sd) mode to compile this mod'+ - 'ul','e'#000+ + 'ule',#000+ '03163_E_Can'#039't export with index under $1'#000+ '03164_E_Exporting of variables is not supported under $1'#000+ '03165_E_Improper GUID syntax'#000+ '03168_W_Procedure named "$1" not found that is suitable for implementi'+ 'ng the $2.$3'#000+ - '03169_E_interface identifier',' expected'#000+ + '03169_E_interface identifier ','expected'#000+ '03170_E_Type "$1" can'#039't be used as array index type'#000+ '03171_E_Con- and destructors aren'#039't allowed in interfaces'#000+ '03172_E_Access specifiers can'#039't be used in INTERFACEs and OBJCPROT'+ 'OCOLs'#000+ - '03173_E_An interface or Objective-C protocol or ','category cannot cont'+ + '03173_E_An interface or Objective-C protocol or c','ategory cannot cont'+ 'ain fields'#000+ '03174_E_Can'#039't declare local procedure as EXTERNAL'#000+ '03175_W_Some fields coming before "$1" weren'#039't initialized'#000+ '03176_E_Some fields coming before "$1" weren'#039't initialized'#000+ - '03177_W_Some fields coming after "$1" wer','en'#039't initialized'#000+ + '03177_W_Some fields coming after "$1" were','n'#039't initialized'#000+ '03178_E_VarArgs directive (or '#039'...'#039' in MacPas) without CDecl/C'+ 'PPDecl/MWPascal and External'#000+ '03179_E_Self must be a normal (call-by-value) parameter'#000+ '03180_E_Interface "$1" has no interface identification'#000+ - '03181_E_Unknown class',' field or method identifier "$1"'#000+ + '03181_E_Unknown class ','field or method identifier "$1"'#000+ '03182_W_Overriding calling convention "$1" with "$2"'#000+ '03183_E_Typed constants of the type "procedure of object" can only be '+ 'initialized with NIL'#000+ '03184_E_Default value can only be assigned to one parameter'#000+ - '031','85_E_Default parameter required for "$1"'#000+ + '0318','5_E_Default parameter required for "$1"'#000+ '03186_W_Use of unsupported feature!'#000+ '03187_H_C arrays are passed by reference'#000+ '03188_E_C array of const must be the last argument'#000+ '03189_H_Type "$1" redefinition'#000+ - '03190_W_cdecl'#039'ared functions have no hig','h parameter'#000+ + '03190_W_cdecl'#039'ared functions have no high',' parameter'#000+ '03191_W_cdecl'#039'ared functions do not support open strings'#000+ '03192_E_Cannot initialize variables declared as threadvar'#000+ '03193_E_Message directive is only allowed in Classes'#000+ '03194_E_Procedure or Function expected'#000+ - '03195_W_Calling conve','ntion directive ignored: "$1"'#000+ + '03195_W_Calling conven','tion directive ignored: "$1"'#000+ '03196_E_REINTRODUCE can'#039't be used in objects'#000+ '03197_E_Each argument must have its own location'#000+ '03198_E_Each argument must have an explicit location'#000+ '03199_E_Unknown argument location'#000+ - '03200_E_32 Bit-Integer or poi','nter variable expected'#000+ + '03200_E_32 Bit-Integer or poin','ter variable expected'#000+ '03201_E_Goto statements aren'#039't allowed between different procedure'+ 's'#000+ '03202_F_Procedure too complex, it requires too many registers'#000+ '03203_E_Illegal expression'#000+ '03204_E_Invalid integer expression'#000+ - '03205_E_Illegal qualifier',#000+ + '03205_E_Illegal qualifier'#000, '03206_E_High range limit < low range limit'#000+ '03207_E_Exit'#039's parameter must be the name of the procedure it is u'+ '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 EXTERNAL'#000+ + '03210_E_Procedure is a','lready declared EXTERNAL'#000+ '03211_W_Implicit uses of Variants unit'#000+ '03212_E_Class and static methods can'#039't be used in INTERFACES'#000+ '03213_E_Overflow in arithmetic operation'#000+ '03214_E_Protected or private expected'#000+ - '03215_E_SLICE can'#039't be used outside',' of parameter list'#000+ + '03215_E_SLICE can'#039't be used outside ','of parameter list'#000+ '03216_E_A DISPINTERFACE can'#039't have a parent class'#000+ '03217_E_A DISPINTERFACE needs a guid'#000+ '03218_W_Overridden methods must have a related return type. This code '+ - 'may crash, it depends on a Delphi parser bug ("$2" is overridden',' by '+ + 'may crash, it depends on a Delphi parser bug ("$2" is overridden ','by '+ '"$1" which has another return type)'#000+ '03219_E_Dispatch IDs must be ordinal constants'#000+ '03220_E_The range of the array is too large'#000+ '03221_E_The address cannot be taken of bit packed array elements and r'+ 'ecord fields'#000+ - '03222_E_Dynamic arrays can','not be packed'#000+ + '03222_E_Dynamic arrays cann','ot be packed'#000+ '03223_E_Bit packed array elements and record fields cannot be used as '+ 'loop variables'#000+ '03224_E_VAR, TYPE and CONST are allowed only in generics and classes'#000+ '03225_E_This type can'#039't be a generic'#000+ - '03226_W_Don'#039't load LINEINFO unit ma','nually, Use the -gl compiler '+ + '03226_W_Don'#039't load LINEINFO unit man','ually, Use the -gl compiler '+ 'switch instead'#000+ '03227_E_No function result type specified for function "$1"'#000+ '03228_E_Specialization is only supported for generic types'#000+ '03229_E_Generics can'#039't be used as parameters when specializing gen'+ 'erics'#000+ - '03230','_E_Constants of objects containing a VMT aren'#039't allowed'#000+ + '03230_','E_Constants of objects containing a VMT aren'#039't allowed'#000+ '03231_E_Taking the address of labels defined outside the current scope'+ ' isn'#039't allowed'#000+ '03233_E_Cannot initialize variables declared as external'#000+ '03234_E_Illegal function result type'#000+ - '03235','_E_No common type possible between "$1" and "$2"'#000+ - '03236_E_Generics without specialization can not be used as a type for '+ - 'a variable'#000+ + '03235_','E_No common type possible between "$1" and "$2"'#000+ + '03236_E_Generics without specialization cannot be used as a type for a'+ + ' variable'#000+ '03237_W_Register list is ignored for pure assembler routines'#000+ - '03238_E_Implements property must have class or in','terface type'#000+ + '03238_E_Implements property must have class or inte','rface type'#000+ '03239_E_Implements-property must implement interface of correct type, '+ 'found "$1" expected "$2"'#000+ '03240_E_Implements-property must have read specifier'#000+ '03241_E_Implements-property must not have write-specifier'#000+ - '03242_E_Implements-pr','operty must not have stored-specifier'#000+ + '03242_E_Implements-prop','erty must not have stored-specifier'#000+ '03243_E_Implements-property used on unimplemented interface: "$1"'#000+ '03244_E_Floating point not supported for this target'#000+ '03245_E_Class "$1" does not implement interface "$2"'#000+ - '03246_E_Type used by implement','s must be an interface'#000+ + '03246_E_Type used by implements ','must be an interface'#000+ '03247_E_Variables cannot be exported with a different name on this tar'+ 'get, add the name to the declaration using the "export" directive (var'+ 'iable name: $1, declared export name: $2)'#000+ - '03248_E_Weak external symbols are n','ot supported for the current targ'+ + '03248_E_Weak external symbols are not',' supported for the current targ'+ 'et'#000+ '03249_E_Forward type definition does not match'#000+ '03250_N_Virtual method "$1" has a lower visibility ($2) than parent cl'+ 'ass $3 ($4)'#000+ '03251_E_Fields cannot appear after a method or property definition, st'+ - 'art a',' new visibility section first'#000+ + 'art a n','ew visibility section first'#000+ '03252_E_Parameters cannot contain local type definitions. Use a separa'+ 'te type definition in a type block.'#000+ '03253_E_ABSTRACT and SEALED conflict'#000+ - '03254_E_Can not create a descendant of the sealed class "$1"'#000+ - '03255_','E_SEALED class can not have an ABSTRACT method'#000+ + '03254_E_Cannot create a descendant of the sealed class "$1"'#000+ + '03255_E_S','EALED class cannot have an ABSTRACT method'#000+ '03256_E_Only virtual methods can be final'#000+ - '03257_E_Final method can not be overridden: "$1"'#000+ + '03257_E_Final method cannot be overridden: "$1"'#000+ '03258_E_Only one message can be used per method.'#000+ '03259_E_Invalid enumerator identifier: "$1"'#000+ - '03260_E_E','numerator identifier required'#000+ + '03260_E_Enumer','ator identifier required'#000+ '03261_E_Enumerator MoveNext pattern method is not valid. Method must b'+ 'e a function with the Boolean return type and no required arguments.'#000+ '03262_E_Enumerator Current pattern property is not valid. Property mus'+ - 't',' have a getter.'#000+ + 't have',' a getter.'#000+ '03263_E_Only one enumerator MoveNext method is allowed per class/objec'+ 't'#000+ '03264_E_Only one enumerator Current property is allowed per class/obje'+ 'ct'#000+ - '03265_E_For in loop can not be used for the type "$1"'#000+ - '03266_E_Objective-C messa','ges require their Objective-C selector name'+ + '03265_E_For in loop cannot be used for the type "$1"'#000+ + '03266_E_Objective-C messages re','quire their Objective-C selector name'+ ' to be specified using the "message" directive.'#000+ '03267_E_Objective-C does not have formal constructors nor destructors.'+ ' Use the alloc, initXXX and dealloc messages.'#000+ - '03268_E_Message name is too long ','(max. 255 characters)'#000+ + '03268_E_Message name is too long (max. ','255 characters)'#000+ '03269_E_Objective-C message symbol name for "$1" is too long'#000+ '03270_H_Defining a new Objective-C root class. To derive from another '+ 'root class (e.g., NSObject), specify it as the parent class.'#000+ - '03271_E_Objective-C classe','s cannot have published sections.'#000+ + '03271_E_Objective-C classes cann','ot have published sections.'#000+ '03272_F_This module requires an Objective-C mode switch to be compiled'+ #000+ '03273_E_Inherited methods can only be overridden in Objective-C, add "'+ 'override".'#000+ - '03274_H_Inherited methods can only be overridden in Ob','jective-C, add'+ + '03274_H_Inherited methods can only be overridden in Objectiv','e-C, add'+ ' "override".'#000+ '03275_E_Message name "$1" in inherited class is different from message'+ ' name "$2" in current class.'#000+ '03276_E_It is not yet possible to make unique copies of Objective-C ty'+ 'pes'#000+ - '03277_E_Objective-C categories cannot be',' used as types'#000+ + '03277_E_Objective-C categories cannot be used ','as types'#000+ '03278_E_Categories do not override, but replace methods. Use "reintrod'+ 'uce" instead.'#000+ '03279_E_Replaced methods can only be reintroduced in Objective-C, add '+ '"reintroduce".'#000+ - '03280_H_Replaced methods can only be reintroduced in Obj','ective-C, ad'+ + '03280_H_Replaced methods can only be reintroduced in Objective','-C, ad'+ 'd "reintroduce".'#000+ '03281_E_Getter for implements interface must use the target'#039's defa'+ 'ult calling convention.'#000+ '03282_E_Typed files cannot contain reference-counted types.'#000+ '03283_E_Operator is not overloaded: $2 "$1"'#000+ - '03284_E_Operator ','is not overloaded: "$1" $2 "$3"'#000+ + '03284_E_Operator is not',' overloaded: "$1" $2 "$3"'#000+ '03285_E_Expected another $1 array elements'#000+ '03286_E_String constant too long while ansistrings are disabled'#000+ - '04000_E_Type mismatch'#000+ + '03287_E_Type cannot be used as univ parameter because its size is unkn'+ + 'own at compile time: "$1"'#000+ + '04000_E_Typ','e mismatch'#000+ '04001_E_Incompatible types: got "$1" expected "$2"'#000+ - '04002_E_Type mismatch betwee','n "$1" and "$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+ + '04006_E_Boolea','n expression expected, but got "$1"'#000+ '04007_E_Ordinal expression expected'#000+ - '04008_E_pointer ty','pe expected, but got "$1"'#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+ - '04012_E_Set elements are not compatible'#000+ + '04012_E_Set elements are not compatible',#000+ '04013_E_Operation not implemented for sets'#000+ - '04014_W_Automatic type conversion from floatin','g type to COMP which i'+ - 's an integer type'#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+ '04016_E_String types have to match exactly in $V+ mode'#000+ - '04017_E_succ or pred on enums with assignments not possible'#000+ - '04018_E_Can'#039't read or write variable','s of this type'#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+ - '04021_E_Type conflict between set elements'#000+ + '04021_E_Type conflict between set el','ements'#000+ '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+ - '04023_E_Integer or re','al expression expected'#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 (variable) are not compatible'#000+ - '04027_E_Illegal constant passed to i','nternal math function'#000+ + '04026_E_Method (','variable) and Procedure (variable) are not compatibl'+ + 'e'#000+ + '04027_E_Illegal constant passed to internal math function'#000+ '04028_E_Can'#039't take the address of constant expressions'#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+ + '04030_E_Can'#039't assign local procedur','e/function to procedure varia'+ + 'ble'#000+ '04031_E_Can'#039't assign values to an address'#000+ - '04032_E_Can'#039't a','ssign values to const variable'#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+ - '04035_H_Mixing signed expressions and longwords gives a 64bit result'#000+ - '04036_W_Mixing signed expressions and cardinals here may cause a r','an'+ - 'ge check error'#000+ + '04035_H_Mixing signed expressions and longwor','ds gives a 64bit result'+ + #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 related'#000+ - '04040_W_Class types "$1" and "$2" are not ','related'#000+ + '04039_E_Clas','s 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+ - '04043_W_String literal has more characters than short string length'#000+ + '04043_W_String literal has more characters ','than short string length'#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+ + '04045_W_Comparison is always true due to range of values'#000+ '04046_W_Constructing a class "$1" with abstract method "$2"'#000+ - '04047_H_The left operand of the IN operator should be byte sized'#000+ - '04048_W_Type size mismatch, possible loss of data / range check e','rro'+ - 'r'#000+ + '04047_H_The left operand of the IN opera','tor should be byte sized'#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+ - '04051_E_Assignments to formal parameters and open arrays are not possi'+ - 'ble'#000+ - '04052_E_Constant Expression expect','ed'#000+ + '04051_E_Assignment','s to formal parameters and open arrays are not pos'+ + 'sible'#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 ordinals 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+ - '04059_W_Converting constant real value to double for C variable argume'+ - 'nt, add explicit typecast to prevent this.'#000+ - '04060_E_Class or COM interface type ','expected, but got "$1"'#000+ + '04059_W_Converting constant real value to double for C vari','able argu'+ + 'ment, add explicit typecast to prevent this.'#000+ + '04060_E_Class or COM interface type expected, but got "$1"'#000+ '04061_E_Constant packed arrays are not yet supported'#000+ '04062_E_Incompatible type for arg no. $1: Got "$2" expected "(Bit)Pack'+ - 'ed Array"'#000+ + 'ed A','rray"'#000+ '04063_E_Incompatible type for arg no. $1: Got "$2" expected "(not pack'+ 'ed) Array"'#000+ - '040','64_E_Elements of packed arrays cannot be of a type which need to '+ - 'be initialised'#000+ + '04064_E_Elements of packed arrays cannot be of a type which need to be'+ + ' initialised'#000+ '04065_E_Constant packed records and objects are not yet supported'#000+ - '04066_W_Arithmetic "$1" on untyped pointer is unportable to {$T+}, sug'+ - 'gest typecast'#000+ - '04076_E_Ca','n'#039't take address of a subroutine marked as local'#000+ + '0406','6_W_Arithmetic "$1" on untyped pointer is unportable to {$T+}, s'+ + 'uggest typecast'#000+ + '04076_E_Can'#039't take address of a subroutine marked as local'#000+ '04077_E_Can'#039't export subroutine marked as local from a unit'#000+ '04078_E_Type is not automatable: "$1"'#000+ - '04079_H_Converting the operands to "$1" before doing the add could pre'+ - 'vent overflow errors.'#000+ - '0','4080_H_Converting the operands to "$1" before doing the subtract co'+ - 'uld prevent overflow errors.'#000+ - '04081_H_Converting the operands to "$1" before doing the multiply coul'+ + '040','79_H_Converting the operands to "$1" before doing the add could p'+ + 'revent overflow errors.'#000+ + '04080_H_Converting the operands to "$1" before doing the subtract coul'+ 'd prevent overflow errors.'#000+ - '04082_W_Converting pointers to signed integers ','may result in wrong c'+ - 'omparison results and range errors, use an unsigned type instead.'#000+ + '04081_H_Converting the operands to "$1" before doing t','he multiply co'+ + 'uld prevent overflow errors.'#000+ + '04082_W_Converting pointers to signed integers may result in wrong com'+ + 'parison results and range errors, use an unsigned type instead.'#000+ '04083_E_Interface type $1 has no valid GUID'#000+ - '04084_E_Invalid selector name "$1"'#000+ + '04084_E_Invalid sel','ector name "$1"'#000+ '04085_E_Expected Objective-C method, but got $1'#000+ - '04086_E_Expected Objective','-C method or constant method name'#000+ + '04086_E_Expected Objective-C method or constant method name'#000+ '04087_E_No type info available for this type'#000+ '04088_E_Ordinal or string expression expected'#000+ - '04089_E_String expression expected'#000+ + '04089_E_String expression',' expected'#000+ '04090_W_Converting 0 to NIL'#000+ - '04091_E_Objective-C protocol type expected, but got ','"$1"'#000+ + '04091_E_Objective-C protocol type expected, but got "$1"'#000+ '04092_E_The type "$1" is not supported for interaction with the Object'+ 'ive-C runtime.'#000+ '04093_E_Class or objcclass type expected, but got "$1"'#000+ - '04094_E_Objcclass type expected'#000+ + '04094','_E_Objcclass type expected'#000+ + '04095_W_Coerced univ parameter type in procedural variable may cause c'+ + 'rash or memory corruption: $1 to $2'#000+ '05000_E_Identifier not found "$1"'#000+ - '05001_F_Internal Error in Sym','TableStack()'#000+ - '05002_E_Duplicate identifier "$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+ '05004_E_Unknown identifier "$1"'#000+ '05005_E_Forward declaration not solved "$1"'#000+ '05007_E_Error in type definition'#000+ - '05009_E_Forward type not resolve','d "$1"'#000+ - '05010_E_Only static variables can be used in static methods or outside'+ - ' methods'#000+ + '05009_E_Forward type not resolved "$1"'#000+ + '05010_E_Only static variables can be ','used in static methods or outsi'+ + 'de 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+ '05014_W_Label not defined "$1"'#000+ - '05015','_E_Label used but not defined "$1"'#000+ - '05016_E_Illegal label declaration'#000+ + '05015_E_Label used but not defined "$1"'#000+ + '05016_E_I','llegal 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+ - '05021_E_illegal type decla','ration of set elements'#000+ - '05022_E_Forward class definition not resolved "$1"'#000+ + '05021_E_illegal type declaration of set elements'#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+ - '05027_N_','Local variable "$1" is assigned but never used'#000+ + '05027_N_Local variable "$1" is assigned but never us','ed'#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+ - '05032_E_Set type',' expected'#000+ - '05033_W_Function result does not seem to be set'#000+ + '05032_E_Set type expected'#000+ + '05033_W_Function result does not s','eem 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+ - '05037_W_Va','riable "$1" does not seem to be initialized'#000+ + '05037_W_Variable "$1" does not seem to be initialized'#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+ - '05043_W_Symbol "$1" is depr','ecated'#000+ + '05043_W_Symbol "$1" is deprecated'#000+ '05044_W_Symbol "$1" is not portable'#000+ - '05055_W_Symbol "$1" is not implemented'#000+ + '0','5055_W_Symbol "$1" is not implemented'#000+ '05056_E_Can'#039't create unique type from this type'#000+ '05057_H_Local variable "$1" does not seem to be initialized'#000+ - '05058_H_Variable "$1" does not seem to be initiali','zed'#000+ - '05059_W_Function result variable does not seem to initialized'#000+ + '05058_H_Variable "$1" does not seem to be initialized'#000+ + '05059_W_Function result variable does no','t seem to initialized'#000+ '05060_H_Function result variable does not seem to be initialized'#000+ '05061_W_Variable "$1" read but nowhere assigned'#000+ '05062_H_Found abstract method: $1'#000+ - '05063_W_Symbol "$1" is expe','rimental'#000+ - '05064_W_Forward declaration "$1" not resolved, assumed external'#000+ + '05063_W_Symbol "$1" is experimental'#000+ + '05064_W_Forward declaration "$1" no','t resolved, assumed external'#000+ '05065_W_Symbol "$1" is belongs to a library'#000+ '05066_W_Symbol "$1" is deprecated: "$2"'#000+ - '05067_E_Can not find an enumerator for the type "$1"'#000+ - '05068_E_Can not find a "MoveNe','xt" method in enumerator "$1"'#000+ - '05069_E_Can not find a "Current" property in enumerator "$1"'#000+ + '05067_E_Cannot find an enumerator for the type "$1"'#000+ + '05068_E_Cannot find a "MoveNext" method in enumerator "$1"'#000+ + '05069_E_Cannot f','ind a "Current" property in enumerator "$1"'#000+ '05070_E_Mismatch between number of declared parameters and number of c'+ 'olons in message string.'#000+ '05071_N_Private type "$1.$2" never used'#000+ - '05072_N_Privat','e const "$1.$2" never used'#000+ - '05073_N_Private property "$1.$2" never used'#000+ + '05072_N_Private const "$1.$2" never used'#000+ + '05073_N_Private prop','erty "$1.$2" never used'#000+ '05074_W_Unit "$1" is deprecated'#000+ '05075_W_Unit "$1" is deprecated: "$2"'#000+ '05076_W_Unit "$1" is not portable'#000+ '05077_W_Unit "$1" is belongs to a library'#000+ - '05078_W_Unit "$1" is no','t implemented'#000+ - '05079_W_Unit "$1" is experimental'#000+ + '05078_W_Unit "$1" is not implemented'#000+ + '05079_W_Unit "$1" is experimental',#000+ '06009_E_Parameter list size exceeds 65535 bytes'#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 declared functions can'#039't be called',#000+ - '06016_W_Possible illegal call of constructor or destructor'#000+ + '06015_E_EXPORT declared functions can'#039't be called'#000+ + '06016_W_Possible illegal call of constructor o','r destructor'#000+ '06017_N_Inefficient code'#000+ '06018_W_unreachable code'#000+ '06020_E_Abstract methods can'#039't be called directly'#000+ '06027_DL_Register $1 weight $2 $3'#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+ + '06031_E_Object or class methods can'#039't be inline.'#000+ + '06032_E_Proc','var 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+ - '06037_E_Constructors or de','structors can not be called inside a '#039'w'+ - 'ith'#039' clause'#000+ + '06037_E_Constructors or destructors cannot be called inside a '#039'wit'+ + 'h'#039' clau','se'#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 block'#000+ - '06041_W_Parameters si','ze exceeds limit for certain cpu'#039's'#000+ - '06042_W_Local variable size exceed limit for certain cpu'#039's'#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+ '06044_E_BREAK not allowed'#000+ '06045_E_CONTINUE not allowed'#000+ - '06046_F_Unknown compilerproc "$1". Che','ck if you use the correct run '+ - 'time library.'#000+ - '06047_F_Cannot find system type "$1". Check if you use the correct run'+ - ' time library.'#000+ + '06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+ + 'me library.'#000+ + '0604','7_F_Cannot find system type "$1". Check if you use the correct r'+ + 'un time library.'#000+ '06048_H_Inherited call to abstract method ignored'#000+ '06049_E_Goto label "$1" not defined or optimized away'#000+ - '06050_F','_Cannot find type "$1" in unit "$2". Check if you use the cor'+ + '06050_F_Cannot find type "$1" in unit "$2". Check if yo','u use the cor'+ 'rect run time library.'#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 reco','rd offset'#000+ - '07005_E_OFFSET used without identifier'#000+ + '07004_E_Error building record offset'#000+ + '07005_E_OFFSET used without identifier',#000+ '07006_E_TYPE used without identifier'#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 sy','mbols'#000+ - '07011_E_Relocatable symbol can only be added'#000+ + '07010_E_Cannot use multiple relocatable symbols'#000+ + '07011_E_Relocatable symbol can only be add','ed'#000+ '07012_E_Invalid constant expression'#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+ - '07017_E_Invalid base and index register usage'#000+ + '07015_E_You cannot reach $1 from that code'#000+ + '07016_E_Local symbols/labels aren'#039't allowed as references'#000+ + '07017_E_Invalid base and ','index register usage'#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 st','ring as opcode operand: $1'#000+ - '07023_W_@CODE and @DATA not supported'#000+ + '07022_E_Invalid string as opcode operand: $1'#000+ + '07023_W_@CODE and @DAT','A not supported'#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 ref','erence'#000+ - '07029_W_Fwait can cause emulation problems with emu387'#000+ + '07028_E_Invalid symbol reference'#000+ + '07029_W_Fwait can cause emulation problems',' with emu387'#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 sy','mbol type for operand'#000+ - '07034_E_Constant value out of bounds'#000+ + '07033_E_Unsupported symbol type for operand'#000+ + '07034_E_Constant value out ','of bounds'#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+ - '07041_E_Cannot use SELF outside a method'#000+ + '07040_W_$1 is associated to an overloaded function'#000+ + '07041_','E_Cannot use SELF outside a method'#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 destination 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_Ass','embler syntax error in constant'#000+ - '07051_E_Invalid String expression'#000+ + '07050_E_Assembler syntax error in constant'#000+ + '07051_E_Invalid S','tring expression'#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 a','nd opcode: $1'#000+ - '07056_E_Invalid combination of override and opcode: $1'#000+ + '07055_E_Invalid combination of prefix and opcode: $1'#000+ + '07056_E_Invalid combination of over','ride and opcode: $1'#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 identi','fier $1'#000+ + '07062_E_Unknown label identifier $1'#000+ '07063_E_Invalid register name'#000+ - '07064_E_Invalid floating point register name'#000+ + '07064_E_Inv','alid floating point register name'#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 in','dex a local var or parameter with a register'#000+ - '07071_E_Invalid segment override expression'#000+ + '07070_E_Cannot index a local var or parameter with a register'#000+ + '0707','1_E_Invalid segment override expression'#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 returne','d to text section'#000+ - '07076_E_Not a directive or local symbol $1'#000+ + '07075_E_assembler code not returned to text section'#000+ + '07076_E_Not a directive or loca','l symbol $1'#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+ - '07081_E_Can'#039't access fields directly for parameters'#000+ + '07080_N_.align is target specific, use .balign or .p2align'#000+ + '07081_E_Can'#039't access fields d','irectly for parameters'#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 fun','ction'#000+ - '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+ + '07084_E_Cannot use RESULT in this function'#000+ + '07086_W_"$1" without operand translated int','o "$1 %st,%st(1)"'#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+ - '07094_E_Inc and Dec cannot be together'#000+ + '07093_W_ALIGN not supported'#000+ + '07094_E_Inc and Dec cannot',' be together'#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'+ - 'a','nds, using DWORD as default'#000+ - '07099_E_Syntax error while trying to parse a shifter operand'#000+ + 'ands, using DWORD as default'#000+ + '07099_E_Syntax error ','while trying to parse a shifter operand'#000+ '07100_E_Address of packed component is not at a byte boundary'#000+ '07101_W_No size specified and unable to determine the size of the oper'+ - 'ands, using BYTE as',' default'#000+ - '07102_W_Use of +offset(%ebp) for parameters invalid here'#000+ + 'ands, using BYTE as default'#000+ + '07102_W_Use of +offset(%ebp) for paramet','ers invalid here'#000+ '07103_W_Use of +offset(%ebp) is not compatible with regcall convention'+ #000+ '07104_W_Use of -offset(%ebp) is not recommended for local variable acc'+ 'ess'#000+ - '07105_W_Use of -offset(%esp),',' access may cause a crash or value may '+ - 'be lost'#000+ - '07106_E_VMTOffset must be used in combination with a virtual method, a'+ - 'nd "$1" is not virtual'#000+ + '07105_W_Use of -offset(%esp), access may cause a crash or value may be'+ + ' lost'#000+ + '07','106_E_VMTOffset must be used in combination with a virtual method,'+ + ' and "$1" is not virtual'#000+ '07107_E_Generating PIC, but reference is not PIC-safe'#000+ - '07108_E_All registers in a register set must b','e of the same kind and'+ - ' width'#000+ - '07109_E_A register set cannot be empty'#000+ + '07108_E_All registers in a register set must be of the same kind and w'+ + 'idth'#000+ + '07109_E_A register s','et cannot be empty'#000+ '08000_F_Too many assembler files'#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+ + '08004_E_Allocating of data is only allowed in bss section'#000+ + '08005_F_N','o binary writer selected'#000+ '08006_E_Asm: Opcode $1 not in table'#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 effec','tive address'#000+ - '08010_E_Asm: Immediate or reference expected'#000+ + '08009_E_Asm: Invalid effective address'#000+ + '08010_E_Asm: Immediate or reference ','expected'#000+ '08011_E_Asm: $1 value exceeds bounds $2'#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: E','xtended type not supported for this target'#000+ - '08016_E_Asm: Duplicate label $1'#000+ + '08015_E_Asm: Extended type not supported for this target'#000+ + '08016_','E_Asm: Duplicate label $1'#000+ '08017_E_Asm: Redefined label $1'#000+ '08018_E_Asm: First defined here'#000+ '08019_E_Asm: Invalid register $1'#000+ '08020_E_Asm: 16 or 32 Bit references not supported'#000+ - '08021_E_Asm: 64 B','it operands not supported'#000+ - '09000_W_Source operating system redefined'#000+ + '08021_E_Asm: 64 Bit operands not supported'#000+ + '09000_W_Source operatin','g system redefined'#000+ '09001_I_Assembling (pipe) $1'#000+ '09002_E_Can'#039't create assembler file: $1'#000+ '09003_E_Can'#039't create object file: $1'#000+ '09004_E_Can'#039't create archive file: $1'#000+ - '09005_E_Assembler $1 not fou','nd, switching to external assembling'#000+ - '09006_T_Using assembler: $1'#000+ + '09005_E_Assembler $1 not found, switching to external assembling'#000+ + '09006_T_Usin','g 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+ '09009_I_Assembling $1'#000+ - '09010_I_Assembling with smartlinki','ng $1'#000+ - '09011_W_Object $1 not found, Linking may fail !'#000+ + '09010_I_Assembling with smartlinking $1'#000+ + '09011_W_Object $1 not found, Linking may fa','il !'#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+ '09015_I_Linking $1'#000+ - '09016_E_Util $1 not found, sw','itching to external linking'#000+ - '09017_T_Using util $1'#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+ '09020_I_Closing script $1'#000+ - '09021_E_resource compiler "$1" not found, switching to exte','rnal mode'+ - #000+ + '09021_E_resource compiler "$1" 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+ + '09023_T_u','nit $1 can'#039't be statically linked, switching to smart l'+ + 'inking'#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 static li','nk'+ - 'ing'#000+ - '09026_E_unit $1 can'#039't be smart or static linked'#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 li','nked'#000+ '09027_E_unit $1 can'#039't be shared or static linked'#000+ '09028_D_Calling resource compiler "$1" with "$2" as command line'#000+ '09029_E_Error while compiling resources'#000+ - '09030_E_Can'#039't call the resource ','compiler "$1", switching to exte'+ - 'rnal mode'#000+ - '09031_E_Can'#039't open resource file "$1"'#000+ + '09030_E_Can'#039't call the resource compiler "$1", switching to extern'+ + 'al mode'#000+ + '09031_E','_Can'#039't open resource file "$1"'#000+ '09032_E_Can'#039't write resource file "$1"'#000+ '09128_F_Can'#039't post process executable $1'#000+ '09129_F_Can'#039't open executable $1'#000+ '09130_X_Size of Code: $1 bytes'#000+ - '09131_X_Size of ','initialized data: $1 bytes'#000+ - '09132_X_Size of uninitialized data: $1 bytes'#000+ + '09131_X_Size of initialized data: $1 bytes'#000+ + '09132_X_Size of uninit','ialized data: $1 bytes'#000+ '09133_X_Stack space reserved: $1 bytes'#000+ '09134_X_Stack space committed: $1 bytes'#000+ '09200_F_Executable image size is too big for $1 target.'#000+ - '09201_W_Object file "$1" contains',' 32-bit absolute relocation to symb'+ - 'ol "$2".'#000+ - '10000_T_Unitsearch: $1'#000+ + '09201_W_Object file "$1" contains 32-bit absolute relocation to symbol'+ + ' "$2".'#000+ + '10000','_T_Unitsearch: $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+ '10005_U_PPU Time: $1'#000+ '10006_U_PPU File too short'#000+ - '10007_U_PPU Invalid Header (no PPU at t','he begin)'#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 is compiled for another processor'#000+ '10010_U_PPU is compiled for an other target'#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+ + '10015_F_unexpected end of PPU-File'#000+ + '10016_F_Invalid PPU-F','ile entry: $1'#000+ '10017_F_PPU Dbx count problem'#000+ '10018_E_Illegal unit name: $1'#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 av','ailable'#000+ + '10021_F_Can'#039't compile unit $1, no sources available'#000+ '10022_F_Can'#039't find unit $1 used by $2'#000+ - '10023_W_Unit $1 was not found but $2 exists'#000+ + '100','23_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+ - '10026_F_There were $1 errors compiling module, stoppin','g'#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_Recom','piling $1, checksum changed for $2'#000+ '10029_U_Recompiling $1, source found only'#000+ '10030_U_Recompiling unit, static lib is older than ppufile'#000+ - '10031_U_Recompiling unit, shared lib is older than ppuf','ile'#000+ - '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+ + '10031_U_Recompiling unit, shared lib is older than ppufile'#000+ + '10032_U_Recompiling unit, obj and asm are old','er than ppufile'#000+ '10033_U_Recompiling unit, obj is older than asm'#000+ '10034_U_Parsing interface 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+ - '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+ + '10037_U_PPU Check file $1 time $2'#000+ + '10040_W_Can'#039't recompile unit $1, but foun','d modifed include files'+ + #000+ '10041_U_File $1 is newer than PPU file $2'#000+ '10042_U_Trying to use a unit which was compiled with a different FPU m'+ 'ode'#000+ '10043_U_Loading interface units from $1'#000+ - '10044_U_Loa','ding implementation units from $1'#000+ - '10045_U_Interface CRC changed for unit $1'#000+ + '10044_U_Loading implementation units from $1'#000+ + '10045_U_Interfa','ce CRC changed for unit $1'#000+ '10046_U_Implementation CRC changed for unit $1'#000+ '10047_U_Finished compiling unit $1'#000+ '10048_U_Adding dependency: $1 depends on $2'#000+ '10049_U_No reload, is caller: $1'#000+ - '10050','_U_No reload, already in second compile: $1'#000+ - '10051_U_Flag for reload: $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+ '10055_U_Loading unit $1'#000+ - '10056_U_Finished loading unit $1'#000, + '10056_U_Finished loading unit $1'#000+ '10057_U_Registering new unit $1'#000+ - '10058_U_Re-resolving unit $1'#000+ + '10058_U_Re-resolv','ing unit $1'#000+ '10059_U_Skipping re-resolving unit $1, still loading used units'#000+ '10060_U_Unloading resource unit $1 (not needed)'#000+ - '10061_E_Unit $1 was compiled using a different whole program optimi','z'+ - 'ation feedback input ($2, $3); recompile it without wpo or use the sam'+ + '10061_E_Unit $1 was compiled using a different whole program optimizat'+ + 'ion feedback input ($2, $3); recompile it with','out wpo or use the sam'+ 'e wpo feedback input file for this compilation invocation'#000+ '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+ - '11000_O_$1 [options] [options]',#000+ - '11001_W_Only one source file supported, changing source file to compil'+ - 'e from "$1" into "$2"'#000+ + '11000_O_$1 [options] [options]'#000+ + '11001_W_Only one source file supported, changing',' source file to comp'+ + 'ile from "$1" into "$2"'#000+ '11002_W_DEF file can be created only for OS/2'#000+ '11003_E_nested response files are not supported'#000+ '11004_F_No source file name in command line'#000+ - '11005_N_N','o option inside $1 config file'#000+ - '11006_E_Illegal parameter: $1'#000+ + '11005_N_No option inside $1 config file'#000+ + '11006_E_Illegal pa','rameter: $1'#000+ '11007_H_-? writes help pages'#000+ '11008_F_Too many config files nested'#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 stat'+ + '11012_W_Shared libs not supported on DOS platform, rev','erting to stat'+ 'ic'#000+ '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+ 'ntered'#000+ '11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+ 'tered'#000+ - '11015_F_Open conditio','nal at the end of the options file'#000+ - '11016_W_Debug information generation is not supported by this executab'+ - 'le'#000+ + '11015_F_Open conditional at the end of the options file'#000+ + '11016_W_Debug ','information generation is not supported by this execut'+ + 'able'#000+ '11017_H_Try recompiling with -dGDB'#000+ '11018_W_You are using the obsolete switch $1'#000+ - '11019_W_You are using the obsolete switch $1, please',' use $2'#000+ - '11020_N_Switching assembler to default source writing assembler'#000+ + '11019_W_You are using the obsolete switch $1, please use $2'#000+ + '11020_N_Switching assembler to default so','urce writing assembler'#000+ '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+ '11022_W_"$1" assembler use forced'#000+ '11026_T_Reading options from file $1'#000+ - '11027_T_Reading options from e','nvironment $1'#000+ + '11027_T_Reading options from environment $1'#000+ '11028_D_Handling option "$1"'#000+ - '11029_O_*** press enter ***'#000+ + '11029_','O_*** 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+ '11036_D_interpreting firstpass option "$1"'#000+ - '11033_D_interpr','eting file option "$1"'#000+ - '11034_D_Reading config file "$1"'#000+ + '11033_D_interpreting file option "$1"'#000+ + '11034_D_Reading config fil','e "$1"'#000+ '11035_D_found source file name "$1"'#000+ '11039_E_Unknown code page'#000+ '11040_F_Config file $1 is a directory'#000+ '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+ - 'ugging disable','d'#000+ - '11042_W_Use of ppc386.cfg is deprecated, please use fpc.cfg instead'#000+ + 'ugging disabled'#000+ + '11042_W_Use of ppc386.cfg is deprecated, please',' use fpc.cfg instead'#000+ '11043_F_In options file $1 at line $2 \var{\#ELSE} directive without \'+ 'var{\#IF(N)DEF} found'#000+ '11044_F_Option "$1" is not, or not yet, supported on the current targe'+ - 't platfo','rm'#000+ - '11045_F_The feature "$1" is not, or not yet, supported on the selected'+ - ' target platform'#000+ + 't platform'#000+ + '11045_F_The feature "$1" is not, or not yet, s','upported on the select'+ + 'ed target platform'#000+ '11046_N_DWARF debug information cannot be used with smart linking on t'+ 'his target, switching to static linking'#000+ - '11047_W_Option "$1" is ignored for the c','urrent target platform.'#000+ - '11048_W_Disabling external debug information because it is unsupported'+ - ' for the selected target/debug format combination.'#000+ + '11047_W_Option "$1" is ignored for the current target platform.'#000+ + '11048_W_Disabling externa','l debug information because it is unsupport'+ + 'ed for the selected target/debug format combination.'#000+ '12000_F_Cannot open whole program optimization feedback file "$1"'#000+ - '12001_D_Processing whole prog','ram optimization information in wpo fee'+ - 'dback file "$1"'#000+ + '12001_D_Processing whole program optimization information in wpo feedb'+ + 'ack file',' "$1"'#000+ '12002_D_Finished processing the whole program optimization information'+ ' in wpo feedback file "$1"'#000+ '12003_E_Expected section header, but got "$2" at line $1 of wpo feedba'+ 'ck file'#000+ - '12004_W_No',' handler registered for whole program optimization section'+ + '12004_W_No handler registered for whole program optimizatio','n section'+ ' "$2" at line $1 of wpo feedback file, ignoring'#000+ '12005_D_Found whole program optimization section "$1" with information'+ ' about "$2"'#000+ - '12006_F_The selected whole program optimizations req','uire a previousl'+ - 'y generated feedback file (use -Fw to specify)'#000+ + '12006_F_The selected whole program optimizations require a previously '+ + 'generated feedback file (use -F','w to specify)'#000+ '12007_E_No collected information necessary to perform "$1" whole progr'+ 'am optimization found'#000+ '12008_F_Specify a whole program optimization feedback file to store th'+ - 'e generated inf','o in (using -FW)'#000+ - '12009_E_Not generating any whole program optimization information, yet'+ - ' a feedback file was specified (using -FW)'#000+ + 'e generated info in (using -FW)'#000+ + '12009_E_Not generating any whole',' program optimization information, y'+ + 'et a feedback file was specified (using -FW)'#000+ '12010_E_Not performing any whole program optimizations, yet an input f'+ 'eedback file was specified (using -Fw)'#000+ - '1','2011_D_Skipping whole program optimization section "$1", because no'+ + '12011_D_Skipping whole program optimization sectio','n "$1", because no'+ 't needed by the requested optimizations'#000+ '12012_W_Overriding previously read information for "$1" from feedback '+ 'input file using information in section "$2"'#000+ - '12013_E_Cannot ext','ract symbol liveness information from program when'+ + '12013_E_Cannot extract symbol liveness information from program whe','n'+ ' stripping symbols, use -Xs-'#000+ '12014_E_Cannot extract symbol liveness information from program when w'+ 'hen not linking'#000+ '12015_F_Cannot find "$1" or "$2" to extract symbol liveness informatio'+ - 'n fro','m linked program'#000+ - '12016_E_Error during reading symbol liveness information produced by "'+ - '$1"'#000+ + 'n from linked program'#000+ + '12016_E_Error during reading sym','bol liveness information produced by'+ + ' "$1"'#000+ '12017_F_Error executing "$1" (exitcode: $2) to extract symbol informat'+ 'ion from linked program'#000+ - '12018_E_Collection of symbol liveness information can o','nly help when'+ - ' using smart linking, use -CX -XX'#000+ - '12019_E_Cannot create specified whole program optimisation feedback fi'+ - 'le "$1"'#000+ + '12018_E_Collection of symbol liveness information can only help when u'+ + 'sing smart linking, use -CX -XX'#000+ + '12','019_E_Cannot create specified whole program optimisation feedback '+ + 'file "$1"'#000+ '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+ 'CPU'#010+ - 'Copyright (c) 1993-2009 by Florian Klaemp','fl'#000+ - '11024_Free Pascal Compiler version $FPCVERSION'#010+ + 'Copyright (c) 1993-2009 by Florian Klaempfl'#000+ + '11024_Free Pascal Compiler version $FPCVERSION',#010+ #010+ 'Compiler Date : $FPCDATE'#010+ 'Compiler CPU Target: $FPCCPU'#010+ @@ -1006,11 +1011,11 @@ const msgtxt : array[0..000232,1..240] of char=( ' $INSTRUCTIONSETS'#010+ #010+ 'Supported FPU instruction sets:'#010+ - ' $FPUINSTRU','CTIONSETS'#010+ + ' $FPUINSTRUCTIONSETS'#010+ #010+ 'Supported ABI targets:'#010+ ' $ABITARGETS'#010+ - #010+ + #010, 'Supported Optimizations:'#010+ ' $OPTIMIZATIONS'#010+ #010+ @@ -1021,295 +1026,293 @@ const msgtxt : array[0..000232,1..240] of char=( 'Supported Microcontroller types:'#010+ ' $CONTROLLERTYPES'#010+ #010+ - 'This program comes under the G','NU General Public Licence'#010+ - 'For more information read COPYING.FPC'#010+ + 'This program comes under the GNU General Public Licence'#010+ + 'For more information re','ad COPYING.FPC'#010+ #010+ 'Report bugs, suggestions, etc. to:'#010+ ' http://bugs.freepascal.org'#010+ 'or'#010+ ' bugs@freepascal.org'#000+ - '11025_**0*_Put + after a boolean switch option to enable',' it, - to di'+ - 'sable it'#010+ - '**1a_The compiler doesn'#039't delete the generated assembler file'#010+ + '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+ + 'ble it'#010+ + '**1a_The compiler doesn'#039't de','lete the generated 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+ + '**2ar_List register allocation/release info in assembler fi','le'#010+ '**2at_List temp allocation/release info in assembler file'#010+ '**1A_Output format:'#010+ '**2Adefault_Use default assembler'#010+ '3*2Aas_Assemble using GNU AS'#010+ - '3*2Amacho_Mach-O (Darwin, Intel 32 bit) usin','g internal writer'#010+ - '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+ + '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using internal writer'#010+ + '3*2Anasmcoff_COFF (Go32v2) file',' using Nasm'#010+ '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+ '3*2Anasmwin32_Win32 object file using Nasm'#010+ '3*2Anasmwdosx_Win32/WDOSX object file using Nasm'#010+ '3*2Awasm_Obj file using Wasm (Watcom)'#010+ - '3*2Anas','mobj_Obj file using Nasm'#010+ - '3*2Amasm_Obj file using Masm (Microsoft)'#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_ELF (Linux) using internal writer'#010+ '3*2Acoff_COFF (Go32v2) using internal writer'#010+ - '3*2Apecoff_PE-COFF (Win32) using internal writer',#010+ + '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+ '4*2Aas_Assemble using GNU AS'#010+ - '6*2Aas_Unix o-file 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+ 'A*2Aas_Assemble using GNU AS'#010+ 'P*2Aas_Assemble using GNU AS'#010+ - 'S*2Aas_Assemble using GN','U AS'#010+ + 'S*2Aas_Assemble using GNU AS'#010+ '**1b_Generate browser info'#010+ - '**2bl_Generate local symbol info'#010+ + '**2bl_Generate lo','cal symbol info'#010+ '**1B_Build all modules'#010+ '**1C_Code generation options:'#010+ '**2Ca_Select ABI, see fpc -i for possible values'#010+ '**2Cb_Generate big-endian code'#010+ - '**2Cc_Set default calling convent','ion to '#010+ - '**2CD_Create also dynamic library (not supported)'#010+ + '**2Cc_Set default calling convention to '#010+ + '**2CD_Create also dynamic library (not',' supported)'#010+ '**2Ce_Compilation with emulated floating point opcodes'#010+ '**2Cf_Select fpu instruction set to use, see fpc -i for possible va'+ 'lues'#010+ - '**2CF_Minimal floating point constant precisio','n (default, 32, 64)'+ - #010+ + '**2CF_Minimal floating point constant precision (default, 32, 64)'#010+ '**2Cg_Generate PIC code'#010+ - '**2Ch_ bytes heap (between 1023 and 67107840)'#010+ + '**2Ch','_ bytes heap (between 1023 and 67107840)'#010+ '**2Ci_IO-checking'#010+ '**2Cn_Omit linking stage'#010+ '**2Co_Check overflow of integer operations'#010+ '**2CO_Check for possible overflow of integer operations'#010+ - '**','2Cp_Select instruction set, see fpc -i for possible values'#010+ + '**2Cp_Select instruction set, see fpc -i for pos','sible values'#010+ '**2CP=_ packing settings'#010+ '**3CPPACKSET=_ set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+ 'and 8'#010+ '**2Cr_Range checking'#010+ '**2CR_Verify object method call validity'#010+ - '**2Cs_','Set stack checking size to '#010+ - '**2Ct_Stack checking (for testing only, see manual)'#010+ + '**2Cs_Set stack checking size to '#010+ + '**2Ct_Stack checki','ng (for testing only, see manual)'#010+ '**2CX_Create also smartlinked library'#010+ '**1d_Defines the symbol '#010+ '**1D_Generate a DEF file'#010+ '**2Dd_Set description to '#010+ - '**2Dv_Set DLL version to ',#010+ + '**2Dv_Set DLL version to '#010+ '*O2Dw_PM application'#010+ - '**1e_Set path to executable'#010+ + '**1e_Set path to executa','ble'#010+ '**1E_Same as -Cn'#010+ '**1fPIC_Same as -Cg'#010+ '**1F_Set file names and paths:'#010+ '**2Fa[,y]_(for a program) load units and [y] before uses is par'+ 'sed'#010+ '**2Fc_Set input codepage to '#010+ - '**2FC_Set RC compiler binary name to '#010+ - '**2Fd_Disable the compiler'#039's internal directory cache'#010+ + '**2FC_Set RC compiler binary name to '#010+ + '**2Fd_Disabl','e the compiler'#039's internal directory cache'#010+ '**2FD_Set the directory where to search for compiler utilities'#010+ '**2Fe_Redirect error output to '#010+ - '**2Ff_Add to framework path (Darwin on','ly)'#010+ + '**2Ff_Add to framework path (Darwin only)'#010+ '**2FE_Set exe/unit output path to '#010+ - '**2Fi_Add to include path'#010+ + '**2F','i_Add to include path'#010+ '**2Fl_Add to library path'#010+ '**2FL_Use as dynamic linker'#010+ '**2Fm_Load unicode conversion table from .txt in the compiler di'+ 'r'#010+ - '**2Fo_Add to ob','ject path'#010+ + '**2Fo_Add to object path'#010+ '**2Fr_Load error message file '#010+ - '**2FR_Set resource (.res) linker to '#010+ + '**','2FR_Set resource (.res) linker to '#010+ '**2Fu_Add to unit path'#010+ '**2FU_Set unit output path to , overrides -FE'#010+ - '**2FW_Store generated whole-program optimization feedback in '#010, - '**2Fw_Load previously stored whole-program optimization feedback fr'+ - 'om '#010+ + '**2FW_Store generated whole-program optimization feedback in '#010+ + '**2Fw_Load previously stored whole-program opt','imization feedback '+ + 'from '#010+ '*g1g_Generate debug information (default format for target)'#010+ '*g2gc_Generate checks for pointers'#010+ '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+ - '*g2g','l_Use line info unit (show more info with backtraces)'#010+ + '*g2gl_Use line info unit (show more info with backtra','ces)'#010+ '*g2go_Set debug information options'#010+ '*g3godwarfsets_ Enable DWARF '#039'set'#039' type debug information (bre'+ 'aks gdb < 6.5)'#010+ - '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs', + '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+ #010+ - '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+ - 'ame'#010+ + '*g3godwarfmethodclassprefix_ Prefix method names',' in DWARF with class'+ + ' name'#010+ '*g2gp_Preserve case in stabs symbol names'#010+ '*g2gs_Generate Stabs debug information'#010+ '*g2gt_Trash local variables (to detect uninitialized uses)'#010+ - '*g2gv_Generates programs ','traceable with Valgrind'#010+ - '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+ + '*g2gv_Generates programs traceable with Valgrind'#010+ + '*g2gw_Generate DWARFv2 de','bug information (same as -gw2)'#010+ '*g2gw2_Generate DWARFv2 debug information'#010+ '*g2gw3_Generate DWARFv3 debug information'#010+ '**1i_Information'#010+ '**2iD_Return compiler date'#010+ - '**2iV_Return short compiler vers','ion'#010+ + '**2iV_Return short compiler version'#010+ '**2iW_Return full compiler version'#010+ - '**2iSO_Return compiler OS'#010+ + '**2iSO_Ret','urn compiler OS'#010+ '**2iSP_Return compiler host processor'#010+ '**2iTO_Return target OS'#010+ '**2iTP_Return target processor'#010+ '**1I_Add to include path'#010+ '**1k_Pass to the linker'#010+ '**1l_Write logo'#010+ - '**1','M_Set language mode to '#010+ - '**2Mfpc_Free Pascal dialect (default)'#010+ + '**1M_Set language mode to '#010+ + '**2Mfpc_Free Pascal',' dialect (default)'#010+ '**2Mobjfpc_FPC mode with Object Pascal support'#010+ '**2Mdelphi_Delphi 7 compatibility mode'#010+ '**2Mtp_TP/BP 7.0 compatibility mode'#010+ - '**2Mmacpas_Macintosh Pascal dialects compatibility',' mode'#010+ + '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+ '**1n_Do not read the default config files'#010+ - '**1N_Node tree optimizations'#010+ + '*','*1N_Node tree optimizations'#010+ '**2Nu_Unroll loops'#010+ '**1o_Change the name of the executable produced to '#010+ '**1O_Optimizations:'#010+ '**2O-_Disable optimizations'#010+ - '**2O1_Level 1 optimizations (qui','ck and debugger friendly)'#010+ - '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+ + '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+ + '**2O2_Level 2 optimizat','ions (-O1 + quick optimizations)'#010+ '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+ '**2Oa=_Set alignment'#010+ '**2Oo[NO]_Enable or disable optimizations, see fpc -i for possible '+ - 'values',#010+ - '**2Op_Set target cpu for optimizing, see fpc -i for possible values'+ - #010+ + 'values'#010+ + '**2Op_Set target cpu for optimizing, see fpc ','-i for possible valu'+ + 'es'#010+ '**2OW_Generate whole-program optimization feedback for optimization'+ ' , see fpc -i for possible values'#010+ - '**2Ow_Perform whole-program optimization , see fpc -i f','or poss'+ - 'ible values'#010+ - '**2Os_Optimize for size rather than speed'#010+ + '**2Ow_Perform whole-program optimization , see fpc -i for possib'+ + 'le values'#010+ + '**2Os_Optimize for size rather',' than speed'#010+ '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+ '**1R_Assembler reading style:'#010+ '**2Rdefault_Use default assembler for target'#010+ '3*2Ratt_Read AT&T style assembler'#010+ - '3*2Rint','el_Read Intel style assembler'#010+ - '6*2RMOT_Read motorola style assembler'#010+ + '3*2Rintel_Read Intel style assembler'#010+ + '6*2RMOT_Read motoro','la style assembler'#010+ '**1S_Syntax options:'#010+ '**2S2_Same as -Mobjfpc'#010+ '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+ '**2Sa_Turn on assertions'#010+ '**2Sd_Same as -Mdelphi'#010+ - '**2Se_Error options. ','is a combination of the following:'#010+ - '**3*_ : Compiler halts after the errors (default is 1)'#010+ + '**2Se_Error options. is a combination of the following:'#010+ + '**3*_ : Com','piler halts after the errors (default is 1)'#010+ '**3*_w : Compiler also halts after warnings'#010+ '**3*_n : Compiler also halts after notes'#010+ '**3*_h : Compiler also halts after hints'#010+ - '**2Sg_Enable LABE','L and GOTO (default in -Mtp and -Mdelphi)'#010+ - '**2Sh_Use ansistrings by default instead of shortstrings'#010+ + '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+ + '**2Sh_U','se ansistrings by default instead of shortstrings'#010+ '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+ '**2Sk_Load fpcylix unit'#010+ '**2SI_Set interface style to '#010+ - '**3SIcom_COM ','compatible interface (default)'#010+ - '**3SIcorba_CORBA compatible interface'#010+ + '**3SIcom_COM compatible interface (default)'#010+ + '**3SIcorba_CORBA c','ompatible interface'#010+ '**2Sm_Support macros like C (global)'#010+ '**2So_Same as -Mtp'#010+ '**2Ss_Constructor name must be init (destructor must be done)'#010+ - '**2Sx_Enable exception keywords (default in Delphi/Ob','jFPC modes)'#010+ - '**1s_Do not call assembler and linker'#010+ + '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+ + '**1s_Do not call assembler and linker',#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_Target operating system:'#010+ - '3*2Temx_OS/2 via EMX (incl','uding EMX/RSX extender)'#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*2Tg','o32v2_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*2Tos2_OS/','2 / eComStation'#010+ + '3*2Tos2_OS/2 / eComStation'#010+ '3*2Tsunos_SunOS/Solaris'#010+ - '3*2Tsymbian_Symbian OS'#010+ + '3*2Tsymbi','an_Symbian OS'#010+ '3*2Twatcom_Watcom compatible DOS extender'#010+ '3*2Twdosx_WDOSX DOS extender'#010+ '3*2Twin32_Windows 32 Bit'#010+ '3*2Twince_Windows CE'#010+ '4*2Tlinux_Linux'#010+ '6*2Tamiga_Commodore Amiga'#010+ - '6*2Tatari_Atari ST','/STe/TT'#010+ + '6*2Tatari_Atari ST/STe/TT'#010+ '6*2Tlinux_Linux/m68k'#010+ - '6*2Tmacos_Macintosh m68k (not supported)'#010+ + '6*2Tmacos_Macintosh ','m68k (not supported)'#010+ '6*2Tpalmos_PalmOS'#010+ 'A*2Tlinux_Linux'#010+ 'A*2Twince_Windows CE'#010+ 'P*2Tamiga_AmigaOS on PowerPC'#010+ 'P*2Tdarwin_Darwin and Mac OS X on PowerPC'#010+ 'P*2Tlinux_Linux on PowerPC'#010+ - 'P*2Tmacos_Mac OS ','(classic) on PowerPC'#010+ + 'P*2Tmacos_Mac OS (classic) on PowerPC'#010+ 'P*2Tmorphos_MorphOS'#010+ - 'S*2Tlinux_Linux'#010+ + 'S*2Tlinu','x_Linux'#010+ '**1u_Undefines the symbol '#010+ '**1U_Unit options:'#010+ '**2Un_Do not check where the unit name matches the file name'#010+ '**2Ur_Generate release unit files (never automatically recompiled)'#010+ - '**2','Us_Compile a system unit'#010+ - '**1v_Be verbose. is a combination of the following letters:'#010+ + '**2Us_Compile a system unit'#010+ + '**1v_Be verbose. ','is a combination of the following letters:'#010+ '**2*_e : Show errors (default) 0 : Show nothing (except errors)'#010+ '**2*_w : Show warnings u : Show unit info'#010+ - '**2*_n : Show notes ',' t : Show tried/used files'#010+ - '**2*_h : Show hints c : Show conditionals'#010+ + '**2*_n : Show notes t : Show tried/used files'#010+ + '**2*_h :',' Show hints c : Show conditionals'#010+ '**2*_i : Show general info d : Show debug info'#010+ '**2*_l : Show linenumbers r : Rhide/GCC compatibility mode'#010+ - '**2*_s : Show',' time stamps q : Show message numbers'#010+ + '**2*_s : Show time stamps q : Show message numbers'#010, '**2*_a : Show everything x : Executable info (Win32 only)'#010+ '**2*_b : Write file names messages p : Write tree.log with parse tre'+ 'e'#010+ - '**2*_ with full path v : Write fp','cdebug.txt with'#010+ - '**2*_ lots of debugging info'#010+ + '**2*_ with full path v : Write fpcdebug.txt with'#010+ + '**2*_ ',' lots of debugging info'#010+ '**2*_m, : Don'#039't show messages numbered and '#010+ '3*1W_Target-specific options (targets)'#010+ 'A*1W_Target-specific options (targets)'#010+ - 'P*1W_Target-spec','ific options (targets)'#010+ - 'p*1W_Target-specific options (targets)'#010+ + 'P*1W_Target-specific options (targets)'#010+ + 'p*1W_Target-specific op','tions (targets)'#010+ '3*2Wb_Create a bundle instead of a library (Darwin)'#010+ 'P*2Wb_Create a bundle instead of a library (Darwin)'#010+ 'p*2Wb_Create a bundle instead of a library (Darwin)'#010+ - '3*2WB_Create a relo','catable image (Windows)'#010+ - 'A*2WB_Create a relocatable image (Windows, Symbian)'#010+ + '3*2WB_Create a relocatable image (Windows)'#010+ + 'A*2WB_Create a relocatabl','e image (Windows, Symbian)'#010+ '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+ 'A*2WC_Specify console type application (Windows)'#010+ - 'P*2WC_Specify console type application (Classic Mac OS)',#010+ - '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+ + 'P*2WC_Specify console type application (Classic Mac OS)'#010+ + '3*2WD_Use DEFFILE to export functions of DLL or ','EXE (Windows)'#010+ 'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+ '3*2We_Use external resources (Darwin)'#010+ '4*2We_Use external resources (Darwin)'#010+ 'A*2We_Use external resources (Darwin)'#010+ - 'P','*2We_Use external resources (Darwin)'#010+ - 'p*2We_Use external resources (Darwin)'#010+ + 'P*2We_Use external resources (Darwin)'#010+ + 'p*2We_Use ex','ternal resources (Darwin)'#010+ '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+ '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+ 'A*2WG_Specify graphic type application (Windows)'#010+ - 'P','*2WG_Specify graphic type application (Classic Mac OS)'#010+ + 'P*2WG_Specify graphic type application (Classic Ma','c OS)'#010+ '3*2Wi_Use internal resources (Darwin)'#010+ 'P*2Wi_Use internal resources (Darwin)'#010+ 'p*2Wi_Use internal resources (Darwin)'#010+ '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+ - 'A','*2WN_Do not generate relocation code, needed for debugging (Windows'+ + 'A*2WN_Do not generate relocation code, needed for ','debugging (Windows'+ ')'#010+ '3*2WR_Generate relocation code (Windows)'#010+ 'A*2WR_Generate relocation code (Windows)'#010+ 'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+ - '3*2WX_Enable executable stack (L','inux)'#010+ + '3*2WX_Enable executable stack (Linux)'#010+ 'A*2WX_Enable executable stack (Linux)'#010+ - 'p*2WX_Enable executable stack (Linux)'#010+ + 'p*2WX','_Enable executable stack (Linux)'#010+ 'P*2WX_Enable executable stack (Linux)'#010+ '**1X_Executable options:'#010+ '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+ 'ux)'#010+ - '**2Xd_Do not use stan','dard library search path (needed for cross comp'+ - 'ile)'#010+ + '**2Xd_Do not use standard library search path (needed for cross compil', + 'e)'#010+ '**2Xe_Use external linker'#010+ '**2Xg_Create debuginfo in a separate file and add a debuglink section '+ 'to executable'#010+ '**2XD_Try to link units dynamically (defines FPC_LINK_DYNAMIC)'#010+ - '**2Xi_Use ','internal linker'#010+ + '**2Xi_Use internal linker'#010+ '**2Xm_Generate link map'#010+ - '**2XM_Set the name of the '#039'main'#039' program routine (default i'+ - 's '#039'main'#039')'#010+ + '**2XM_','Set the name of the '#039'main'#039' program routine (default'+ + ' is '#039'main'#039')'#010+ '**2XP_Prepend the binutils names with the prefix '#010+ '**2Xr_Set the linker'#039's rlink-path to (needed for cross comp'+ - 'ile, s','ee the ld manual for more information) (BeOS, Linux)'#010+ + 'ile, see the ld manual for more information) (BeOS, Lin','ux)'#010+ '**2XR_Prepend to all linker search paths (BeOS, Darwin, FreeBSD'+ ', Linux, Mac OS, Solaris)'#010+ '**2Xs_Strip all symbols from executable'#010+ - '**2XS_Try to link units statically (default, define','s FPC_LINK_STATIC'+ - ')'#010+ - '**2Xt_Link with static libraries (-static is passed to linker)'#010+ + '**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+ + '**2Xt_Link with static librari','es (-static is passed to linker)'#010+ '**2XX_Try to smartlink units (defines FPC_LINK_SMART)'#010+ '**1*_'#010+ '**1?_Show this help'#010+ diff --git a/compiler/ncal.pas b/compiler/ncal.pas index 71d83ef610..64a521808e 100644 --- a/compiler/ncal.pas +++ b/compiler/ncal.pas @@ -658,7 +658,7 @@ implementation begin { Convert tp procvars, this is needs to be done here to make the change permanent. in the overload - choosing the changes are only made temporary } + choosing the changes are only made temporarily } if (left.resultdef.typ=procvardef) and not(parasym.vardef.typ in [procvardef,formaldef]) then begin @@ -738,7 +738,8 @@ implementation { test conversions } if not(is_shortstring(left.resultdef) and is_shortstring(parasym.vardef)) and - (parasym.vardef.typ<>formaldef) then + (parasym.vardef.typ<>formaldef) and + not(parasym.univpara) then begin { Process open parameters } if paramanager.push_high_param(parasym.varspez,parasym.vardef,aktcallnode.procdefinition.proccalloption) then @@ -805,6 +806,29 @@ implementation CGMessagePos(left.fileinfo,type_e_strict_var_string_violation); end; + { passing a value to an "univ" parameter implies an explicit + typecast to the parameter type. Must be done before the + valid_for_var() check, since the typecast can result in + an invalid lvalue in case of var/out parameters. } + if (parasym.univpara) then + begin + { load procvar if a procedure is passed } + if ((m_tp_procvar in current_settings.modeswitches) or + (m_mac_procvar in current_settings.modeswitches)) and + (left.nodetype=calln) and + (is_void(left.resultdef)) then + begin + load_procvar_from_calln(left); + { load_procvar_from_calln() creates a loadn for a + a procedure, which means that the type conversion + below will type convert the first instruction + bytes of the procedure -> convert to a procvar } + left:=ctypeconvnode.create_proc_to_procvar(left); + typecheckpass(left); + end; + inserttypeconv_explicit(left,parasym.vardef); + end; + { Handle formal parameters separate } if (parasym.vardef.typ=formaldef) then begin @@ -844,7 +868,7 @@ implementation parameter and we can pass the address transparently (but that is handled by make_not_regable if ra_addr_regable is passed, and make_not_regable always needs to called for - the ra_addr_taken info for non-invisble parameters } + the ra_addr_taken info for non-invisble parameters) } if ( not( (vo_is_hidden_para in parasym.varoptions) and diff --git a/compiler/ncnv.pas b/compiler/ncnv.pas index 0d63cedc36..86eee3cc02 100644 --- a/compiler/ncnv.pas +++ b/compiler/ncnv.pas @@ -213,6 +213,7 @@ interface cisnode : tisnodeclass; procedure inserttypeconv(var p:tnode;def:tdef); + procedure inserttypeconv_explicit(var p:tnode;def:tdef); procedure inserttypeconv_internal(var p:tnode;def:tdef); procedure arrayconstructor_to_set(var p : tnode); procedure insert_varargstypeconv(var p : tnode; iscvarargs: boolean); @@ -232,8 +233,10 @@ implementation {***************************************************************************** Helpers *****************************************************************************} + type + ttypeconvnodetype = (tct_implicit,tct_explicit,tct_internal); - procedure inserttypeconv(var p:tnode;def:tdef); + procedure do_inserttypeconv(var p: tnode;def: tdef; convtype: ttypeconvnodetype); begin if not assigned(p.resultdef) then @@ -251,35 +254,37 @@ implementation p.resultdef:=def else begin - p:=ctypeconvnode.create(p,def); + case convtype of + tct_implicit: + p:=ctypeconvnode.create(p,def); + tct_explicit: + p:=ctypeconvnode.create_explicit(p,def); + tct_internal: + p:=ctypeconvnode.create_internal(p,def); + end; p.fileinfo:=ttypeconvnode(p).left.fileinfo; typecheckpass(p); end; end; + procedure inserttypeconv(var p:tnode;def:tdef); + + begin + do_inserttypeconv(p,def,tct_implicit); + end; + + + procedure inserttypeconv_explicit(var p: tnode; def: tdef); + + begin + do_inserttypeconv(p,def,tct_explicit); + end; + procedure inserttypeconv_internal(var p:tnode;def:tdef); begin - if not assigned(p.resultdef) then - begin - typecheckpass(p); - if codegenerror then - exit; - end; - - { don't insert superfluous type conversions, but - in case of bitpacked accesses, the original type must - remain too so that not too many/few bits are laoded } - if equal_defs(p.resultdef,def) and - not is_bitpacked_access(p) then - p.resultdef:=def - else - begin - p:=ctypeconvnode.create_internal(p,def); - p.fileinfo:=ttypeconvnode(p).left.fileinfo; - typecheckpass(p); - end; + do_inserttypeconv(p,def,tct_internal); end; @@ -1684,7 +1689,7 @@ implementation if convtype=tc_none then begin - cdoptions:=[cdo_check_operator,cdo_allow_variant]; + cdoptions:=[cdo_check_operator,cdo_allow_variant,cdo_warn_incompatible_univ]; if nf_explicit in flags then include(cdoptions,cdo_explicit); if nf_internal in flags then @@ -1785,7 +1790,7 @@ implementation { Now check if the procedure we are going to assign to the procvar, is compatible with the procvar's type } if not(nf_explicit in flags) and - (proc_to_procvar_equal(currprocdef,tprocvardef(resultdef))=te_incompatible) then + (proc_to_procvar_equal(currprocdef,tprocvardef(resultdef),false)=te_incompatible) then IncompatibleTypes(left.resultdef,resultdef); exit; end; diff --git a/compiler/nobj.pas b/compiler/nobj.pas index 2acbd19fea..f3f3ae922d 100644 --- a/compiler/nobj.pas +++ b/compiler/nobj.pas @@ -269,7 +269,7 @@ implementation end; { compare parameter types only, no specifiers yet } - hasequalpara:=(compare_paras(vmtpd.paras,pd.paras,cp_none,[])>=te_equal); + hasequalpara:=(compare_paras(vmtpd.paras,pd.paras,cp_none,[cpo_ignoreuniv])>=te_equal); { check that we are not trying to override a final method } if (po_finalmethod in vmtpd.procoptions) and @@ -349,7 +349,7 @@ implementation { All parameter specifiers and some procedure the flags have to match except abstract and override } - if (compare_paras(vmtpd.paras,pd.paras,cp_all,[])pd.proccalloption) or (vmtpd.proctypeoption<>pd.proctypeoption) or ((vmtpd.procoptions*po_comp)<>(pd.procoptions*po_comp)) then @@ -429,7 +429,7 @@ implementation begin implprocdef:=tprocdef(tprocsym(srsym).ProcdefList[i]); if (implprocdef.procsym=tprocsym(srsym)) and - (compare_paras(proc.paras,implprocdef.paras,cp_all,[cpo_ignorehidden,cpo_comparedefaultvalue])>=te_equal) and + (compare_paras(proc.paras,implprocdef.paras,cp_all,[cpo_ignorehidden,cpo_comparedefaultvalue,cpo_ignoreuniv])>=te_equal) and (compare_defs(proc.returndef,implprocdef.returndef,nothingn)>=te_equal) and (proc.proccalloption=implprocdef.proccalloption) and (proc.proctypeoption=implprocdef.proctypeoption) and diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas index 36daea71e6..3589ff0555 100644 --- a/compiler/pdecsub.pas +++ b/compiler/pdecsub.pas @@ -428,7 +428,8 @@ implementation paranr : integer; dummytype : ttypesym; explicit_paraloc, - need_array: boolean; + need_array, + is_univ: boolean; begin old_block_type:=block_type; explicit_paraloc:=false; @@ -446,6 +447,7 @@ implementation paranr:=0; inc(testcurobject); block_type:=bt_var; + is_univ:=false; repeat parseprocvar:=pv_none; if try_to_consume(_VAR) then @@ -560,7 +562,8 @@ implementation else begin if (m_mac in current_settings.modeswitches) then - try_to_consume(_UNIV); {currently does nothing} + is_univ:=try_to_consume(_UNIV); + if try_to_consume(_TYPE) then hdef:=ctypedformaltype else @@ -645,9 +648,16 @@ implementation not(varspez in [vs_out,vs_var]) then CGMessage(cg_e_file_must_call_by_reference); + { univ cannot be used with types whose size is not known at compile + time } + if is_univ and + not is_valid_univ_para_type(hdef) then + Message1(parser_e_invalid_univ_para,hdef.typename); + for i:=0 to sc.count-1 do begin vs:=tparavarsym(sc[i]); + vs.univpara:=is_univ; { update varsym } vs.vardef:=hdef; vs.defaultconstsym:=defaultvalue; @@ -2754,7 +2764,7 @@ const { check arguments, we need to check only the user visible parameters. The hidden parameters can be in a different location because of the calling convention, eg. L-R vs. R-L order (PFV) } ( - (compare_paras(currpd.paras,fwpd.paras,cp_none,[cpo_comparedefaultvalue,cpo_ignorehidden,cpo_openequalisexact])=te_exact) and + (compare_paras(currpd.paras,fwpd.paras,cp_none,[cpo_comparedefaultvalue,cpo_ignorehidden,cpo_openequalisexact,cpo_ignoreuniv])=te_exact) and (fwpd.returndef=currpd.returndef) ) then begin @@ -2767,9 +2777,9 @@ const if not(m_repeat_forward in current_settings.modeswitches) and (fwpd.proccalloption<>currpd.proccalloption) then - paracompopt:=[cpo_ignorehidden,cpo_comparedefaultvalue,cpo_openequalisexact] + paracompopt:=[cpo_ignorehidden,cpo_comparedefaultvalue,cpo_openequalisexact,cpo_ignoreuniv] else - paracompopt:=[cpo_comparedefaultvalue,cpo_openequalisexact]; + paracompopt:=[cpo_comparedefaultvalue,cpo_openequalisexact,cpo_ignoreuniv]; { Check calling convention } if (fwpd.proccalloption<>currpd.proccalloption) then diff --git a/compiler/ppu.pas b/compiler/ppu.pas index 10ae7d07b1..d12f19c000 100644 --- a/compiler/ppu.pas +++ b/compiler/ppu.pas @@ -43,7 +43,7 @@ type {$endif Test_Double_checksum} const - CurrentPPUVersion = 115; + CurrentPPUVersion = 116; { buffer sizes } maxentrysize = 1024; diff --git a/compiler/symdef.pas b/compiler/symdef.pas index ffe47844d5..8c52069dc6 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -2900,6 +2900,8 @@ implementation vs_out : s:=s+'out '; end; + if hp.univpara then + s:=s+'univ '; if assigned(hp.vardef.typesym) then begin hs:=hp.vardef.typesym.realname; diff --git a/compiler/symsym.pas b/compiler/symsym.pas index 0ca10abd7d..ee0552a0a1 100644 --- a/compiler/symsym.pas +++ b/compiler/symsym.pas @@ -180,6 +180,10 @@ interface tparavarsym = class(tabstractnormalvarsym) paraloc : array[tcallercallee] of TCGPara; paranr : word; { position of this parameter } + { in MacPas mode, "univ" parameters mean that type checking should + be disabled, except that the size of the passed parameter must + match the size of the formal parameter } + univpara : boolean; {$ifdef EXTDEBUG} eqval : tequaltype; {$endif EXTDEBUG} @@ -695,7 +699,7 @@ implementation for i:=0 to ProcdefList.Count-1 do begin pd:=tprocdef(ProcdefList[i]); - eq:=proc_to_procvar_equal(pd,d); + eq:=proc_to_procvar_equal(pd,d,false); if eq>=te_equal then begin { multiple procvars with the same equal level } @@ -1401,6 +1405,7 @@ implementation begin inherited ppuload(paravarsym,ppufile); paranr:=ppufile.getword; + univpara:=boolean(ppufile.getbyte); { The var state of parameter symbols is fixed after writing them so we write them to the unit file. @@ -1429,6 +1434,7 @@ implementation begin inherited ppuwrite(ppufile); ppufile.putword(paranr); + ppufile.putbyte(byte(univpara)); { The var state of parameter symbols is fixed after writing them so we write them to the unit file. diff --git a/tests/webtbf/tw15777b.pp b/tests/webtbf/tw15777b.pp new file mode 100644 index 0000000000..a72f80716f --- /dev/null +++ b/tests/webtbf/tw15777b.pp @@ -0,0 +1,119 @@ +{ %opt=-vw -Sew } +{ %fail } + +{ has to fail because of the longint/single mixing with the procvars } + +{$mode macpas} + +program testunivprocparams; + +type + Int8 = -128..127; + Int16 = integer; + Int32 = longint; + Rec32 = packed record f1, f2: Int16 end; + +procedure calli32value( procedure pp( i: univ Int32; x: string); i: univ Int32; x: string); +begin + pp( i, x) +end; +procedure calli32var( procedure pp( var i: univ Int32; x: string); i: univ Int32; x: string); +begin + pp( i, x) +end; +procedure calli32const( procedure pp( const i: univ Int32; x: string); i: univ Int32; x: string); +begin + pp( i, x) +end; + +procedure psvalue( s: single; x: string); +begin + writeln( s, ', ', x) +end; +procedure psvar( var s: single; x: string); +begin + writeln( s, ', ', x) +end; +procedure psconst( const s: single; x: string); +begin + writeln( s, ', ', x) +end; + +procedure pdvalue( d: double; x: string); +begin + writeln( d, ', ', x) +end; +procedure pdvar( var d: double; x: string); +begin + writeln( d, ', ', x) +end; +procedure pdconst( const d: double; x: string); +begin + writeln( d, ', ', x) +end; + +procedure pi8value( i8: Int8; x: string); +begin + writeln( i8, ', ', x) +end; +procedure pi8var( var i8: Int8; x: string); +begin + writeln( i8, ', ', x) +end; +procedure pi8const( const i8: Int8; x: string); +begin + writeln( i8, ', ', x) +end; + +procedure pi16value( i16: Int16; x: string); +begin + writeln( i16, ', ', x) +end; +procedure pi16var( var i16: Int16; x: string); +begin + writeln( i16, ', ', x) +end; +procedure pi16const( const i16: Int16; x: string); +begin + writeln( i16, ', ', x) +end; + +procedure pi32value( i32: Int32; x: string); +begin + writeln( i32, ', ', x) +end; +procedure pi32var( var i32: Int32; x: string); +begin + writeln( i32, ', ', x) +end; +procedure pi32const( const i32: Int32; x: string); +begin + writeln( i32, ', ', x) +end; + +procedure variouscalli32; +var + s: single; + d: double; + i8: Int8; + i16: Int16; + i32: Int32; + r: Rec32; +begin + s:=1.0; + d:=1.0; + i8:=1; + i16:=2; + r.f1:=3; + r.f1:=4; + i32:=5; + + calli32value( psvalue, s, 'psvalue'); + calli32var( psvar, s, 'psvar'); + calli32const( psconst, s, 'psconst'); + +end; + +begin + variouscalli32 +end. diff --git a/tests/webtbs/tw15777a.pp b/tests/webtbs/tw15777a.pp new file mode 100644 index 0000000000..8aa087abf0 --- /dev/null +++ b/tests/webtbs/tw15777a.pp @@ -0,0 +1,27 @@ +{ %opt=-vw -Sew } + +{ should not cause warnings about potential problems with coerced univ + parameters, since no procvars are involved } + +{$mode macpas} + +type + tr = record + l : longint; + end; + +procedure test(l: univ longint); +begin + writeln(l); +end; + +var + r: tr; + s: single; +begin + r.l:=12345; + test(r); + s:=1234; + test(s); +end. + diff --git a/tests/webtbs/tw15777c.pp b/tests/webtbs/tw15777c.pp new file mode 100644 index 0000000000..648507cf33 --- /dev/null +++ b/tests/webtbs/tw15777c.pp @@ -0,0 +1,163 @@ +{ %opt=-vw -Sew } + +{$mode macpas} + +program testunivprocparams; + +type + Int8 = -128..127; + Int16 = integer; + Int32 = longint; + Rec32 = packed record f1, f2: Int16 end; + +procedure calli32value( procedure pp( i: univ Int32; x: string); i: univ Int32; x: string); +begin + pp( i, x) +end; +procedure calli32var( procedure pp( var i: univ Int32; x: string); i: univ Int32; x: string); +begin + pp( i, x) +end; +procedure calli32const( procedure pp( const i: univ Int32; x: string); i: univ Int32; x: string); +begin + pp( i, x) +end; + +procedure psvalue( s: single; x: string); +begin + writeln( s, ', ', x) +end; +procedure psvar( var s: single; x: string); +begin + writeln( s, ', ', x) +end; +procedure psconst( const s: single; x: string); +begin + writeln( s, ', ', x) +end; + +procedure pdvalue( d: double; x: string); +begin + writeln( d, ', ', x) +end; +procedure pdvar( var d: double; x: string); +begin + writeln( d, ', ', x) +end; +procedure pdconst( const d: double; x: string); +begin + writeln( d, ', ', x) +end; + +procedure pi8value( i8: Int8; x: string); +begin + writeln( i8, ', ', x) +end; +procedure pi8var( var i8: Int8; x: string); +begin + writeln( i8, ', ', x) +end; +procedure pi8const( const i8: Int8; x: string); +begin + writeln( i8, ', ', x) +end; + +procedure pi16value( i16: Int16; x: string); +begin + writeln( i16, ', ', x) +end; +procedure pi16var( var i16: Int16; x: string); +begin + writeln( i16, ', ', x) +end; +procedure pi16const( const i16: Int16; x: string); +begin + writeln( i16, ', ', x) +end; + +procedure pi32value( i32: Int32; x: string); +begin + writeln( i32, ', ', x) +end; +procedure pi32var( var i32: Int32; x: string); +begin + writeln( i32, ', ', x) +end; +procedure pi32const( const i32: Int32; x: string); +begin + writeln( i32, ', ', x) +end; + +procedure variouscalli32; +var + s: single; + d: double; + i8: Int8; + i16: Int16; + i32: Int32; + r: Rec32; +begin + s:=1.0; + d:=1.0; + i8:=1; + i16:=2; + r.f1:=3; + r.f1:=4; + i32:=5; + +{ will crash on platforms that pass integers by register and + floats by stack } +// calli32value( psvalue, s, 'psvalue'); +// calli32var( psvar, s, 'psvar'); +// calli32const( psconst, s, 'psconst'); + +{ not allowed by fpc because sizeof(double) <> sizeof(longint) } +// calli32value( pdvalue, d, 'pdvalue'); +// calli32var( pdvar, d, 'pdvar'); +// calli32const( pdconst, d, 'pdconst'); + +{ not allowed by fpc because size(shortint) <> sizeof(longint) } +// calli32value( pi8value, i8, 'pi8value'); +// calli32var( pi8var, i8, 'pi8var'); +// calli32const( pi8const, i8, 'pi8const'); + +{ not allowed by fpc because sizeof(smallint) <> sizeof(longint) } +// calli32value( pi16value, i16, 'pi16value'); +// calli32var( pi16var, i16, 'pi16var'); +// calli32const( pi16const, i16, 'pi16const'); + + calli32value( pi32value, i32, 'pi32value'); + calli32var( pi32var, i32, 'pi32var'); + calli32const( pi32const, i32, 'pi32const'); + +end; + +begin + variouscalli32 +end. +{ + + Below is the output from CodeWarrior. FPC's output can be different in case + sizes differ, and if floating point/integer types are mixed + + 1.000e+0 , psvalue + 0.000e+0 , psvar + 1.000e+0 , psconst + 1.000e+9 , + 3.227e-314 , pdvar + 1.000e+15 , Q +Q +Q + + 1, pi8value + 0, pi8var + 1, pi8const + 1, pi16value + 0, pi16var + 1, pi16const + 1, pi32value + 1, pi32var + 1, pi32const + + +} diff --git a/tests/webtbs/tw15777d.pp b/tests/webtbs/tw15777d.pp new file mode 100644 index 0000000000..df4e5d7df6 --- /dev/null +++ b/tests/webtbs/tw15777d.pp @@ -0,0 +1,80 @@ +{ %opt=-vw -Sew } + +{$mode macpas} + +type + Int8 = -128..127; + Int16 = integer; + Int32 = longint; + Rec1 = packed record f1, f2: Int8 end; + Rec2 = packed record f1, f2: Int16 end; + Rec3 = packed record f1, f2: Int32 end; + +procedure test1(l: univ Int32); +begin + writeln(l) +end; + +procedure test2(l: Int32); +begin + writeln(l) +end; + +procedure test3(var l: univ Int32); +begin + writeln(l) +end; + +procedure test4(const l: univ Int32); +begin + writeln(l) +end; + +procedure testit; +var + s: single; + d: double; + i8: Int8; + i16: Int16; + i32: Int32; + r1: rec1; + r2: rec2; + r3: rec3; +begin + s:=1.0; + d:=1.0; + i8:=1; + i16:=1; + r2.f1:=1; + r2.f1:=1; + i32:= Int32( s); + test1(s); + test3(s); + test4(s); +// not supported by FPC since the sizes differ +// test1(d); + test1(i32); + test2(i32); + test3(i32); + test4(i32); + test1(1.0); + test4(1.0); + test1(2.0); + test4(2.0); + test1(r2); + test3(r2); + test4(r2); + test1(i8); + test4(i8); + test1(i16); + test4(i16); + i8:= Int8(i32); + i8:= Int8(i16); + i16:= Int16(i32); + i32:= Int32(i16); +end; + +begin + testit +end. +