View Issue Details

IDProjectCategoryView StatusLast Update
0025549FPCCompilerpublic2015-05-12 17:30
ReporterAndrewHAssigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Product VersionProduct Build 
Target VersionFixed in Version 
Summary0025549: [PATCH] Allow for..to loops to use a step value
DescriptionThis patch adds the ability to use 'step' in a for..to loop

for I := 0 to 10 step 2 do
  ...;

Also "downto" works.

The step value must be a constant and greater than 1 or the compiler gives an error.
TagsNo tags attached.
Fixed in Revision
FPCOldBugId0
FPCTarget
Attached Files
  • for_by.patch (125,180 bytes)
    Index: jvm/njvmflw.pas
    ===================================================================
    --- jvm/njvmflw.pas	(revision 26481)
    +++ jvm/njvmflw.pas	(working copy)
    @@ -101,7 +101,7 @@
                   ctypeconvnode.create_explicit(ctemprefnode.create(iteratortmp),
                     olditerator.resultdef)));
                 addstatement(newbodystat,t2);
    -            addstatement(stat,cfornode.create(left,right,t1,newbody,lnf_backward in loopflags));
    +            addstatement(stat,cfornode.create(left,right,t1,newbody,loopstep,lnf_backward in loopflags));
                 addstatement(stat,ctempdeletenode.create(iteratortmp));
                 left:=nil;
                 right:=nil;
    Index: msg/errore.msg
    ===================================================================
    --- msg/errore.msg	(revision 26481)
    +++ msg/errore.msg	(working copy)
    @@ -398,7 +398,7 @@
     #
     # Parser
     #
    -# 03335 is the last used one
    +# 03337 is the last used one
     #
     % \section{Parser messages}
     % This section lists all parser messages. The parser takes care of the
    @@ -1501,6 +1501,10 @@
     parser_e_property_only_sgr=03335_E_Properties can be only static, global or inside structured types
     % Properties cannot be declared local, only global, using the static
     % directive or inside structured types.
    +parser_e_expected_positive_by_value=03336_E_Invalid value for by "$1" (must be greater than 0).
    +% The constant value for by must be greater than zero in a for to loop.
    +parser_e_expected_negative_by_value=03337_E_Invalid value for by "$1" (must be less than 0).
    +% The constant value for by must be less than zero in a for downto loop. 
     %
     %
     % \end{description}
    Index: msgidx.inc
    ===================================================================
    --- msgidx.inc	(revision 26481)
    +++ msgidx.inc	(working copy)
    @@ -433,6 +433,8 @@
       parser_e_dir_not_allowed=03333;
       parser_e_no_assembler_in_generic=03334;
       parser_e_property_only_sgr=03335;
    +  parser_e_expected_positive_by_value=03336;
    +  parser_e_expected_negative_by_value=03337;
       type_e_mismatch=04000;
       type_e_incompatible_types=04001;
       type_e_not_equal_types=04002;
    @@ -978,9 +980,9 @@
       option_info=11024;
       option_help_pages=11025;
     
    -  MsgTxtSize = 70217;
    +  MsgTxtSize = 70334;
     
       MsgIdxMax : array[1..20] of longint=(
    -    26,95,336,121,88,56,126,27,202,64,
    +    26,95,338,121,88,56,126,27,202,64,
         54,20,1,1,1,1,1,1,1,1
       );
    Index: msgtxt.inc
    ===================================================================
    --- msgtxt.inc	(revision 26481)
    +++ msgtxt.inc	(working copy)
    @@ -1,7 +1,7 @@
     {$ifdef Delphi}
    -const msgtxt : array[0..000292] of string[240]=(
    +const msgtxt : array[0..000293] of string[240]=(
     {$else Delphi}
    -const msgtxt : array[0..000292,1..240] of char=(
    +const msgtxt : array[0..000293,1..240] of char=(
     {$endif Delphi}
       '01000_T_Compiler: $1'#000+
       '01001_D_Compiler OS: $1'#000+
    @@ -542,669 +542,675 @@
       '03334_E_Assembler blocks not allowed inside generics'#000+
       '03335_E_Properties can be only static, global or inside structured typ'+
       'es'#000+
    +  '03336_E_Invalid value for by "$1" (must be greater than 0).'#000+
    +  '03337_E_Invalid',' value for by "$1" (must be less than 0).'#000+
       '04000_E_Type mismatch'#000+
       '04001_E_Incompatible types: got "$1" expected "$2"'#000+
    -  '04','002_E_Type mismatch between "$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+
    +  '04005_E_Int','eger expression expected, but got "$1"'#000+
       '04006_E_Boolean expression expected, but got "$1"'#000+
    -  '04007_E_Ordinal expression e','xpected'#000+
    +  '04007_E_Ordinal expression expected'#000+
       '04008_E_pointer type expected, but got "$1"'#000+
       '04009_E_class type expected, but got "$1"'#000+
    -  '04011_E_Can'#039't evaluate constant expression'#000+
    +  '04011_E_Can'#039't evaluate consta','nt expression'#000+
       '04012_E_Set elements are not compatible'#000+
       '04013_E_Operation not implemented for sets'#000+
    -  '04014_W_Automatic ty','pe conversion from floating 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+
    +  '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_Ca','n'#039't read or write variables of this type'#000+
    +  '04018_E_Can'#039't read or write variables of this type'#000+
       '04019_E_Can'#039't use readln or writeln on typed file'#000+
    -  '04020_E_Can'#039't use read or write on untyped file.'#000+
    +  '04020_E_Can'#039't use read or write ','on untyped file.'#000+
       '04021_E_Type conflict between set elements'#000+
    -  '04022_W_lo/hi(dword/qword) returns the upper/lower word/d','word'#000+
    +  '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
       '04023_E_Integer or real expression expected'#000+
       '04024_E_Wrong type "$1" in array constructor'#000+
    -  '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
    +  '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_Il','legal constant passed to internal math function'#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+
    +  '04029_E_Argument can',#039't be assigned to'#000+
       '04030_E_Can'#039't assign local procedure/function to procedure variabl'+
       'e'#000+
    -  '04031_E_Can'#039't assign values to ','an address'#000+
    +  '04031_E_Can'#039't assign values to an address'#000+
       '04032_E_Can'#039't assign values to const variable'#000+
       '04033_E_Array type required'#000+
    -  '04034_E_interface type expected, but got "$1"'#000+
    +  '04034_E_interface type expected, but g','ot "$1"'#000+
       '04035_H_Mixing signed expressions and longwords gives a 64bit result'#000+
    -  '04036_W_Mixing signed expressions and ca','rdinals here may cause a ran'+
    -  'ge check error'#000+
    +  '04036_W_Mixing signed expressions and cardinals here may cause a range'+
    +  ' check error'#000+
       '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
    -  '04038_E_enums with assignments can'#039't be used as array index'#000+
    +  '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 ty','pes "$1" and "$2" are not related'#000+
    +  '04040_W_Class types "$1" and "$2" are not related'#000+
       '04041_E_Class or interface type expected, but got "$1"'#000+
    -  '04042_E_Type "$1" is not completely defined'#000+
    +  '04042_E_Type "$1" is not completel','y defined'#000+
       '04043_W_String literal has more characters than short string length'#000+
    -  '04044_W_Comparison might be always fals','e due to range of constant an'+
    -  'd expression'#000+
    +  '04044_W_Comparison might be always false due to range of constant and '+
    +  'expression'#000+
       '04045_W_Comparison might be always true due to range of constant and e'+
       'xpression'#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+
    +  '0','4046_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 error'#000+
    -  '04049_H_Type size mismatch, possible loss of data / range check error'#000+
    +  '04049_H_Type size mismatch, possible loss of d','ata / range check erro'+
    +  'r'#000+
       '04050_E_The address of an abstract method can'#039't be taken'#000+
    -  '04051_E_Assignments to formal parame','ters and open arrays are not pos'+
    -  'sible'#000+
    +  '04051_E_Assignments to formal parameters and open arrays are not possi'+
    +  'ble'#000+
       '04052_E_Constant Expression expected'#000+
    -  '04053_E_Operation "$1" not supported for types "$2" and "$3"'#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 po','rtable'#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+
    +  '04057_E_Can'#039't determine which overloaded function t','o 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+
    +  'nt, 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+
    +  '04061_E_Constant packed arra','ys are not yet supported'#000+
       '04062_E_Incompatible type for arg no. $1: Got "$2" expected "(Bit)Pack'+
       'ed Array"'#000+
    -  '04063_E_Inco','mpatible type for arg no. $1: Got "$2" expected "(not pa'+
    -  'cked) Array"'#000+
    -  '04064_E_Elements of packed arrays cannot be of a type which need to be'+
    -  ' initialised'#000+
    +  '04063_E_Incompatible type for arg no. $1: Got "$2" expected "(not pack'+
    +  'ed) Array"'#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+}, s'+
    -  'uggest typecast'#000+
    +  '04066_W_Arithmetic "$1" on untyped pointer is unportable to {$T+}, sug'+
    +  'gest 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+
    +  '04','077_E_Can'#039't export subroutine marked as local from a unit'#000+
       '04078_E_Type is not automatable: "$1"'#000+
    -  '04079_H_Converting th','e 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'+
    +  '04079_H_Converting the operands to "$1" before doing the add could pre'+
    +  'vent overflow errors.'#000+
    +  '04080_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'+
       'd prevent overflow errors.'#000+
    -  '04081_H_Converting the operands to "$1" before doing the multiply coul'+
    -  'd ','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+
    +  'parison results and range er','rors, use an unsigned type instead.'#000+
       '04083_E_Interface type $1 has no valid GUID'#000+
       '04084_E_Invalid selector name "$1"'#000+
    -  '04','085_E_Expected Objective-C method, but got $1'#000+
    +  '04085_E_Expected Objective-C method, but got $1'#000+
       '04086_E_Expected Objective-C method or constant method name'#000+
    -  '04087_E_No type info available for this type'#000+
    +  '04087_E_No type i','nfo available for this type'#000+
       '04088_E_Ordinal or string expression expected'#000+
       '04089_E_String expression expected'#000+
    -  '04090_W_','Converting 0 to NIL'#000+
    +  '04090_W_Converting 0 to NIL'#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+
    +  '04092_E_The type "$1" is not supported for int','eraction with the Obje'+
    +  'ctive-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+
    -  '04096_E_Type parameters of specializations of generics cannot referenc'+
    -  'e the currently specialized type'#000+
    -  '04097_E_Type parameter','s are not allowed on non-generic class/record/'+
    -  'object procedure or function'#000+
    -  '04098_E_Generic declaration of "$1" differs from previous declaration'#000+
    +  '04096_E_','Type parameters of specializations of generics cannot refere'+
    +  'nce the currently specialized type'#000+
    +  '04097_E_Type parameters are not allowed on non-generic class/record/ob'+
    +  'ject procedure or function'#000+
    +  '04098_E_Generic declaration of "$1" differs from',' previous declaratio'+
    +  'n'#000+
       '04099_E_Helper type expected'#000+
       '04100_E_Record type expected'#000+
    -  '04101_E_Derived class helper must ext','end a subclass of "$1" or the c'+
    -  'lass itself'#000+
    +  '04101_E_Derived class helper must extend a subclass of "$1" or the cla'+
    +  'ss itself'#000+
       '04102_E_Derived record or type helper must extend "$1"'#000+
    -  '04103_E_Invalid assignment, procedures return no value'#000+
    +  '04103_E_Invalid assignmen','t, procedures return no value'#000+
       '04104_W_Implicit string type conversion from "$1" to "$2"'#000+
    -  '04105_W_Implicit string type ','conversion with potential data loss fro'+
    -  'm "$1" to "$2"'#000+
    +  '04105_W_Implicit string type conversion with potential data loss from '+
    +  '"$1" to "$2"'#000+
       '04106_-W_Explicit string typecast from "$1" to "$2"'#000+
    -  '04107_-W_Explicit string typecast with potential data loss from "$1" t'+
    -  'o "$2"'#000+
    +  '04107_-W_Explicit',' string typecast with potential data loss from "$1"'+
    +  ' to "$2"'#000+
       '04108_W_Unicode constant cast with potential data loss'#000+
    -  '04','109_E_range check error while evaluating constants ($1 must be bet'+
    +  '04109_E_range check error while evaluating constants ($1 must be betwe'+
    +  'en $2 and $3)'#000+
    +  '04110_W_range check error while evaluatin','g constants ($1 must be bet'+
       'ween $2 and $3)'#000+
    -  '04110_W_range check error while evaluating constants ($1 must be betwe'+
    -  'en $2 and $3)'#000+
       '04111_E_This type is not supported for the Default() intrinsic'#000+
    -  '04112_E_JVM',' virtual class methods cannot be static'#000+
    +  '04112_E_JVM virtual class methods cannot be static'#000+
       '04113_E_Final (class) fields can only be assigned in their class'#039' '+
    -  '(class) constructor'#000+
    +  '(class) construct','or'#000+
       '04114_E_It is not possible to typecast untyped parameters on managed p'+
    -  'latforms, simply assign a value to them inst','ead.'#000+
    +  'latforms, simply assign a value to them instead.'#000+
       '04115_E_The assignment side of an expression cannot be typecasted to a'+
       ' supertype on managed platforms'#000+
    -  '04116_-W_The interface method "$1" raises the visibility of "$2" to pu'+
    -  'blic when accessed via an interface instance'#000+
    -  '04117_E_The interf','ace method "$1" has a higher visibility (public) t'+
    -  'han "$2"'#000+
    +  '04116_-W_The int','erface method "$1" raises the visibility of "$2" to '+
    +  'public when accessed via an interface instance'#000+
    +  '04117_E_The interface method "$1" has a higher visibility (public) tha'+
    +  'n "$2"'#000+
       '04118_E_TYPEOF can only be used on object types with VMT'#000+
    -  '04119_E_It is not possible to define a default value for a parameter o'+
    -  'f type "$1"'#000+
    -  '04120_E_Type "$1" cannot be extended by a ','type helper'#000+
    +  '04119_E','_It is not possible to define a default value for a parameter'+
    +  ' of type "$1"'#000+
    +  '04120_E_Type "$1" cannot be extended by a type helper'#000+
       '05000_E_Identifier not found "$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+
    +  '0','5003_H_Identifier already defined in $1 at line $2'#000+
       '05004_E_Unknown identifier "$1"'#000+
    -  '05005_E_Forward declaration not so','lved "$1"'#000+
    +  '05005_E_Forward declaration not solved "$1"'#000+
       '05007_E_Error in type definition'#000+
       '05009_E_Forward type not resolved "$1"'#000+
    -  '05010_E_Only static variables can be used in static methods or outside'+
    -  ' methods'#000+
    +  '05010_E_Only static variables can be used',' in static methods or outsi'+
    +  'de methods'#000+
       '05012_E_Record or object or class type expected'#000+
    -  '05013_E_Instances of classes or',' objects with an abstract method are '+
    -  'not allowed'#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+
    +  '050','16_E_Illegal label declaration'#000+
       '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
       '05018_E_Label not found'#000+
    -  '0501','9_E_identifier isn'#039't a label'#000+
    +  '05019_E_identifier isn'#039't a label'#000+
       '05020_E_label already defined'#000+
       '05021_E_illegal type declaration of set elements'#000+
    -  '05022_E_Forward class definition not resolved "$1"'#000+
    +  '05022_E_Forward',' class definition not resolved "$1"'#000+
       '05023_H_Unit "$1" not used in $2'#000+
       '05024_H_Parameter "$1" not used'#000+
    -  '05025_N_Local va','riable "$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 ne','ver used'#000+
       '05028_H_Local $1 "$2" is not used'#000+
       '05029_N_Private field "$1.$2" is never used'#000+
    -  '05030_N_Private field "$1.$2" ','is assigned but never used'#000+
    +  '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+
    +  '05033_W_Function result does',' not seem to be set'#000+
       '05034_W_Type "$1" is not aligned correctly in current record for C'#000+
    -  '05035_E_Unknown record field i','dentifier "$1"'#000+
    +  '05035_E_Unknown record field identifier "$1"'#000+
       '05036_W_Local variable "$1" does not seem to be initialized'#000+
    -  '05037_W_Variable "$1" does not seem to be initialized'#000+
    +  '05037_W_Variable "$1" does not seem to be initia','lized'#000+
       '05038_E_identifier idents no member "$1"'#000+
       '05039_H_Found declaration: $1'#000+
       '05040_E_Data element too large'#000+
    -  '05042_E_N','o matching implementation for interface method "$1" found'#000+
    +  '05042_E_No matching implementation for interface method "$1" found'#000+
       '05043_W_Symbol "$1" is deprecated'#000+
    -  '05044_W_Symbol "$1" is not portable'#000+
    +  '05044_W_Symbol "$1" is not port','able'#000+
       '05055_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+
    +  '05057_H_Local variable "$1" does not seem to be initialized'#000+
       '05058_H_Variable "$1" does not seem to be initialized'#000+
    -  '05059_W_Function result variable does not seem to initialized'#000+
    +  '05059_W_Function result variable d','oes not seem to initialized'#000+
       '05060_H_Function result variable does not seem to be initialized'#000+
    -  '05061_W_Variable "$1" re','ad but nowhere assigned'#000+
    +  '05061_W_Variable "$1" read but nowhere assigned'#000+
       '05062_H_Found abstract method: $1'#000+
       '05063_W_Symbol "$1" is experimental'#000+
    -  '05064_W_Forward declaration "$1" not resolved, assumed external'#000+
    +  '05064_W_Forward declaration "','$1" not resolved, assumed external'#000+
       '05065_W_Symbol "$1" is belongs to a library'#000+
    -  '05066_W_Symbol "$1" is deprecated: "$2','"'#000+
    +  '05066_W_Symbol "$1" is deprecated: "$2"'#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 find a "Current" property in enumerator "$1"'#000+
    -  '05070_E_Mismatch between number of declared parameters and number o','f'+
    -  ' colons in message string.'#000+
    +  '05069_E_Ca','nnot find 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_Private const "$1.$2" never used'#000+
    -  '05073_N_Private property "$1.$2" never used'#000+
    +  '05073_N_Privat','e property "$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+
    +  '05076_W_Unit "$1" is not portable'#000+
       '05077_W_Unit "$1" is belongs to a library'#000+
       '05078_W_Unit "$1" is not implemented'#000+
    -  '05079_W_Unit "$1" is experimental'#000+
    +  '05079_W_Unit "$1" is experi','mental'#000+
       '05080_E_No complete definition of the formally declared class "$1" is '+
       'in scope'#000+
    -  '05081_E_Gotos into initializati','on or finalization blocks of units ar'+
    -  'e not allowed'#000+
    +  '05081_E_Gotos into initialization or finalization blocks of units are '+
    +  'not allowed'#000+
       '05082_E_Invalid external name "$1" for formal class "$2"'#000+
    -  '05083_E_Complete class definition with external name "$1" here'#000+
    -  '05084_W_Possible library conflict: symbol "$1" from library "$2" also',
    -  ' found in library "$3"'#000+
    +  '05083_E_Complet','e class definition with external name "$1" here'#000+
    +  '05084_W_Possible library conflict: symbol "$1" from library "$2" also '+
    +  'found in library "$3"'#000+
       '05085_E_Cannot add implicit constructor '#039'Create'#039' because ident'+
       'ifier already used by "$1"'#000+
    -  '05086_E_Cannot generate default constructor for class, because parent '+
    -  'has no parameterless constructor'#000+
    -  '05087_D_Adding helper for',' $1'#000+
    +  '05086_E_Can','not generate default constructor for class, because paren'+
    +  't has no parameterless constructor'#000+
    +  '05087_D_Adding helper for $1'#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+
    +  '06013_E_The use of a far poin','ter isn'#039't allowed there'#000+
       '06015_E_EXPORT declared functions can'#039't be called'#000+
    -  '06016_W_Possible illegal call of constructo','r or destructor'#000+
    +  '06016_W_Possible illegal call of constructor or destructor'#000+
       '06017_N_Inefficient code'#000+
       '06018_W_unreachable code'#000+
       '06020_E_Abstract methods can'#039't be called directly'#000+
    -  '06027_DL_Register $1 weight $2 $3'#000+
    +  '06027_D','L_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_P','rocvar calls cannot be inline.'#000+
    +  '06032_E_Procvar calls cannot be inline.'#000+
       '06033_E_No code for inline procedure stored'#000+
    -  '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
    -  'sed, use (set)length instead'#000+
    +  '06035_E_Element zero of an ansi/wide- or longstr','ing can'#039't be acc'+
    +  'essed, use (set)length instead'#000+
       '06037_E_Constructors or destructors cannot be called inside a '#039'wit'+
    -  'h'#039' c','lause'#000+
    +  'h'#039' clause'#000+
       '06038_E_Cannot call message handler methods directly'#000+
       '06039_E_Jump in or outside of an exception block'#000+
    -  '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
    +  '06040_E_Control',' flow statements aren'#039't allowed in a finally bloc'+
    +  'k'#000+
       '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
    -  '06042_W_Lo','cal variable size exceed 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+
    +  '06044_E_BREAK not all','owed'#000+
       '06045_E_CONTINUE not allowed'#000+
       '06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+
       'me library.'#000+
    -  '0','6047_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+
    +  '06047_F_Cannot find system type "$1". Check if you use the correct run'+
    +  ' time library.'#000+
    +  '06048_H_Inherited call to abstract meth','od 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'+
    -  'rect run time library.'#000+
    +  '06050_F_Cannot find type "$1" in unit "$2". Check if you use the corre'+
    +  'ct run time library.'#000+
       '06051_E_Interprocedural gotos are allowed only to outer subroutines'#000+
    -  '06052_E_Label must be defined in the same scope as it is declared'#000+
    -  '06053_E_Leaving procedures containing explicit or implicit exceptio','n'+
    -  's frames using goto is not allowed'#000+
    +  '06052_E_Label mu','st be defined in the same scope as it is declared'#000+
    +  '06053_E_Leaving procedures containing explicit or implicit exceptions '+
    +  'frames using goto is not allowed'#000+
       '06054_E_In ISO mode, the mod operator is defined only for positive quo'+
       'tient'#000+
    -  '06055_DL_Auto inlining: $1'#000+
    +  '06055_DL_Au','to inlining: $1'#000+
       '07000_DL_Starting $1 styled assembler parsing'#000+
       '07001_DL_Finished $1 styled assembler parsing'#000+
    -  '07002_E_N','on-label pattern contains @'#000+
    +  '07002_E_Non-label pattern contains @'#000+
       '07004_E_Error building record offset'#000+
       '07005_E_OFFSET used without identifier'#000+
    -  '07006_E_TYPE used without identifier'#000+
    +  '07006_E_TYPE used w','ithout identifier'#000+
       '07007_E_Cannot use local variable or parameters here'#000+
       '07008_E_need to use OFFSET here'#000+
    -  '07009_E_need t','o use $ here'#000+
    +  '07009_E_need to use $ here'#000+
       '07010_E_Cannot use multiple relocatable symbols'#000+
       '07011_E_Relocatable symbol can only be added'#000+
    -  '07012_E_Invalid constant expression'#000+
    +  '07012_E_Invalid c','onstant expression'#000+
       '07013_E_Relocatable symbol is not allowed'#000+
       '07014_E_Invalid reference syntax'#000+
    -  '07015_E_You cannot reac','h $1 from that code'#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+
    +  '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+
    +  '07020_E_Multiple index register usage'#000+
       '07021_E_Invalid operand type'#000+
       '07022_E_Invalid string as opcode operand: $1'#000+
       '07023_W_@CODE and @DATA not supported'#000+
    -  '07024_E_Null label references are not allowed'#000+
    +  '0702','4_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+
    +  '07027_E_escape sequence ignored: $1'#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+
    +  '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+
    +  '07032_W_Calling an overload function in assembler'#000+
       '07033_E_Unsupported symbol type for operand'#000+
       '07034_E_Constant value out of bounds'#000+
    -  '07035_E_Error converting decimal $1'#000+
    +  '07035_E_Er','ror converting decimal $1'#000+
       '07036_E_Error converting octal $1'#000+
       '07037_E_Error converting binary $1'#000+
    -  '07038_E_Error converti','ng hexadecimal $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+
    +  '07041_E_Cannot use SELF ou','tside 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+
    +  '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+
    +  '07046_W_Size suffix and dest','ination or source size do not match'#000+
       '07047_E_Assembler syntax error'#000+
    -  '07048_E_Invalid combination of opcode and operands',#000+
    +  '07048_E_Invalid combination of opcode and operands'#000+
       '07049_E_Assembler syntax error in operand'#000+
       '07050_E_Assembler syntax error in constant'#000+
       '07051_E_Invalid String expression'#000+
    -  '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
    +  '070','52_W_constant with symbol $1 for address which is not on a pointe'+
    +  'r'#000+
       '07053_E_Unrecognized opcode $1'#000+
    -  '07054_E_Invalid or ','missing opcode'#000+
    +  '07054_E_Invalid or missing opcode'#000+
       '07055_E_Invalid combination of prefix and opcode: $1'#000+
    -  '07056_E_Invalid combination of override and opcode: $1'#000+
    +  '07056_E_Invalid combination of override 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+
    +  '07061_E_Undefined local symbol $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_Invalid 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+
    +  '07068_E_Invalid floating point expression'#000+
       '07069_E_Wrong symbol type'#000+
       '07070_E_Cannot index a local var or parameter with a register'#000+
    -  '07071_E_Invalid segment override expression'#000+
    +  '07071_E_Invalid segment ','override expression'#000+
       '07072_W_Identifier $1 supposed external'#000+
       '07073_E_Strings not allowed as constants'#000+
    -  '07074_E_No type ','of variable specified'#000+
    +  '07074_E_No type of variable specified'#000+
       '07075_E_assembler code not returned to text section'#000+
       '07076_E_Not a directive or local symbol $1'#000+
    -  '07077_E_Using a defined name as a local label'#000+
    +  '07077_','E_Using a defined name as a local label'#000+
       '07078_E_Dollar token is used without an identifier'#000+
    -  '07079_W_32bit constant cre','ated for address'#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+
    +  '07081_E_Can'#039't access fields directly for parame','ters'#000+
       '07082_E_Can'#039't access fields of objects/classes directly'#000+
    -  '07083_E_No size specified and unable to determine the si','ze of the op'+
    -  'erands'#000+
    +  '07083_E_No size specified and unable to determine the size of the oper'+
    +  'ands'#000+
       '07084_E_Cannot use RESULT in this function'#000+
    -  '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
    +  '07086_W_"$1" without operand translated into "$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+
    +  '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+
    -  '07095_E_Invalid reglist for movem'#000+
    +  '07095','_E_Invalid reglist for movem'#000+
       '07096_E_Reglist invalid for opcode'#000+
       '07097_E_Higher cpu mode required ($1)'#000+
    -  '07098_W_No size',' specified and unable to determine the size of the op'+
    -  'erands, using DWORD as default'#000+
    -  '07099_E_Syntax error while trying to parse a shifter operand'#000+
    +  '07098_W_No size specified and unable to determine the size of the oper'+
    +  'ands, using DWORD as default'#000+
    +  '07099_E_Syntax error while trying to pa','rse a shifter operand'#000+
       '07100_E_Address of packed component is not at a byte boundary'#000+
    -  '07101_W_No size specified and una','ble to determine the size of the op'+
    -  'erands, using BYTE as default'#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+
    -  '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 a'+
    -  'ccess'#000+
    +  '0','7103_W_Use of +offset(%ebp) is not compatible with regcall conventi'+
    +  'on'#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+
    -  '07107_E_Generating PIC, but reference is not',' PIC-safe'#000+
    +  '07106_E_VMTOffset mu','st 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 be of the same kind and w'+
       'idth'#000+
    -  '07109_E_A register set cannot be empty'#000+
    +  '07109_E_A register set cannot be empty',#000+
       '07110_W_@GOTPCREL is useless and potentially dangereous for local symb'+
       'ols'#000+
    -  '07111_W_Constant with general purpose segm','ent register'#000+
    +  '07111_W_Constant with general purpose segment register'#000+
       '07112_E_Invalid offset value for $1'#000+
       '07113_E_Invalid register for $1'#000+
    -  '07114_E_SEH directives are allowed only in pure assembler procedures'#000+
    +  '07114_E_SEH directives are allowed only in',' pure assembler procedures'+
    +  #000+
       '07115_E_Directive "$1" is not supported for the current target'#000+
    -  '07116_E_This function'#039's res','ult location cannot be encoded direct'+
    -  'ly in a single operand when "nostackframe" is used'#000+
    -  '07117_E_GOTPCREL references in Intel assembler syntax cannot contain a'+
    -  ' base or index register, and their offset must 0.'#000+
    -  '07118_E_The current target does ','not support GOTPCREL relocations'#000+
    +  '07116_E_This function'#039's result location cannot be encoded directly'+
    +  ' in a single operand when "nostackframe" is used'#000+
    +  '07117_E_GOTPCREL references in Inte','l assembler syntax cannot contain'+
    +  ' a base or index register, and their offset must 0.'#000+
    +  '07118_E_The current target does not support GOTPCREL relocations'#000+
       '07119_W_Exported/global symbols should accessed via the GOT'#000+
    -  '07120_W_Check size of memory operand "$1"'#000+
    +  '07120_W_Check size of memory o','perand "$1"'#000+
       '07121_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
       'ts, but expected [$3 bits]"'#000+
    -  '07122_W','_Check size of memory operand "$1: memory-operand-size is $2 '+
    -  'bits, but expected [$3 bits + $4 byte offset]"'#000+
    -  '07123_W_Check "$1: offset of memory operand is negative "$2 byte"'#000+
    -  '07124_W_Check "$1: size of memory operand is empty, but es exists ','di'+
    -  'fferent definitions of the memory size =>> map to $2 (smallest option)'+
    -  '"'#000+
    -  '07125_E_Invalid register used in memory reference expression: "$1"'#000+
    +  '07122_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
    +  'ts, but expected [$3 bits + $4 byte offset]"'#000+
    +  '07123_W_Check "','$1: offset of memory operand is negative "$2 byte"'#000+
    +  '07124_W_Check "$1: size of memory operand is empty, but es exists diff'+
    +  'erent definitions of the memory size =>> map to $2 (smallest option)"'#000+
    +  '07125_E_Invalid register used in memory reference',' expression: "$1"'#000+
       '08000_F_Too many assembler files'#000+
       '08001_F_Selected assembler output not supported'#000+
    -  '08002_F_Comp not s','upported'#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+
    +  '08005_F_No',' binary writer selected'#000+
       '08006_E_Asm: Opcode $1 not in table'#000+
    -  '08007_E_Asm: $1 invalid combination of opcode and operand','s'#000+
    +  '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
       '08008_E_Asm: 16 Bit references not supported'#000+
       '08009_E_Asm: Invalid effective address'#000+
    -  '08010_E_Asm: Immediate or reference expected'#000+
    +  '08010_E_Asm: Immediate or reference e','xpected'#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 lab','el $1'#000+
    +  '08013_E_Asm: Undefined label $1'#000+
       '08014_E_Asm: Comp type not supported for this target'#000+
       '08015_E_Asm: Extended type not supported for this target'#000+
    -  '08016_E_Asm: Duplicate label $1'#000+
    +  '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 registe','r $1'#000+
    +  '08019_E_Asm: Invalid register $1'#000+
       '08020_E_Asm: 16 or 32 Bit references not supported'#000+
       '08021_E_Asm: 64 Bit operands not supported'#000+
    -  '08022_E_Asm: AH,BH,CH or DH cannot be used in an instruction requiring'+
    -  ' REX prefix'#000+
    +  '08022_E_Asm: AH,BH,CH or',' DH cannot be used in an instruction requiri'+
    +  'ng REX prefix'#000+
       '08023_E_Missing .seh_endprologue directive'#000+
    -  '08024_E_Function',' prologue exceeds 255 bytes'#000+
    +  '08024_E_Function prologue exceeds 255 bytes'#000+
       '08025_E_.seh_handlerdata directive without preceding .seh_handler'#000+
    -  '08026_F_Relocation count for section $1 exceeds 65535'#000+
    +  '08026_F_Relocation count for ','section $1 exceeds 65535'#000+
       '09000_W_Source operating system redefined'#000+
       '09001_I_Assembling (pipe) $1'#000+
    -  '09002_E_Can'#039't create ','assembler file: $1'#000+
    +  '09002_E_Can'#039't create assembler file: $1'#000+
       '09003_E_Can'#039't create object file: $1 (error code: $2)'#000+
       '09004_E_Can'#039't create archive file: $1'#000+
    -  '09005_E_Assembler $1 not found, switching to external assembling'#000+
    +  '09005_E_Asse','mbler $1 not found, switching to external assembling'#000+
       '09006_T_Using assembler: $1'#000+
    -  '09007_E_Error while assembling exitc','ode $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 smartlinking $1'#000+
    +  '09010_I_Assembling',' with smartlinking $1'#000+
       '09011_W_Object $1 not found, Linking may fail !'#000+
    -  '09012_W_Library $1 not found, Linking may fail ','!'#000+
    +  '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, switching to external linking'#000+
    +  '09016_E_Util ','$1 not found, switching to external linking'#000+
       '09017_T_Using util $1'#000+
       '09018_E_Creation of Executables not supported'#000+
    -  '09019','_E_Creation of Dynamic/Shared Libraries not supported'#000+
    +  '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
       '09020_I_Closing script $1'#000+
    -  '09021_E_resource compiler "$1" not found, switching to external mode'#000+
    +  '09021_E_resource compiler "$1" not found, s','witching to external mode'+
    +  #000+
       '09022_I_Compiling resource $1'#000+
    -  '09023_T_unit $1 can'#039't be statically linked, switching to smar','t l'+
    -  'inking'#000+
    +  '09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
    +  'king'#000+
       '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
       #000+
    -  '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
    -  'g'#000+
    +  '09025_T_unit $1 can'#039't be shared linked, switch','ing to static link'+
    +  'ing'#000+
       '09026_E_unit $1 can'#039't be smart or static linked'#000+
    -  '09027_E_unit $1 can'#039't be shared or static linke','d'#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 extern'+
    -  'al mode'#000+
    +  '09030_E_Can'#039't ca','ll the resource compiler "$1", switching to exte'+
    +  'rnal mode'#000+
       '09031_E_Can'#039't open resource file "$1"'#000+
    -  '09032_E_Can'#039't write r','esource file "$1"'#000+
    +  '09032_E_Can'#039't write resource file "$1"'#000+
       '09033_N_File "$1" not found for backquoted cat command'#000+
    -  '09034_W_"$1" not found, this will probably cause a linking failure'#000+
    +  '09034_W_"$1" not found, this will probably cause a',' linking failure'#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 b','ytes'#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+
    -  '09133_X_Stack space reserved: $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_Obje','ct file "$1" contains 32-bit absolute relocation to symb'+
    -  'ol "$2".'#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+
    +  '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 Invali','d Header (no PPU at the 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+
    -  '10010_U_PPU is compiled for another target'#000+
    +  '10010_U_PPU is ','compiled for another 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 read','ing 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+
       '10017_F_PPU Dbx count problem'#000+
    -  '10018_E_Illegal unit name: $1'#000+
    +  '10018_E_Il','legal 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 un','it $1, no sources available'#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+
    -  '10024_F_Unit $1 searched but $2 found'#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 compi','ling module, stopping'#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+
    -  '10029_U_Recompiling $1, source found only'#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 li','b is older than ppufile'#000+
    +  '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
       '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
    -  '10033_U_Recompiling unit, obj is older than asm'#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+
    +  '10037_U_PPU Check file $1 time $2'#000+
       '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
    -  '10041_U_File $1 is newer than the one used for creating PPU file $2'#000+
    +  '10041_U_File $1 is newer than ','the one used for creating 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+
    +  '10043_U_Loading interface units from $1'#000+
       '10044_U_Loading implementation units from $1'#000+
       '10045_U_Interface CRC changed for unit $1'#000+
    -  '10046_U_Implementation CRC changed for unit $1'#000+
    +  '1','0046_U_Implementation CRC changed for unit $1'#000+
       '10047_U_Finished compiling unit $1'#000+
    -  '10048_U_Adding dependency: $1 depend','s on $2'#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+
    -  '10052_U_Forced reloading'#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_Loa','ding unit $1'#000+
    +  '10055_U_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+
    -  '10059_U_Skipping re-resolving unit $1, still loading used units'#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 c','ompiled using a different whole program optimiz'+
    -  'ation feedback input ($2, $3); recompile it without 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+
    +  '10061_E_Unit $1 was compiled using a different whole program optimizat'+
    +  'ion feedback input ($2, $3); recompile it without wpo or use the same '+
    +  'wpo ','feedback input file for this compilation invocation'#000+
    +  '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+
       '10063_U_PPU is compiled for another i8086 memory model'#000+
       '11000_O_$1 [options] <inputfile> [options]'#000+
    -  '11001_W_Only one source file supported, changing source file to compil'+
    -  'e from "$1" into "$2"'#000+
    -  '11002_W_DEF file can be created only for OS/2'#000,
    +  '11001_W_Only one sour','ce 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_No option inside $1 config file'#000+
    +  '11005_N_No option inside $1 con','fig file'#000+
       '11006_E_Illegal parameter: $1'#000+
       '11007_H_-? writes help pages'#000+
       '11008_F_Too many config files nested'#000+
    -  '11009_F_Unab','le to open file $1'#000+
    +  '11009_F_Unable to open file $1'#000+
       '11010_D_Reading further options from $1'#000+
       '11011_W_Target is already set to: $1'#000+
    -  '11012_W_Shared libs not supported on DOS platform, reverting to static'+
    -  #000+
    +  '11012_W_Shared libs not sup','ported on DOS platform, reverting to stat'+
    +  'ic'#000+
       '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+
    -  'nte','red'#000+
    +  'ntered'#000+
       '11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+
       'tered'#000+
    -  '11015_F_Open conditional at the end of the options file'#000+
    +  '11015_F_Open conditional at the end of the ','options file'#000+
       '11016_W_Debug information generation is not supported by this executab'+
       'le'#000+
    -  '11017_H_Try recompiling with -d','GDB'#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+
    -  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000,
    +  '11020_N_Switch','ing assembler to default source writing assembler'#000+
    +  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
       '11022_W_"$1" assembler use forced'#000+
       '11026_T_Reading options from file $1'#000+
       '11027_T_Reading options from environment $1'#000+
    -  '11028_D_Handling option "$1"'#000+
    +  '11028_D_','Handling option "$1"'#000+
       '11029_O_*** press enter ***'#000+
       '11030_H_Start of reading config file $1'#000+
    -  '11031_H_End of reading confi','g 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_interpreting file option "$1"'#000+
    +  '11033_D_interpreting file option "$1"',#000+
       '11034_D_Reading config file "$1"'#000+
       '11035_D_found source file name "$1"'#000+
       '11039_E_Unknown codepage "$1"'#000+
    -  '11040_F_Config fi','le $1 is a directory'#000+
    +  '11040_F_Config file $1 is a directory'#000+
       '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
       '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 with','out'+
    -  ' \var{\#IF(N)DEF} found'#000+
    +  '11042_W_Use of p','pc386.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 platform'#000+
    -  '11045_F_The feature "$1" is not, or not yet, supported on the selected'+
    -  ' target platform'#000+
    -  '11046_N_DWARF debug information cannot be use','d with smart linking on'+
    -  ' this target, switching to static linking'#000+
    -  '11047_W_Option "$1" is ignored for the current target platform.'#000+
    +  '11045_F_The fea','ture "$1" is not, or not yet, supported 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 current target plat','form.'#000+
       '11048_W_Disabling external debug information because it is unsupported'+
    -  ' for the selected target/debug format com','bination.'#000+
    +  ' for the selected target/debug format combination.'#000+
       '11049_N_DWARF debug information cannot be used with smart linking with'+
    -  ' external assembler, disabling static library creation.'#000+
    +  ' external assembler, disabling static libra','ry creation.'#000+
       '11050_E_Invalid value for MACOSX_DEPLOYMENT_TARGET environment variabl'+
       'e: $1'#000+
    -  '11051_E_Invalid value for IP','HONEOS_DEPLOYMENT_TARGET environment var'+
    -  'iable: $1'#000+
    +  '11051_E_Invalid value for IPHONEOS_DEPLOYMENT_TARGET environment varia'+
    +  'ble: $1'#000+
       '11052_E_You must use a FPU type of VFPV2, VFPV3 or VFPV3_D16 when usin'+
    -  'g the EABIHF ABI target'#000+
    +  'g t','he EABIHF ABI target'#000+
       '11053_W_The selected debug format is not supported on the current targ'+
    -  'et, not changing the curre','nt setting'#000+
    +  'et, not changing the current setting'#000+
       '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
    -  '12001_D_Processing whole program optimization information in wpo feedb'+
    -  'ack file "$1"'#000+
    +  '12001_D_Processing whole program optimization ','information in wpo fee'+
    +  'dback file "$1"'#000+
       '12002_D_Finished processing the whole program optimization information'+
    -  ' in wpo f','eedback file "$1"'#000+
    +  ' 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 "'+
    -  '$2" at line $1 of wpo feedback file, ignoring'#000+
    -  '12005_D_Found whole program ','optimization section "$1" with informati'+
    -  'on about "$2"'#000+
    -  '12006_F_The selected whole program optimizations require a previously '+
    -  'generated feedback file (use -Fw to specify)'#000+
    +  '12004_W_No handler register','ed for whole program optimization 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 require a previously',
    +  ' generated feedback file (use -Fw to specify)'#000+
       '12007_E_No collected information necessary to perform "$1" whole progr'+
    -  'a','m optimization found'#000+
    +  'am optimization found'#000+
       '12008_F_Specify a whole program optimization feedback file to store th'+
    -  'e generated info in (using -FW)'#000+
    +  'e generated info in (using -FW)'#000,
       '12009_E_Not generating any whole program optimization information, yet'+
       ' a feedback file was specified (using -FW)'#000+
    -  '1201','0_E_Not performing any whole program optimizations, yet an input'+
    -  ' feedback file was specified (using -Fw)'#000+
    -  '12011_D_Skipping whole program optimization section "$1", because not '+
    -  'needed by the requested optimizations'#000+
    -  '12012_W_Overriding previous','ly read information for "$1" from feedbac'+
    -  'k input file using information in section "$2"'#000+
    -  '12013_E_Cannot extract symbol liveness information from program when s'+
    -  'tripping symbols, use -Xs-'#000+
    -  '12014_E_Cannot extract symbol liveness information from',' program when'+
    -  ' when not linking'#000+
    +  '12010_E_Not performing any whole program optimizations, yet an input f'+
    +  'eedback file was specified (using -Fw)'#000+
    +  '12011_D_Skipping w','hole program optimization section "$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 extract symbol liven','ess information from program when'+
    +  ' 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 from linked program'#000+
    +  'n from linked program'#000,
       '12016_E_Error during reading symbol liveness information produced by "'+
       '$1"'#000+
    -  '12017_F_Error executing "$1" (exitcode: $2)',' to extract symbol inform'+
    -  'ation from linked program'#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 only help when u'+
    -  'sing smart linking, use -CX -XX'#000+
    +  'si','ng smart linking, use -CX -XX'#000+
       '12019_E_Cannot create specified whole program optimisation feedback fi'+
       'le "$1"'#000+
    -  '11023_Fre','e Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $F'+
    -  'PCCPU'#010+
    +  '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+
    +  'CPU'#010+
       'Copyright (c) 1993-2013 by Florian Klaempfl and others'#000+
    -  '11024_Free Pascal Compiler version $FPCVERSION'#010+
    +  '110','24_Free Pascal Compiler version $FPCVERSION'#010+
       #010+
       'Compiler Date      : $FPCDATE'#010+
       'Compiler CPU Target: $FPCCPU'#010+
       #010+
    -  'Supported ta','rgets:'#010+
    +  'Supported targets:'#010+
       '  $OSTARGETS'#010+
       #010+
       'Supported CPU instruction sets:'#010+
       '  $INSTRUCTIONSETS'#010+
       #010+
       'Supported FPU instruction sets:'#010+
    -  '  $FPUINSTRUCTIONSETS'#010+
    +  '  $FPUINSTRUCTIONS','ETS'#010+
       #010+
       'Supported inline assembler modes:'#010+
       '  $ASMMODES'#010+
    @@ -1213,403 +1219,403 @@
       '  $ABITARGETS'#010+
       #010+
       'Supported Optimizations:'#010+
    -  '  ','$OPTIMIZATIONS'#010+
    +  '  $OPTIMIZATIONS'#010+
       #010+
       'Supported Whole Program Optimizations:'#010+
       '  All'#010+
       '  $WPOPTIMIZATIONS'#010+
       #010+
       'Supported Microcontroller types:'#010+
    -  '  $CONTROLLERTYPES'#010+
    +  '  $CONTRO','LLERTYPES'#010+
       #010+
       'This program comes under the GNU General Public Licence'#010+
       'For more information read COPYING.v2'#010+
       #010+
    -  'Please repor','t bugs in our bug tracker on:'#010+
    +  'Please report bugs in our bug tracker on:'#010+
       '                 http://bugs.freepascal.org'#010+
       #010+
    -  'More information may be found on our WWW pages (including directions'#010+
    +  'More information may be found on our WWW pages (','including directions'+
    +  #010+
       'for mailing lists useful for asking questions or discussing potential'#010+
       'new features, etc.):'#010+
    -  '     ','            http://www.freepascal.org'#000+
    +  '                 http://www.freepascal.org'#000+
       '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+
       'ble it'#010+
    -  '**1a_The compiler doesn'#039't delete the generated assembler file'#010+
    +  '**1a_The',' compiler doesn'#039't delete the generated assembler file'#010+
       '**2al_List sourcecode lines in assembler file'#010+
    -  '**2an_List node i','nfo in assembler file (-dEXTDEBUG compiler)'#010+
    +  '**2an_List node info in assembler file (-dEXTDEBUG compiler)'#010+
       '*L2ap_Use pipes instead of creating temporary assembler files'#010+
    -  '**2ar_List register allocation/release info in assembler file'#010+
    +  '**2ar_List regist','er allocation/release info in assembler file'#010+
       '**2at_List temp allocation/release info in assembler file'#010+
    -  '**1A<x>_Output',' format:'#010+
    +  '**1A<x>_Output format:'#010+
       '**2Adefault_Use default assembler'#010+
       '3*2Aas_Assemble using GNU AS'#010+
    -  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using internal writer'#010+
    +  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using inter','nal writer'#010+
       '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
       '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
    -  '3*2Anasmwin32_Win32 o','bject 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*2Anasmobj_Obj file using Nasm'#010+
    +  '3*2Anasmobj_Ob','j 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*2Aelf_ELF (Linux) using internal writer'#010+
       '3*2Acoff_COFF (Go32v2) using internal writer'#010+
       '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
    -  '4*2Aas_Assemble using GNU AS'#010+
    +  '4*2Aas','_Assemble using GNU AS'#010+
       '4*2Agas_Assemble using GNU GAS'#010+
       '4*2Agas-darwin_Assemble darwin Mach-O64 using GNU GAS'#010+
    -  '4*2Amasm_','Win64 object file using ml64 (Microsoft)'#010+
    +  '4*2Amasm_Win64 object file using ml64 (Microsoft)'#010+
       '4*2Apecoff_PE-COFF (Win64) using internal writer'#010+
    -  '4*2Aelf_ELF (Linux-64bit) using internal writer'#010+
    +  '4*2Aelf_ELF (Linux-64bit) using i','nternal writer'#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_St','andard Motorola assembler'#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 GNU AS'#010+
    -  '**1b_Generate browser info'#010+
    +  '**1b_Gener','ate browser info'#010+
       '**2bl_Generate local symbol info'#010+
       '**1B_Build all modules'#010+
       '**1C<x>_Code generation options:'#010+
    -  '**2C3_Turn ','on ieee error checking for constants'#010+
    +  '**2C3_Turn on ieee error checking for constants'#010+
       '**2Ca<x>_Select ABI, see fpc -i for possible values'#010+
    -  '**2Cb_Generate code for a big-endian variant of the target architectur'+
    -  'e'#010+
    +  '**2Cb_Generate code for a big-endi','an variant of the target architect'+
    +  'ure'#010+
       '**2Cc<x>_Set default calling convention to <x>'#010+
    -  '**2CD_Create also dynamic librar','y (not supported)'#010+
    +  '**2CD_Create also dynamic library (not supported)'#010+
       '**2Ce_Compilation with emulated floating point opcodes'#010+
    -  '**2Cf<x>_Select fpu instruction set to use, see fpc -i for possible va'+
    -  'lues'#010+
    +  '**2Cf<x>_Select fpu instruction set to use, see fp','c -i for possible '+
    +  'values'#010+
       '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
    -  '**2Cg_Generate PIC code',#010+
    +  '**2Cg_Generate PIC code'#010+
       '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
       '**2Ci_IO-checking'#010+
    -  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB'#010+
    +  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB',#010+
       '**2Cn_Omit linking stage'#010+
       'P*2CN_Generate nil-pointer checks (AIX-only)'#010+
       '**2Co_Check overflow of integer operations'#010+
    -  '**2','CO_Check for possible overflow of integer operations'#010+
    +  '**2CO_Check for possible overflow of integer operations'#010+
       '**2Cp<x>_Select instruction set, see fpc -i for possible values'#010+
    -  '**2CP<x>=<y>_ packing settings'#010+
    +  '**2CP<','x>=<y>_ packing settings'#010+
       '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
       'and 8'#010+
    -  '**2Cr_Range chec','king'#010+
    +  '**2Cr_Range checking'#010+
       '**2CR_Verify object method call validity'#010+
       '**2Cs<n>_Set stack checking size to <n>'#010+
    -  '**2Ct_Stack checking (for testing only, see manual)'#010+
    +  '**2Ct_Stack checking (for testing onl','y, see manual)'#010+
       '8*2CT<x>_Target-specific code generation options'#010+
       '3*2CT<x>_Target-specific code generation options'#010+
    -  '4*2C','T<x>_Target-specific code generation options'#010+
    +  '4*2CT<x>_Target-specific code generation options'#010+
       'p*2CT<x>_Target-specific code generation options'#010+
    -  'P*2CT<x>_Target-specific code generation options'#010+
    +  'P*2CT<x>_Target-specific code',' generation options'#010+
       'J*2CT<x>_Target-specific code generation options'#010+
    -  'A*2CT<x>_Target-specific code generation options',#010+
    +  'A*2CT<x>_Target-specific code generation options'#010+
       'p*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
       ' (AIX)'#010+
    -  'P*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
    -  ' (AIX)'#010+
    +  'P*3CTsmalltoc_ Generate smaller TOCs at the e','xpense of execution spe'+
    +  'ed (AIX)'#010+
       'J*3CTautogetterprefix=X_  Automatically create getters for properties '+
    -  'with prefix X (','empty string disables)'#010+
    +  'with prefix X (empty string disables)'#010+
       'J*3CTautosetterprefix=X_  Automatically create setters for properties '+
    -  'with prefix X (empty string disables)'#010+
    +  'with prefix X (empty string di','sables)'#010+
       '8*3CTcld_                 Emit a CLD instruction before using the x86 '+
       'string instructions'#010+
    -  '3*3CTcld_          ','       Emit a CLD instruction before using the x8'+
    +  '3*3CTcld_                 Emit a CLD instruction before using the x86 '+
    +  'string instructions'#010+
    +  '4*3CTcld_                 Emit a CLD instruction bef','ore using the x8'+
       '6 string instructions'#010+
    -  '4*3CTcld_                 Emit a CLD instruction before using the x86 '+
    -  'string instructions'#010+
       'J*3CTcompactintarrayinit_ Generate smaller (but potentially slower) co'+
    -  'de for in','itializing integer array constants'#010+
    +  'de for initializing integer array constants'#010+
       'J*3CTenumfieldinit_       Initialize enumeration fields in constructor'+
    -  's to enumtype(0), after calling inherited constructors'#010+
    +  's to enumtype(0), ','after calling inherited constructors'#010+
       'J*3CTinitlocals_          Initialize local variables that trigger a JV'+
    -  'M bytecode',' verification error if used uninitialized (slows down code'+
    -  ')'#010+
    -  'J*3CTlowercaseprocstart_  Lowercase the first character of procedure/f'+
    -  'unction/method names'#010+
    +  'M bytecode verification error if used uninitialized (slows down code)'#010+
    +  'J*3CTlowercaseprocstart_  Lowercase the first character of proc','edure'+
    +  '/function/method names'#010+
       'A*3CTthumbinterworking_ Generate Thumb interworking-safe code if possi'+
       'ble'#010+
    -  'J*2Cv_Var/out p','arameter copy-out checking'#010+
    +  'J*2Cv_Var/out parameter copy-out checking'#010+
       '**2CX_Create also smartlinked library'#010+
       '**1d<x>_Defines the symbol <x>'#010+
       '**1D_Generate a DEF file'#010+
    -  '**2Dd<x>_Set description to <x>'#010+
    +  '**','2Dd<x>_Set description to <x>'#010+
       '**2Dv<x>_Set DLL version to <x>'#010+
       '*O2Dw_PM application'#010+
       '**1e<x>_Set path to executable'#010+
    -  '**1','E_Same as -Cn'#010+
    +  '**1E_Same as -Cn'#010+
       '**1fPIC_Same as -Cg'#010+
       '**1F<x>_Set file names and paths:'#010+
    -  '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
    -  'sed'#010+
    +  '**2Fa<x>[,y]_(for a program) load units <x> and [y] bef','ore uses is p'+
    +  'arsed'#010+
       '**2Fc<x>_Set input codepage to <x>'#010+
       '**2FC<x>_Set RC compiler binary name to <x>'#010+
    -  '**2Fd_Disable the c','ompiler'#039's internal directory cache'#010+
    +  '**2Fd_Disable the compiler'#039's internal directory cache'#010+
       '**2FD<x>_Set the directory where to search for compiler utilities'#010+
    -  '**2Fe<x>_Redirect error output to <x>'#010+
    +  '**2Fe<x>_Redirect erro','r output to <x>'#010+
       '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
       '**2FE<x>_Set exe/unit output path to <x>'#010+
    -  '**2Fi<x>_Ad','d <x> to include path'#010+
    +  '**2Fi<x>_Add <x> to include path'#010+
       '**2Fl<x>_Add <x> to library path'#010+
       '**2FL<x>_Use <x> as dynamic linker'#010+
    -  '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
    -  'r'#010+
    +  '**2Fm<x>_Load unicode conversion ','table from <x>.txt in the compiler '+
    +  'dir'#010+
       '**2FM<x>_Set the directory where to search for unicode binary files'#010+
    -  '**2Fo<x>_A','dd <x> to object path'#010+
    +  '**2Fo<x>_Add <x> to object path'#010+
       '**2Fr<x>_Load error message file <x>'#010+
       '**2FR<x>_Set resource (.res) linker to <x>'#010+
    -  '**2Fu<x>_Add <x> to unit path'#010+
    +  '**2Fu<x>_Add <x> to u','nit path'#010+
       '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
    -  '**2FW<x>_Store generated whole-program optimization feed','back in <x>'#010+
    +  '**2FW<x>_Store generated whole-program optimization feedback in <x>'#010+
       '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
       'om <x>'#010+
    -  '*g1g_Generate debug information (default format for target)'#010+
    +  '*g1g_Generate debug information (d','efault format for target)'#010+
       '*g2gc_Generate checks for pointers'#010+
    -  '*g2gh_Use heaptrace unit (for memory leak/corruption deb','ugging)'#010+
    +  '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
       '*g2gl_Use line info unit (show more info with backtraces)'#010+
       '*g2go<x>_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 pa','ths in Sta'+
    -  'bs'#010+
    +  '*g3godwarfsets_ En','able DWARF '#039'set'#039' type debug information (b'+
    +  'reaks gdb < 6.5)'#010+
    +  '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
    +  #010+
       '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+
       'ame'#010+
    -  '*g2gp_Preserve case in stabs symbol names'#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_Generat','es programs traceable with Valgrind'#010+
    +  '*g2gv_Generates programs traceable with Valgrind'#010+
       '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
    -  '*g2gw2_Generate DWARFv2 debug information'#010+
    +  '*g2gw2_Generate DWARFv2 debug i','nformation'#010+
       '*g2gw3_Generate DWARFv3 debug information'#010+
       '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+
    -  '**1i_In','formation'#010+
    +  '**1i_Information'#010+
       '**2iD_Return compiler date'#010+
       '**2iV_Return short compiler version'#010+
       '**2iW_Return full compiler version'#010+
    -  '**2iSO_Return compiler OS'#010+
    +  '**2iSO_Return c','ompiler OS'#010+
       '**2iSP_Return compiler host processor'#010+
       '**2iTO_Return target OS'#010+
       '**2iTP_Return target processor'#010+
    -  '**1I<x>_Add <','x> to include path'#010+
    +  '**1I<x>_Add <x> to include path'#010+
       '**1k<x>_Pass <x> to the linker'#010+
       '**1l_Write logo'#010+
       '**1M<x>_Set language mode to <x>'#010+
    -  '**2Mfpc_Free Pascal dialect (default)'#010+
    +  '**2Mfpc_Free Pascal dial','ect (default)'#010+
       '**2Mobjfpc_FPC mode with Object Pascal support'#010+
       '**2Mdelphi_Delphi 7 compatibility mode'#010+
    -  '**2Mtp_TP/BP 7.0 ','compatibility mode'#010+
    +  '**2Mtp_TP/BP 7.0 compatibility mode'#010+
       '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
       '**1n_Do not read the default config files'#010+
    -  '**1o<x>_Change the name of the executable produced to <x>'#010+
    +  '**1o<x','>_Change the name of the executable produced to <x>'#010+
       '**1O<x>_Optimizations:'#010+
       '**2O-_Disable optimizations'#010+
    -  '**2O1_Level 1 ','optimizations (quick and debugger friendly)'#010+
    +  '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
       '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
    -  '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
    +  '**2O3_Level 3 optimizat','ions (-O2 + slow optimizations)'#010+
       '**2O4_Level 4 optimizations (-O3 + optimizations which might have unex'+
    -  'pected side eff','ects)'#010+
    +  'pected side effects)'#010+
       '**2Oa<x>=<y>_Set alignment'#010+
       '**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possible '+
       'values'#010+
    -  '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+
    -  #010+
    -  '**2OW<x>_Generate whole-program optimization feedback for o','ptimizati'+
    -  'on <x>, see fpc -i for possible values'#010+
    +  '**2Op<x>_Set ','target cpu for optimizing, see fpc -i for possible valu'+
    +  'es'#010+
    +  '**2OW<x>_Generate whole-program optimization feedback for optimization'+
    +  ' <x>, see fpc -i for possible values'#010+
       '**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+
    -  'le values'#010+
    +  'le va','lues'#010+
       '**2Os_Optimize for size rather than speed'#010+
       '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
    -  'F*1P<x>_Ta','rget CPU / compiler related options:'#010+
    +  'F*1P<x>_Target CPU / compiler related options:'#010+
       'F*2PB_Show default compiler binary'#010+
       'F*2PP_Show default target cpu'#010+
    -  'F*2P<x>_Set target CPU (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,sp'+
    -  'arc,x86_64'#010+
    +  'F*2P<x>_Set target CP','U (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,'+
    +  'sparc,x86_64'#010+
       '**1R<x>_Assembler reading style:'#010+
    -  '**2Rdefault_Use default ','assembler for target'#010+
    +  '**2Rdefault_Use default assembler for target'#010+
       '3*2Ratt_Read AT&T style assembler'#010+
       '3*2Rintel_Read Intel style assembler'#010+
    -  '6*2RMOT_Read motorola style assembler'#010+
    +  '6*2RMOT_Read motorola style ass','embler'#010+
       '**1S<x>_Syntax options:'#010+
       '**2S2_Same as -Mobjfpc'#010+
       '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
    -  '**2Sa_Turn on ','assertions'#010+
    +  '**2Sa_Turn on assertions'#010+
       '**2Sd_Same as -Mdelphi'#010+
       '**2Se<x>_Error options. <x> is a combination of the following:'#010+
    -  '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
    +  '**3*_<n> : Compiler halts ','after the <n> errors (default is 1)'#010+
       '**3*_w : Compiler also halts after warnings'#010+
    -  '**3*_n : Compiler also halts after no','tes'#010+
    +  '**3*_n : Compiler also halts after notes'#010+
       '**3*_h : Compiler also halts after hints'#010+
       '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
    -  '**2Sh_Use reference counted strings (ansistring by default) instead of'+
    -  ' shortstrings'#010+
    -  '**2Si_Turn on inlining of procedures/functions decla','red as "inline"'#010+
    +  '**2Sh_Use reference',' counted strings (ansistring by default) instead '+
    +  'of shortstrings'#010+
    +  '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
       '**2Sk_Load fpcylix unit'#010+
       '**2SI<x>_Set interface style to <x>'#010+
       '**3SIcom_COM compatible interface (default)'#010+
    -  '**3SIcorba_CORBA compatible interface'#010+
    +  '**3','SIcorba_CORBA compatible interface'#010+
       '**2Sm_Support macros like C (global)'#010+
       '**2So_Same as -Mtp'#010+
    -  '**2Ss_Constructor name mus','t be init (destructor must be done)'#010+
    +  '**2Ss_Constructor name must be init (destructor must be done)'#010+
       '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
    -  '**2Sy_@<pointer> returns a typed pointer, same as $T+'#010+
    +  '**2Sy_@<pointer> retur','ns a typed pointer, same as $T+'#010+
       '**1s_Do not call assembler and linker'#010+
       '**2sh_Generate script to link on host'#010+
    -  '**2st_Gen','erate script to link on target'#010+
    +  '**2st_Generate script to link on target'#010+
       '**2sr_Skip register allocation phase (use with -alr)'#010+
       '**1T<x>_Target operating system:'#010+
    -  '3*2Tdarwin_Darwin/Mac OS X'#010+
    +  '3*2Tda','rwin_Darwin/Mac OS X'#010+
       '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
       '3*2Tfreebsd_FreeBSD'#010+
    -  '3*2Tgo32v2_Version 2 of DJ',' Delorie DOS extender'#010+
    +  '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
       '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+
       'rwin)'#010+
       '3*2Tlinux_Linux'#010+
    -  '3*2Tnativent_Native NT API (experimental)'#010+
    +  '3*2Tnativ','ent_Native NT API (experimental)'#010+
       '3*2Tnetbsd_NetBSD'#010+
       '3*2Tnetware_Novell Netware Module (clib)'#010+
    -  '3*2Tnetwlibc_Novell Netwa','re Module (libc)'#010+
    +  '3*2Tnetwlibc_Novell Netware Module (libc)'#010+
       '3*2Topenbsd_OpenBSD'#010+
       '3*2Tos2_OS/2 / eComStation'#010+
       '3*2Tsunos_SunOS/Solaris'#010+
       '3*2Tsymbian_Symbian OS'#010+
    -  '3*2Tsolaris_Solaris'#010+
    +  '3*2Tsolaris_','Solaris'#010+
       '3*2Twatcom_Watcom compatible DOS extender'#010+
       '3*2Twdosx_WDOSX DOS extender'#010+
       '3*2Twin32_Windows 32 Bit'#010+
    -  '3*2Twince_Win','dows CE'#010+
    +  '3*2Twince_Windows CE'#010+
       '4*2Tdarwin_Darwin/Mac OS X'#010+
       '4*2Tlinux_Linux'#010+
       '4*2Twin64_Win64 (64 bit Windows systems)'#010+
       '6*2Tamiga_Commodore Amiga'#010+
    -  '6*2Tatari_Atari ST/STe/TT'#010+
    +  '6*2Ta','tari_Atari ST/STe/TT'#010+
       '6*2Tlinux_Linux'#010+
       '6*2Tpalmos_PalmOS'#010+
       'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+
       'A*2Tlinux_Linux'#010+
    -  'A*2Twince_Windo','ws CE'#010+
    +  'A*2Twince_Windows CE'#010+
       'P*2Tamiga_AmigaOS'#010+
       'P*2Tdarwin_Darwin/Mac OS X'#010+
       'P*2Tlinux_Linux'#010+
       'P*2Tmacos_Mac OS (classic)'#010+
       'P*2Tmorphos_MorphOS'#010+
    -  'S*2Tsolaris_Solaris'#010+
    +  'S*2Tsolar','is_Solaris'#010+
       'S*2Tlinux_Linux'#010+
       '**1u<x>_Undefines the symbol <x>'#010+
       '**1U_Unit options:'#010+
    -  '**2Un_Do not check where the unit name',' matches the file name'#010+
    +  '**2Un_Do not check where the unit name matches the file name'#010+
       '**2Ur_Generate release unit files (never automatically recompiled)'#010+
       '**2Us_Compile a system unit'#010+
    -  '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
    -  '**2*_e : Show errors (default)       0 : Show nothing (','except errors'+
    -  ')'#010+
    +  '**1v<','x>_Be verbose. <x> 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*_n : Show notes                  t : Show tried/','used files'#010+
       '**2*_h : Show hints                  c : Show conditionals'#010+
    -  '**2*_i : Show general info           d : Show d','ebug info'#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 : Sh','ow message numbers'#010+
       '**2*_a : Show everything             x : Executable info (Win32 only)'#010+
    -  '**2*_b : Write file names me','ssages   p : Write tree.log with parse t'+
    -  'ree'#010+
    +  '**2*_b : Write file names messages   p : Write tree.log with parse tre'+
    +  'e'#010+
       '**2*_    with full path              v : Write fpcdebug.txt with'#010+
    -  '**2*_                                    lots of debugging info'#010+
    +  '**2*_         ','                           lots of debugging info'#010+
       '**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+
    -  'F*1V<x>_Ap','pend '#039'-<x>'#039' to the used compiler binary name (e.g.'+
    -  ' for version)'#010+
    +  'F*1V<x>_Append '#039'-<x>'#039' to the used compiler binary name (e.g. f'+
    +  'or version)'#010+
       '**1W<x>_Target-specific options (targets)'#010+
    -  '3*2WA_Specify native type application (Windows)'#010+
    +  '3*2WA_Specify nat','ive type application (Windows)'#010+
       '4*2WA_Specify native type application (Windows)'#010+
    -  'A*2WA_Specify native type application ','(Windows)'#010+
    +  'A*2WA_Specify native type application (Windows)'#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+
    +  'p*2Wb_Cre','ate a bundle instead of a library (Darwin)'#010+
       'A*2Wb_Create a bundle instead of a library (Darwin)'#010+
    -  '4*2Wb_Create a bundle ','instead of a library (Darwin)'#010+
    +  '4*2Wb_Create a bundle instead of a library (Darwin)'#010+
       '3*2WB_Create a relocatable image (Windows, Symbian)'#010+
    -  '3*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
    +  '3*2WBxxxx_Set image base to xxxx (Windows',', Symbian)'#010+
       '4*2WB_Create a relocatable image (Windows)'#010+
       '4*2WBxxxx_Set image base to xxxx (Windows)'#010+
    -  'A*2WB_Create a reloc','atable image (Windows, Symbian)'#010+
    +  'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
       'A*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
    -  '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
    +  '3*2WC_Specify console type application ','(EMX, OS/2, Windows)'#010+
       '4*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
    -  'A*2WC_Specify console type applicati','on (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+
    +  '3*2WD_Use DEFFILE to export functions of DLL or EXE (W','indows)'#010+
       '4*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+
    +  '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+
    +  'A*2We_Use external resources (Da','rwin)'#010+
       'P*2We_Use external resources (Darwin)'#010+
       'p*2We_Use external resources (Darwin)'#010+
    -  '3*2WF_Specify full-screen type appl','ication (EMX, OS/2)'#010+
    +  '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
       '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
    -  '4*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
    +  '4*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 Mac OS)'#010+
       '3*2Wi_Use internal resources (Darwin)'#010+
       '4*2Wi_Use internal resources (Darwin)'#010+
       'A*2Wi_Use internal resources (Darwin)'#010+
    -  'P*2Wi_Use internal resources (Darwin)'#010+
    +  'P*2W','i_Use internal resources (Darwin)'#010+
       'p*2Wi_Use internal resources (Darwin)'#010+
    -  '3*2WI_Turn on/off the usage of import section','s (Windows)'#010+
    +  '3*2WI_Turn on/off the usage of import sections (Windows)'#010+
       '4*2WI_Turn on/off the usage of import sections (Windows)'#010+
    -  'A*2WI_Turn on/off the usage of import sections (Windows)'#010+
    +  'A*2WI_Turn on/off the usage of import sections (Window','s)'#010+
       '8*2Wm<x>_Set memory model'#010+
       '8*3WmTiny_Tiny memory model'#010+
       '8*3WmSmall_Small memory model (default)'#010+
    -  '8*3WmMedium_Medium m','emory model'#010+
    +  '8*3WmMedium_Medium memory model'#010+
       '3*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
       'n)'#010+
    -  '4*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
    -  'n)'#010+
    +  '4*2WM<x>_Minimum Mac OS X deployment v','ersion: 10.4, 10.5.1, ... (Dar'+
    +  'win)'#010+
       'p*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
       'n)'#010+
    -  'P*2WM<x>_','Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Dar'+
    -  'win)'#010+
    -  '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
    +  'P*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
    +  'n)'#010+
    +  '3*2WN_Do not generate relocation code, needed for debugging',' (Windows'+
    +  ')'#010+
       '4*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
    -  'A*2WN_Do not generate relocation cod','e, needed for debugging (Windows'+
    -  ')'#010+
    +  'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
       'A*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
    -  'V*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
    -  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesi','m)'+
    -  #010+
    +  'V*2Wpxxxx_Specify t','he controller type, see fpc -i for possible value'+
    +  's'#010+
    +  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesim)'#010+
       'A*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (Darwin)'#010+
       '3*2WR_Generate relocation code (Windows)'#010+
    -  '4*2WR_Generate relocation code (Windows)'#010+
    +  '4*2WR_Generat','e relocation code (Windows)'#010+
       'A*2WR_Generate relocation code (Windows)'#010+
       '8*2Wt<x>_Set the target executable format'#010+
    -  '8*3Wte','xe_Create a DOS .EXE file (default)'#010+
    +  '8*3Wtexe_Create a DOS .EXE file (default)'#010+
       '8*3Wtcom_Create a DOS .COM file (requires tiny memory model)'#010+
    -  'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
    +  'P*2WT_Specify MPW tool typ','e application (Classic Mac OS)'#010+
       '**2WX_Enable executable stack (Linux)'#010+
       '**1X_Executable options:'#010+
    -  '**2Xc_Pass --shared/-dy','namic to the linker (BeOS, Darwin, FreeBSD, L'+
    -  'inux)'#010+
    +  '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
    +  'ux)'#010+
       '**2Xd_Do not search default library path (sometimes required for cross'+
    -  '-compiling when not using -XR)'#010+
    +  '-c','ompiling when not using -XR)'#010+
       '**2Xe_Use external linker'#010+
    -  '**2Xg_Create debuginfo in a separate file and add a debuglink ','sectio'+
    -  'n to executable'#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+
    -  '**2Xm_Generate link map'#010+
    +  '**2Xm_G','enerate link map'#010+
       '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
       's '#039'main'#039')'#010+
    -  'F*2Xp<x>_First search for th','e compiler binary in the directory <x>'#010+
    +  'F*2Xp<x>_First search for the compiler binary in the directory <x>'#010+
       '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
    -  '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+
    -  'ile, see the ld manual for more information) (BeOS, Linux)'#010+
    -  '**2XR<x>_Prepend <x>',' to all linker search paths (BeOS, Darwin, FreeB'+
    -  'SD, Linux, Mac OS, Solaris)'#010+
    +  '**2Xr<x>_Set the linker'#039's rl','ink-path to <x> (needed for cross co'+
    +  'mpile, see the ld manual for more information) (BeOS, Linux)'#010+
    +  '**2XR<x>_Prepend <x> 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, defines FPC_LINK_STATIC)'#010+
    -  '**2Xt_Link with static libraries (-static is passed to',' linker)'#010+
    +  '**2XS_T','ry to link units statically (default, defines FPC_LINK_STATIC'+
    +  ')'#010+
    +  '**2Xt_Link with static libraries (-static is passed to linker)'#010+
       '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
       '**1*_'#010+
       '**1?_Show this help'#010+
    -  '**1h_Shows this help without waiting'
    +  '**1h_Shows this help w','ithout waiting'
     );
    Index: ncgflw.pas
    ===================================================================
    --- ncgflw.pas	(revision 26481)
    +++ ncgflw.pas	(working copy)
    @@ -422,259 +422,70 @@
     
     
         procedure tcgfornode.pass_generate_code;
    -      var
    -         l3,oldclabel,oldblabel,
    -         otl, ofl : tasmlabel;
    +       type
    +         tcompconst = (cc_false, cc_true, cc_true_withrangecheck);
    +       var
              temptovalue : boolean;
    -         hop : topcg;
    -         hcond : topcmp;
              opsize : tcgsize;
    -         count_var_is_signed,do_loopvar_at_end : boolean;
    -         cmp_const:Tconstexprint;
    -         oldflowcontrol : tflowcontrol;
    -         oldexecutionweight : longint;
    -         isjump: boolean;
    -      begin
    -         location_reset(location,LOC_VOID,OS_NO);
    -         ofl:=nil;
    -         otl:=nil;
    +         count_var_is_signed : boolean;
    +         step : aint;
     
    -         oldclabel:=current_procinfo.CurrContinueLabel;
    -         oldblabel:=current_procinfo.CurrBreakLabel;
    -         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
    -         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
    -         current_asmdata.getjumplabel(l3);
    -
    -         { only calculate reference }
    -         opsize := def_cgsize(left.resultdef);
    -         count_var_is_signed:=is_signed(left.resultdef);
    -
    -         { first set the to value
    -           because the count var can be in the expression ! }
    -         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
    -         { if the loop is unrolled and there is a jump into the loop,
    -           then we can't do the trick with incrementing the loop var only at the
    -           end
    -         }
    -           and not(assigned(entrylabel));
    -
    -        isjump:=(t1.expectloc=LOC_JUMP);
    -        if isjump then
    -          begin
    -             otl:=current_procinfo.CurrTrueLabel;
    -             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    -             ofl:=current_procinfo.CurrFalseLabel;
    -             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    -          end;
    -        secondpass(t1);
    -        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
    -          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
    -        if isjump then
    -          begin
    -            current_procinfo.CurrTrueLabel:=otl;
    -            current_procinfo.CurrFalseLabel:=ofl;
    -          end;
    -         { calculate pointer value and check if changeable and if so }
    -         { load into temporary variable                       }
    -         if t1.nodetype<>ordconstn then
    -           begin
    -              do_loopvar_at_end:=false;
    -              temptovalue:=true;
    -           end
    -         else
    -           temptovalue:=false;
    -
    -         { load loopvar, prefer loopvar being a register variable }
    -         oldexecutionweight:=cg.executionweight;
    -         inc(cg.executionweight,8);
    -         secondpass(left);
    -         cg.executionweight:=oldexecutionweight;
    -
    -         { load from value }
    -         isjump:=(right.expectloc=LOC_JUMP);
    -         if isjump then
    -           begin
    -              otl:=current_procinfo.CurrTrueLabel;
    -              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    -              ofl:=current_procinfo.CurrFalseLabel;
    -              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    -           end;
    -         secondpass(right);
    -         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
    -           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
    -         if isjump then
    -           begin
    -             current_procinfo.CurrTrueLabel:=otl;
    -             current_procinfo.CurrFalseLabel:=ofl;
    -           end;
    -
    -         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
    -         oldflowcontrol:=flowcontrol;
    -         include(flowcontrol,fc_inflowcontrol);
    -         { produce start assignment }
    -         case left.location.loc of
    -           LOC_REFERENCE,
    -           LOC_CREFERENCE :
    -             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
    -           LOC_REGISTER,
    -           LOC_CREGISTER:
    -             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
    -           LOC_SUBSETREG,
    -           LOC_CSUBSETREG :
    -             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
    -           else
    -             internalerror(200501311);
    -         end;
    -
    -         if lnf_backward in loopflags then
    -           if count_var_is_signed then
    -             hcond:=OC_LT
    -           else
    -             hcond:=OC_B
    -         else
    -           if count_var_is_signed then
    -             hcond:=OC_GT
    -           else
    -             hcond:=OC_A;
    -
    -         sync_regvars(true);
    -{$ifdef OLDREGVARS}
    -         load_all_regvars(current_asmdata.CurrAsmList);
    -{$endif OLDREGVARS}
    -
    -         if temptovalue then
    -           begin
    -             case t1.location.loc of
    -               LOC_REGISTER,LOC_CREGISTER:
    -                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -                   t1.location.register,left.location,current_procinfo.CurrBreakLabel);
    -               LOC_REFERENCE,LOC_CREFERENCE:
    -                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -                   t1.location.reference,left.location,current_procinfo.CurrBreakLabel);
    -             else
    -               InternalError(2013051601);
    -             end;
    -           end
    -         else
    -           begin
    -             if lnf_testatbegin in loopflags then
    -               begin
    -                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -                   tordconstnode(t1).value.svalue,
    -                   left.location,current_procinfo.CurrBreakLabel);
    -               end;
    -           end;
    -
    -         {If the loopvar doesn't mind on exit, we avoid this ugly
    -          dec instruction and do the loopvar inc/dec after the loop
    -          body.}
    -         if not do_loopvar_at_end then
    -            begin
    -              if lnf_backward in loopflags then
    -                hop:=OP_ADD
    -              else
    -                hop:=OP_SUB;
    -              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
    -            end;
    -
    -         if assigned(entrylabel) then
    -           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
    -
    -         { align loop target }
    -         if not(cs_opt_size in current_settings.optimizerswitches) then
    -            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
    -         hlcg.a_label(current_asmdata.CurrAsmList,l3);
    -
    -         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
    -          after the loop body instead of here.}
    -         if not do_loopvar_at_end then
    -            begin
    -              { according to count direction DEC or INC... }
    -              if lnf_backward in loopflags then
    -                hop:=OP_SUB
    -              else
    -                hop:=OP_ADD;
    -              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
    -            end;
    -
    -         if assigned(t2) then
    -           begin
    -             { Calc register weight }
    -             oldexecutionweight:=cg.executionweight;
    -             cg.executionweight:=cg.executionweight*8;
    -             secondpass(t2);
    -             cg.executionweight:=oldexecutionweight;
    -{$ifdef OLDREGVARS}
    -             load_all_regvars(current_asmdata.CurrAsmList);
    -{$endif OLDREGVARS}
    -           end;
    -
    -         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
    -          after the loop body instead of here.}
    -         if do_loopvar_at_end then
    -            begin
    -              { according to count direction DEC or INC... }
    -              if lnf_backward in loopflags then
    -                hop:=OP_SUB
    -              else
    -                hop:=OP_ADD;
    -              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
    -            end;
    -
    -         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
    -
    -         if do_loopvar_at_end then
    -           if lnf_backward in loopflags then
    +        procedure check_loopvar(comp_greater, comp_equal : boolean;
    +                                check_carry : boolean;
    +                                jump_to_label : tasmlabel;
    +                                check_const : tcompconst);
    +        var
    +          hcond: topcmp;
    +          cmp_const: Tconstexprint;
    +        begin
    +          if check_carry then { jump to break if the carry flag is set }
    +            hlcg.a_jmp_flags(current_asmdata.CurrAsmList, F_C, current_procinfo.CurrBreakLabel);
    +          if comp_equal then
    +            if comp_greater then
    +               if count_var_is_signed then
    +                 hcond:=OC_GTE
    +               else
    +                 hcond:=OC_AE
    +            else // forward
    +                if count_var_is_signed then
    +                  hcond:=OC_LTE
    +                else
    +                  hcond:=OC_BE
    +         else // is_before_body
    +            if comp_greater then
                  if count_var_is_signed then
    -               hcond:=OC_GTE
    -             else
    -               hcond:=OC_AE
    -            else
    -              if count_var_is_signed then
    -                hcond:=OC_LTE
    -              else
    -                hcond:=OC_BE
    -         else
    -           if lnf_backward in loopflags then
    -             if count_var_is_signed then
                    hcond:=OC_GT
                  else
                    hcond:=OC_A
    -            else
    +            else // forward
                   if count_var_is_signed then
                     hcond:=OC_LT
                   else
                     hcond:=OC_B;
    -{$ifdef OLDREGVARS}
    -         load_all_regvars(current_asmdata.CurrAsmList);
    -{$endif OLDREGVARS}
     
    -         { produce comparison and the corresponding }
    -         { jump                                     }
              if temptovalue then
                begin
                  case t1.location.loc of
                    LOC_REGISTER,LOC_CREGISTER:
    -                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.register,
    -                   left.location,l3);
    +                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    +                   t1.location.register,left.location,jump_to_label);
                    LOC_REFERENCE,LOC_CREFERENCE:
    -                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.reference,
    -                   left.location,l3);
    +                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    +                   t1.location.reference,left.location,jump_to_label);
                  else
    -               InternalError(2013051602);
    +               InternalError(2013051601);
                  end;
                end
              else
                begin
    -             cmp_const:=Tordconstnode(t1).value;
    -             if do_loopvar_at_end then
    +             if check_const=cc_true_withrangecheck then
                    begin
    -                 {Watch out for wrap around 255 -> 0.}
    -                 {Ugly: This code is way to long... Use tables?}
    +                 cmp_const:=Tordconstnode(t1).value;
    +                 // we check here if we need to alter hcond if the loopvar range is met
                      case opsize of
                        OS_8:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if byte(cmp_const.svalue)=low(byte) then
                                  begin
    @@ -693,7 +504,7 @@
                          end;
                        OS_16:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if word(cmp_const.svalue)=high(word) then
                                  begin
    @@ -712,7 +523,7 @@
                          end;
                        OS_32:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if cardinal(cmp_const.svalue)=high(cardinal) then
                                  begin
    @@ -731,7 +542,7 @@
                          end;
                        OS_64:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if qword(cmp_const.uvalue)=high(qword) then
                                  begin
    @@ -750,7 +561,7 @@
                          end;
                        OS_S8:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if shortint(cmp_const.svalue)=low(shortint) then
                                  begin
    @@ -769,7 +580,7 @@
                          end;
                        OS_S16:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if integer(cmp_const.svalue)=high(smallint) then
                                  begin
    @@ -788,7 +599,7 @@
                          end;
                        OS_S32:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if longint(cmp_const.svalue)=high(longint) then
                                  begin
    @@ -807,7 +618,7 @@
                          end;
                        OS_S64:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if int64(cmp_const.svalue)=high(int64) then
                                  begin
    @@ -829,10 +640,216 @@
                      end;
                    end;
     
    -             hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -               aint(cmp_const.svalue),left.location,l3);
    +             if check_const >= cc_true then
    +               begin
    +                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    +                   tordconstnode(t1).value.svalue,
    +                   left.location,jump_to_label);
    +               end;
                end;
    +        end;
     
    +        procedure do_loopvar(is_backward : boolean);
    +          var
    +            hop: topcg;
    +          begin
    +            { according to count direction DEC or INC... }
    +            if is_backward then
    +              hop:=OP_SUB
    +            else
    +              hop:=OP_ADD;
    +            hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,step,left.location);
    +          end;
    +
    +      var
    +         l3,l4,oldclabel,oldblabel,
    +         otl, ofl : tasmlabel;
    +         do_compare_before: boolean;
    +         do_loopvar_at_end : boolean;
    +         oldflowcontrol : tflowcontrol;
    +         oldexecutionweight : longint;
    +         isjump: boolean;
    +      begin
    +         location_reset(location,LOC_VOID,OS_NO);
    +         ofl:=nil;
    +         otl:=nil;
    +
    +         oldclabel:=current_procinfo.CurrContinueLabel;
    +         oldblabel:=current_procinfo.CurrBreakLabel;
    +         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
    +         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
    +         current_asmdata.getjumplabel(l3);
    +         current_asmdata.getjumplabel(l4);
    +
    +         { only calculate reference }
    +         opsize := def_cgsize(left.resultdef);
    +         count_var_is_signed:=is_signed(left.resultdef);
    +
    +         { set a value for step. 1 by default }
    +         if not assigned(loopstep) then
    +           step:=1
    +         else
    +           step:=tordconstnode(loopstep).value;
    +
    +         { first set the to value
    +           because the count var can be in the expression ! }
    +         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
    +         { if the loop is unrolled and there is a jump into the loop,
    +           then we can't do the trick with incrementing the loop var only at the
    +           end
    +         }
    +           and not(assigned(entrylabel));
    +
    +        do_compare_before:=not do_loopvar_at_end and (abs(step) > 1);
    +
    +        isjump:=(t1.expectloc=LOC_JUMP);
    +        if isjump then
    +          begin
    +             otl:=current_procinfo.CurrTrueLabel;
    +             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    +             ofl:=current_procinfo.CurrFalseLabel;
    +             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    +          end;
    +        secondpass(t1);
    +        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
    +          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
    +        if isjump then
    +          begin
    +            current_procinfo.CurrTrueLabel:=otl;
    +            current_procinfo.CurrFalseLabel:=ofl;
    +          end;
    +         { calculate pointer value and check if changeable and if so }
    +         { load into temporary variable                       }
    +         if t1.nodetype<>ordconstn then
    +           begin
    +              do_loopvar_at_end:=false;
    +              temptovalue:=true;
    +           end
    +         else
    +           temptovalue:=false;
    +
    +         { load loopvar, prefer loopvar being a register variable }
    +         oldexecutionweight:=cg.executionweight;
    +         inc(cg.executionweight,8);
    +         secondpass(left);
    +         cg.executionweight:=oldexecutionweight;
    +
    +         { load from value }
    +         isjump:=(right.expectloc=LOC_JUMP);
    +         if isjump then
    +           begin
    +              otl:=current_procinfo.CurrTrueLabel;
    +              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    +              ofl:=current_procinfo.CurrFalseLabel;
    +              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    +           end;
    +         secondpass(right);
    +         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
    +           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
    +         if isjump then
    +           begin
    +             current_procinfo.CurrTrueLabel:=otl;
    +             current_procinfo.CurrFalseLabel:=ofl;
    +           end;
    +
    +         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
    +         oldflowcontrol:=flowcontrol;
    +         include(flowcontrol,fc_inflowcontrol);
    +         { produce start assignment }
    +         case left.location.loc of
    +           LOC_REFERENCE,
    +           LOC_CREFERENCE :
    +             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
    +           LOC_REGISTER,
    +           LOC_CREGISTER:
    +             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
    +           LOC_SUBSETREG,
    +           LOC_CSUBSETREG :
    +             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
    +           else
    +             internalerror(200501311);
    +         end;
    +
    +         sync_regvars(true);
    +{$ifdef OLDREGVARS}
    +         load_all_regvars(current_asmdata.CurrAsmList);
    +{$endif OLDREGVARS}
    +         check_loopvar(not (lnf_backward in loopflags), False, False{check_carry}, current_procinfo.CurrBreakLabel, tcompconst(ord(lnf_testatbegin in loopflags)));
    +
    +         {If the loopvar doesn't mind on exit, we avoid this ugly
    +          dec instruction and do the loopvar inc/dec after the loop
    +          body.}
    +         if not do_loopvar_at_end and not do_compare_before then
    +           do_loopvar(not (lnf_backward in loopflags));
    +
    +         if assigned(entrylabel) then
    +           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
    +
    +         { align loop target }
    +         if not(cs_opt_size in current_settings.optimizerswitches) then
    +            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
    +
    +         { skip first compare since we've already done it. the jump is only
    +           included when the step value isn't 1. this is because we check the
    +           carry flag when step is > 1 and it gets set for the first iteration
    +           if we dec it from 0 and then back. }
    +         if do_compare_before then
    +           hlcg.a_jmp_always(current_asmdata.CurrAsmList,l4);
    +
    +         hlcg.a_label(current_asmdata.CurrAsmList,l3);
    +
    +         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
    +          after the loop body instead of here.}
    +         if not do_loopvar_at_end then
    +            begin
    +              { according to count direction DEC or INC... }
    +              do_loopvar(lnf_backward in loopflags);
    +
    +              if do_compare_before then
    +                 check_loopvar(not (lnf_backward in loopflags), False{comp_equal},step<>1,current_procinfo.CurrBreakLabel{jump_to}, cc_true_withrangecheck)
    +            end;
    +
    +         { jump here to avoid the first iteration of the loop reacting to the
    +           carry flag if the loopvar is on either end of the range at the start
    +           and rolls over
    +         }
    +         if do_compare_before then
    +           hlcg.a_label(current_asmdata.CurrAsmList,l4);
    +
    +         if assigned(t2) then
    +           begin
    +             { Calc register weight }
    +             oldexecutionweight:=cg.executionweight;
    +             cg.executionweight:=cg.executionweight*8;
    +             secondpass(t2);
    +             cg.executionweight:=oldexecutionweight;
    +{$ifdef OLDREGVARS}
    +             load_all_regvars(current_asmdata.CurrAsmList);
    +{$endif OLDREGVARS}
    +           end;
    +
    +         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
    +          after the loop body instead of here.}
    +         if do_loopvar_at_end then
    +            begin
    +              { according to count direction DEC or INC... }
    +              do_loopvar(lnf_backward in loopflags);
    +            end;
    +
    +         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
    +
    +{$ifdef OLDREGVARS}
    +         load_all_regvars(current_asmdata.CurrAsmList);
    +{$endif OLDREGVARS}
    +         if do_loopvar_at_end then
    +           check_loopvar(lnf_backward in loopflags, True{comp_equal},step<>1{check_carry},l3{jump_to}, cc_true_withrangecheck)
    +         else
    +           if do_compare_before then
    +              { jump to loop start where it might jump again to break }
    +              hlcg.a_jmp_always(current_asmdata.CurrAsmList, l3)
    +           else
    +             check_loopvar(lnf_backward in loopflags, False{comp_equal},step<>1{check_carry},l3{jump_to}, cc_true_withrangecheck);
    +
              { this is the break label: }
              hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrBreakLabel);
     
    Index: nflw.pas
    ===================================================================
    --- nflw.pas	(revision 26481)
    +++ nflw.pas	(working copy)
    @@ -99,8 +99,10 @@
               entrylabel,
               { this is a dummy node used by the dfa to store life information for the loop iteration }
               loopiteration : tnode;
    +          loopstep : tnode;
               loopvar_notid:cardinal;
    -          constructor create(l,r,_t1,_t2 : tnode;back : boolean);virtual;reintroduce;
    +          constructor create(l,r,_t1,_t2, step : tnode;back : boolean);virtual;reintroduce;
    +          destructor destroy; override;
               procedure loop_var_access(not_type:Tnotification_flag;symbol:Tsym);
               function wrap_to_value:tnode;
               function pass_typecheck:tnode;override;
    @@ -259,6 +261,7 @@
               cinlinenode.create(in_low_x,false,expr.getcopy),
               cinlinenode.create(in_high_x,false,expr.getcopy),
               hloopbody,
    +          nil{step node},
               false);
           end;
     
    @@ -529,6 +532,7 @@
               genintconstnode(1),
               cinlinenode.create(in_length_x,false,ctemprefnode.create(stringvar)),
               loopbody,
    +          nil{step node},
               false);
     
             addstatement(loopstatement,forloopnode);
    @@ -642,6 +646,7 @@
               lowbound,
               highbound,
               loopbody,
    +          nil{step node},
               false);
     
             addstatement(loopstatement,forloopnode);
    @@ -707,6 +712,7 @@
               cinlinenode.create(in_low_x,false,ctemprefnode.create(setvar)),
               cinlinenode.create(in_high_x,false,ctemprefnode.create(setvar)),
               loopbody,
    +          nil{step node},
               false);
     
             addstatement(loopstatement,forloopnode);
    @@ -1421,15 +1427,24 @@
                                   TFORNODE
     *****************************************************************************}
     
    -    constructor tfornode.create(l,r,_t1,_t2 : tnode;back : boolean);
    +    constructor tfornode.create(l,r,_t1,_t2, step : tnode;back : boolean);
     
           begin
              inherited create(forn,l,r,_t1,_t2);
    +         loopstep := step;
              if back then
                include(loopflags,lnf_backward);
              include(loopflags,lnf_testatbegin);
           end;
     
    +    destructor tfornode.destroy;
    +
    +      begin
    +         if assigned(loopstep) then
    +           loopstep.free;
    +         inherited destroy;
    +      end;
    +
         procedure Tfornode.loop_var_access(not_type:Tnotification_flag;
                                            symbol:Tsym);
     
    @@ -1497,13 +1512,14 @@
               t1));
             { create a new for node, it is cheaper than cloning entire loop body }
             addstatement(statements,cfornode.create(
    -          left,right,ctemprefnode.create(temp),t2,lnf_backward in loopflags));
    +          left,right,ctemprefnode.create(temp),t2,loopstep,lnf_backward in loopflags));
             addstatement(statements,ctempdeletenode.create(temp));
             { all child nodes are reused }
             left:=nil;
             right:=nil;
             t1:=nil;
             t2:=nil;
    +        loopstep:=nil;
           end;
     
     
    Index: ninl.pas
    ===================================================================
    --- ninl.pas	(revision 26481)
    +++ ninl.pas	(working copy)
    @@ -4192,6 +4192,7 @@
                cinlinenode.create(in_low_x,false,packednode.getcopy),
                cinlinenode.create(in_high_x,false,packednode.getcopy),
                loopbody,
    +           nil{step},
                false);
              addstatement(loopstatement,tempnode);
              { free the loop counter }
    Index: optloop.pas
    ===================================================================
    --- optloop.pas	(revision 26481)
    +++ optloop.pas	(working copy)
    @@ -102,12 +102,21 @@
             getridoffor : boolean;
             replaceinfo : treplaceinfo;
             usesbreakcontinue : boolean;
    +        stepvalue : Tconstexprint;
    +        stepcopy: tnode;
           begin
             result:=nil;
             if (cs_opt_size in current_settings.optimizerswitches) then
               exit;
             if not(node.nodetype in [forn]) then
               exit;
    +
    +        { set the loop step increment }
    +        if tfornode(node).loopstep=nil then
    +          stepvalue:=1
    +        else
    +          stepvalue:=tordconstnode(tfornode(node).loopstep).value;
    +
             unrolls:=number_unrolls(tfornode(node).t2);
             if unrolls>1 then
               begin
    @@ -115,10 +124,16 @@
                 if (tfornode(node).right.nodetype=ordconstn) and (tfornode(node).t1.nodetype=ordconstn) then
                   begin
                     if lnf_backward in tfornode(node).loopflags then
    -                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value+1
    +                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value
                     else
    -                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value+1;
    +                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value;
     
    +                if stepvalue > 1 then
    +                  counts:=counts div stepvalue + 1
    +                { always add 1}
    +                else
    +                  inc(counts);
    +
                     usesbreakcontinue:=foreachnodestatic(tfornode(node).t2,@checkbreakcontinue,nil);
     
                     { don't unroll more than we need,
    @@ -161,22 +176,28 @@
                           begin
                             foreachnodestatic(tnode(unrollstatement),@replaceloadnodes,@replaceinfo);
                             if lnf_backward in tfornode(node).loopflags then
    -                          replaceinfo.value:=replaceinfo.value-1
    +                          replaceinfo.value:=replaceinfo.value-stepvalue
                             else
    -                          replaceinfo.value:=replaceinfo.value+1;
    +                          replaceinfo.value:=replaceinfo.value+stepvalue;
                           end
                         else
                           begin
                             { for itself increases at the last iteration }
                             if i<unrolls then
                               begin
    +                            { create copy of step node if needed }
    +                            if tfornode(node).loopstep = nil then
    +                              stepcopy:=nil
    +                            else // if stepincrement
    +                              stepcopy:=ccallparanode.create(tfornode(node).loopstep.getcopy, nil);
    +
                                 { insert incr/decrementation of counter var }
                                 if lnf_backward in tfornode(node).loopflags then
                                   addstatement(unrollstatement,
    -                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)))
    +                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)))
                                 else
                                   addstatement(unrollstatement,
    -                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)));
    +                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)));
                               end;
                            end;
                       end;
    @@ -306,6 +327,7 @@
           var
             tempnode : ttempcreatenode;
             dummy : longint;
    +        stepcopy : tnode;
           begin
             result:=fen_false;
             case n.nodetype of
    @@ -344,14 +366,20 @@
                           inductionexprs.Add(n);
                           CreateNodes;
     
    +                      { check if we are using a stepvalue}
    +                      if not assigned(tfornode(arg).loopstep) then
    +                        stepcopy:=nil
    +                      else
    +                        stepcopy:=tfornode(arg).loopstep.getcopy;
    +
                           if lnf_backward in tfornode(arg).loopflags then
                             addstatement(calccodestatements,
                               geninlinenode(in_dec_x,false,
    -                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))))
    +                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))))
                           else
                             addstatement(calccodestatements,
                               geninlinenode(in_inc_x,false,
    -                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))));
    +                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))));
     
                           addstatement(initcodestatements,tempnode);
                           addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
    @@ -403,16 +431,22 @@
                           inductionexprs.Add(n);
                           CreateNodes;
     
    +                      { check if we are using a stepvalue}
    +                      if not assigned(tfornode(arg).loopstep) then
    +                        stepcopy:=nil
    +                      else
    +                        stepcopy:=tfornode(arg).loopstep.getcopy;
    +
                           if lnf_backward in tfornode(arg).loopflags then
                             addstatement(calccodestatements,
                               geninlinenode(in_dec_x,false,
                               ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
    -                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))))
    +                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))))
                           else
                             addstatement(calccodestatements,
                               geninlinenode(in_inc_x,false,
                               ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
    -                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))));
    +                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))));
     
                           addstatement(initcodestatements,tempnode);
                           addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
    @@ -467,11 +501,12 @@
                 { create a new for node, the old one will be released by the compiler }
                 with tfornode(node) do
                   begin
    -                fornode:=cfornode.create(left,right,t1,t2,lnf_backward in loopflags);
    +                fornode:=cfornode.create(left,right,t1,t2,loopstep,lnf_backward in loopflags);
                     left:=nil;
                     right:=nil;
                     t1:=nil;
                     t2:=nil;
    +                loopstep:=nil;
                   end;
                 node:=fornode;
     
    Index: pstatmnt.pas
    ===================================================================
    --- pstatmnt.pas	(revision 26481)
    +++ pstatmnt.pas	(working copy)
    @@ -370,8 +370,11 @@
               var
                  hp,
                  hblock,
    +             hstep,
                  hto,hfrom : tnode;
                  backward : boolean;
    +             usesstep : boolean;
    +             stepvalue: Tconstexprint;
                  loopvarsym : tabstractvarsym;
               begin
                  { Check loop variable }
    @@ -473,11 +476,49 @@
                    end;
     
                  hto:=comp_expr(true,false);
    +
    +             if try_to_consume(_BY) then
    +               begin
    +                 hstep:=comp_expr(true,false);
    +                 usesstep:=true;
    +
    +                 { we accept only ordinal consts and not enums }
    +                 if not is_ordinal(hstep.resultdef) or is_enum(hstep.resultdef) then
    +                   Message(type_e_ordinal_expr_expected)
    +                 else
    +                   if ErrorCount = 0 then
    +                     begin
    +                       stepvalue := get_ordinal_value(hstep);
    +                       if abs(stepvalue.svalue) = 1 then
    +                         begin
    +                           { no need to do anything if step = 1 }
    +                           hstep.free;
    +                           hstep := nil;
    +                           usesstep:=false;
    +                         end
    +                       else
    +                         if backward and (stepvalue.svalue >= 0) then
    +                           Message1(parser_e_expected_negative_by_value, tostr(stepvalue))
    +                         else if not backward and (stepvalue.svalue <= 0) then
    +                           Message1(parser_e_expected_positive_by_value, tostr(stepvalue))
    +                         else
    +                           if backward then
    +                             tordconstnode(hstep).value.uvalue := abs(stepvalue.svalue);
    +                     end;
    +               end
    +             else
    +               begin
    +                 hstep:=nil;
    +                 usesstep:=false;
    +               end;
    +
                  consume(_DO);
     
                  { Check if the constants fit in the range }
                  check_range(hfrom,hloopvar.resultdef);
                  check_range(hto,hloopvar.resultdef);
    +             if usesstep then
    +               check_range(hstep,hloopvar.resultdef);
     
                  { first set the varstate for from and to, so
                    uses of loopvar in those expressions will also
    @@ -488,6 +529,11 @@
                  set_varstate(hfrom,vs_read,[vsf_must_be_valid]);
                  typecheckpass(hto);
                  set_varstate(hto,vs_read,[vsf_must_be_valid]);
    +             if usesstep then
    +               begin
    +                 typecheckpass(hstep);
    +                 set_varstate(hstep,vs_read,[vsf_must_be_valid]);
    +               end;
                  typecheckpass(hloopvar);
                  { in two steps, because vs_readwritten may turn on vsf_must_be_valid }
                  { for some subnodes                                                  }
    @@ -501,7 +547,7 @@
                  if assigned(loopvarsym) then
                    exclude(loopvarsym.varoptions,vo_is_loop_counter);
     
    -             result:=cfornode.create(hloopvar,hfrom,hto,hblock,backward);
    +             result:=cfornode.create(hloopvar,hfrom,hto,hblock,hstep,backward);
               end;
     
     
    Index: tokens.pas
    ===================================================================
    --- tokens.pas	(revision 26481)
    +++ tokens.pas	(working copy)
    @@ -101,6 +101,7 @@
         _C,
         _AS,
         _AT,
    +    _BY,
         _DO,
         _IF,
         _IN,
    @@ -418,6 +419,7 @@
           (str:'C'             ;special:false;keyword:[m_none];op:NOTOKEN),
           (str:'AS'            ;special:false;keyword:[m_class];op:_OP_AS),
           (str:'AT'            ;special:false;keyword:[m_none];op:NOTOKEN),
    +      (str:'BY'            ;special:false;keyword:[m_none];op:NOTOKEN),
           (str:'DO'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
           (str:'IF'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
           (str:'IN'            ;special:false;keyword:alllanguagemodes;op:_OP_IN),
    
    for_by.patch (125,180 bytes)
  • for_by-noflags.patch (127,354 bytes)
    Index: jvm/njvmflw.pas
    ===================================================================
    --- jvm/njvmflw.pas	(revision 26481)
    +++ jvm/njvmflw.pas	(working copy)
    @@ -101,7 +101,7 @@
                   ctypeconvnode.create_explicit(ctemprefnode.create(iteratortmp),
                     olditerator.resultdef)));
                 addstatement(newbodystat,t2);
    -            addstatement(stat,cfornode.create(left,right,t1,newbody,lnf_backward in loopflags));
    +            addstatement(stat,cfornode.create(left,right,t1,newbody,loopstep,lnf_backward in loopflags));
                 addstatement(stat,ctempdeletenode.create(iteratortmp));
                 left:=nil;
                 right:=nil;
    Index: msg/errore.msg
    ===================================================================
    --- msg/errore.msg	(revision 26481)
    +++ msg/errore.msg	(working copy)
    @@ -398,7 +398,7 @@
     #
     # Parser
     #
    -# 03335 is the last used one
    +# 03337 is the last used one
     #
     % \section{Parser messages}
     % This section lists all parser messages. The parser takes care of the
    @@ -1501,6 +1501,10 @@
     parser_e_property_only_sgr=03335_E_Properties can be only static, global or inside structured types
     % Properties cannot be declared local, only global, using the static
     % directive or inside structured types.
    +parser_e_expected_positive_by_value=03336_E_Invalid value for by "$1" (must be greater than 0).
    +% The constant value for by must be greater than zero in a for to loop.
    +parser_e_expected_negative_by_value=03337_E_Invalid value for by "$1" (must be less than 0).
    +% The constant value for by must be less than zero in a for downto loop. 
     %
     %
     % \end{description}
    Index: msgidx.inc
    ===================================================================
    --- msgidx.inc	(revision 26481)
    +++ msgidx.inc	(working copy)
    @@ -433,6 +433,8 @@
       parser_e_dir_not_allowed=03333;
       parser_e_no_assembler_in_generic=03334;
       parser_e_property_only_sgr=03335;
    +  parser_e_expected_positive_by_value=03336;
    +  parser_e_expected_negative_by_value=03337;
       type_e_mismatch=04000;
       type_e_incompatible_types=04001;
       type_e_not_equal_types=04002;
    @@ -978,9 +980,9 @@
       option_info=11024;
       option_help_pages=11025;
     
    -  MsgTxtSize = 70217;
    +  MsgTxtSize = 70334;
     
       MsgIdxMax : array[1..20] of longint=(
    -    26,95,336,121,88,56,126,27,202,64,
    +    26,95,338,121,88,56,126,27,202,64,
         54,20,1,1,1,1,1,1,1,1
       );
    Index: msgtxt.inc
    ===================================================================
    --- msgtxt.inc	(revision 26481)
    +++ msgtxt.inc	(working copy)
    @@ -1,7 +1,7 @@
     {$ifdef Delphi}
    -const msgtxt : array[0..000292] of string[240]=(
    +const msgtxt : array[0..000293] of string[240]=(
     {$else Delphi}
    -const msgtxt : array[0..000292,1..240] of char=(
    +const msgtxt : array[0..000293,1..240] of char=(
     {$endif Delphi}
       '01000_T_Compiler: $1'#000+
       '01001_D_Compiler OS: $1'#000+
    @@ -542,669 +542,675 @@
       '03334_E_Assembler blocks not allowed inside generics'#000+
       '03335_E_Properties can be only static, global or inside structured typ'+
       'es'#000+
    +  '03336_E_Invalid value for by "$1" (must be greater than 0).'#000+
    +  '03337_E_Invalid',' value for by "$1" (must be less than 0).'#000+
       '04000_E_Type mismatch'#000+
       '04001_E_Incompatible types: got "$1" expected "$2"'#000+
    -  '04','002_E_Type mismatch between "$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+
    +  '04005_E_Int','eger expression expected, but got "$1"'#000+
       '04006_E_Boolean expression expected, but got "$1"'#000+
    -  '04007_E_Ordinal expression e','xpected'#000+
    +  '04007_E_Ordinal expression expected'#000+
       '04008_E_pointer type expected, but got "$1"'#000+
       '04009_E_class type expected, but got "$1"'#000+
    -  '04011_E_Can'#039't evaluate constant expression'#000+
    +  '04011_E_Can'#039't evaluate consta','nt expression'#000+
       '04012_E_Set elements are not compatible'#000+
       '04013_E_Operation not implemented for sets'#000+
    -  '04014_W_Automatic ty','pe conversion from floating 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+
    +  '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_Ca','n'#039't read or write variables of this type'#000+
    +  '04018_E_Can'#039't read or write variables of this type'#000+
       '04019_E_Can'#039't use readln or writeln on typed file'#000+
    -  '04020_E_Can'#039't use read or write on untyped file.'#000+
    +  '04020_E_Can'#039't use read or write ','on untyped file.'#000+
       '04021_E_Type conflict between set elements'#000+
    -  '04022_W_lo/hi(dword/qword) returns the upper/lower word/d','word'#000+
    +  '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
       '04023_E_Integer or real expression expected'#000+
       '04024_E_Wrong type "$1" in array constructor'#000+
    -  '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
    +  '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_Il','legal constant passed to internal math function'#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+
    +  '04029_E_Argument can',#039't be assigned to'#000+
       '04030_E_Can'#039't assign local procedure/function to procedure variabl'+
       'e'#000+
    -  '04031_E_Can'#039't assign values to ','an address'#000+
    +  '04031_E_Can'#039't assign values to an address'#000+
       '04032_E_Can'#039't assign values to const variable'#000+
       '04033_E_Array type required'#000+
    -  '04034_E_interface type expected, but got "$1"'#000+
    +  '04034_E_interface type expected, but g','ot "$1"'#000+
       '04035_H_Mixing signed expressions and longwords gives a 64bit result'#000+
    -  '04036_W_Mixing signed expressions and ca','rdinals here may cause a ran'+
    -  'ge check error'#000+
    +  '04036_W_Mixing signed expressions and cardinals here may cause a range'+
    +  ' check error'#000+
       '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
    -  '04038_E_enums with assignments can'#039't be used as array index'#000+
    +  '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 ty','pes "$1" and "$2" are not related'#000+
    +  '04040_W_Class types "$1" and "$2" are not related'#000+
       '04041_E_Class or interface type expected, but got "$1"'#000+
    -  '04042_E_Type "$1" is not completely defined'#000+
    +  '04042_E_Type "$1" is not completel','y defined'#000+
       '04043_W_String literal has more characters than short string length'#000+
    -  '04044_W_Comparison might be always fals','e due to range of constant an'+
    -  'd expression'#000+
    +  '04044_W_Comparison might be always false due to range of constant and '+
    +  'expression'#000+
       '04045_W_Comparison might be always true due to range of constant and e'+
       'xpression'#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+
    +  '0','4046_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 error'#000+
    -  '04049_H_Type size mismatch, possible loss of data / range check error'#000+
    +  '04049_H_Type size mismatch, possible loss of d','ata / range check erro'+
    +  'r'#000+
       '04050_E_The address of an abstract method can'#039't be taken'#000+
    -  '04051_E_Assignments to formal parame','ters and open arrays are not pos'+
    -  'sible'#000+
    +  '04051_E_Assignments to formal parameters and open arrays are not possi'+
    +  'ble'#000+
       '04052_E_Constant Expression expected'#000+
    -  '04053_E_Operation "$1" not supported for types "$2" and "$3"'#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 po','rtable'#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+
    +  '04057_E_Can'#039't determine which overloaded function t','o 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+
    +  'nt, 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+
    +  '04061_E_Constant packed arra','ys are not yet supported'#000+
       '04062_E_Incompatible type for arg no. $1: Got "$2" expected "(Bit)Pack'+
       'ed Array"'#000+
    -  '04063_E_Inco','mpatible type for arg no. $1: Got "$2" expected "(not pa'+
    -  'cked) Array"'#000+
    -  '04064_E_Elements of packed arrays cannot be of a type which need to be'+
    -  ' initialised'#000+
    +  '04063_E_Incompatible type for arg no. $1: Got "$2" expected "(not pack'+
    +  'ed) Array"'#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+}, s'+
    -  'uggest typecast'#000+
    +  '04066_W_Arithmetic "$1" on untyped pointer is unportable to {$T+}, sug'+
    +  'gest 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+
    +  '04','077_E_Can'#039't export subroutine marked as local from a unit'#000+
       '04078_E_Type is not automatable: "$1"'#000+
    -  '04079_H_Converting th','e 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'+
    +  '04079_H_Converting the operands to "$1" before doing the add could pre'+
    +  'vent overflow errors.'#000+
    +  '04080_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'+
       'd prevent overflow errors.'#000+
    -  '04081_H_Converting the operands to "$1" before doing the multiply coul'+
    -  'd ','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+
    +  'parison results and range er','rors, use an unsigned type instead.'#000+
       '04083_E_Interface type $1 has no valid GUID'#000+
       '04084_E_Invalid selector name "$1"'#000+
    -  '04','085_E_Expected Objective-C method, but got $1'#000+
    +  '04085_E_Expected Objective-C method, but got $1'#000+
       '04086_E_Expected Objective-C method or constant method name'#000+
    -  '04087_E_No type info available for this type'#000+
    +  '04087_E_No type i','nfo available for this type'#000+
       '04088_E_Ordinal or string expression expected'#000+
       '04089_E_String expression expected'#000+
    -  '04090_W_','Converting 0 to NIL'#000+
    +  '04090_W_Converting 0 to NIL'#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+
    +  '04092_E_The type "$1" is not supported for int','eraction with the Obje'+
    +  'ctive-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+
    -  '04096_E_Type parameters of specializations of generics cannot referenc'+
    -  'e the currently specialized type'#000+
    -  '04097_E_Type parameter','s are not allowed on non-generic class/record/'+
    -  'object procedure or function'#000+
    -  '04098_E_Generic declaration of "$1" differs from previous declaration'#000+
    +  '04096_E_','Type parameters of specializations of generics cannot refere'+
    +  'nce the currently specialized type'#000+
    +  '04097_E_Type parameters are not allowed on non-generic class/record/ob'+
    +  'ject procedure or function'#000+
    +  '04098_E_Generic declaration of "$1" differs from',' previous declaratio'+
    +  'n'#000+
       '04099_E_Helper type expected'#000+
       '04100_E_Record type expected'#000+
    -  '04101_E_Derived class helper must ext','end a subclass of "$1" or the c'+
    -  'lass itself'#000+
    +  '04101_E_Derived class helper must extend a subclass of "$1" or the cla'+
    +  'ss itself'#000+
       '04102_E_Derived record or type helper must extend "$1"'#000+
    -  '04103_E_Invalid assignment, procedures return no value'#000+
    +  '04103_E_Invalid assignmen','t, procedures return no value'#000+
       '04104_W_Implicit string type conversion from "$1" to "$2"'#000+
    -  '04105_W_Implicit string type ','conversion with potential data loss fro'+
    -  'm "$1" to "$2"'#000+
    +  '04105_W_Implicit string type conversion with potential data loss from '+
    +  '"$1" to "$2"'#000+
       '04106_-W_Explicit string typecast from "$1" to "$2"'#000+
    -  '04107_-W_Explicit string typecast with potential data loss from "$1" t'+
    -  'o "$2"'#000+
    +  '04107_-W_Explicit',' string typecast with potential data loss from "$1"'+
    +  ' to "$2"'#000+
       '04108_W_Unicode constant cast with potential data loss'#000+
    -  '04','109_E_range check error while evaluating constants ($1 must be bet'+
    +  '04109_E_range check error while evaluating constants ($1 must be betwe'+
    +  'en $2 and $3)'#000+
    +  '04110_W_range check error while evaluatin','g constants ($1 must be bet'+
       'ween $2 and $3)'#000+
    -  '04110_W_range check error while evaluating constants ($1 must be betwe'+
    -  'en $2 and $3)'#000+
       '04111_E_This type is not supported for the Default() intrinsic'#000+
    -  '04112_E_JVM',' virtual class methods cannot be static'#000+
    +  '04112_E_JVM virtual class methods cannot be static'#000+
       '04113_E_Final (class) fields can only be assigned in their class'#039' '+
    -  '(class) constructor'#000+
    +  '(class) construct','or'#000+
       '04114_E_It is not possible to typecast untyped parameters on managed p'+
    -  'latforms, simply assign a value to them inst','ead.'#000+
    +  'latforms, simply assign a value to them instead.'#000+
       '04115_E_The assignment side of an expression cannot be typecasted to a'+
       ' supertype on managed platforms'#000+
    -  '04116_-W_The interface method "$1" raises the visibility of "$2" to pu'+
    -  'blic when accessed via an interface instance'#000+
    -  '04117_E_The interf','ace method "$1" has a higher visibility (public) t'+
    -  'han "$2"'#000+
    +  '04116_-W_The int','erface method "$1" raises the visibility of "$2" to '+
    +  'public when accessed via an interface instance'#000+
    +  '04117_E_The interface method "$1" has a higher visibility (public) tha'+
    +  'n "$2"'#000+
       '04118_E_TYPEOF can only be used on object types with VMT'#000+
    -  '04119_E_It is not possible to define a default value for a parameter o'+
    -  'f type "$1"'#000+
    -  '04120_E_Type "$1" cannot be extended by a ','type helper'#000+
    +  '04119_E','_It is not possible to define a default value for a parameter'+
    +  ' of type "$1"'#000+
    +  '04120_E_Type "$1" cannot be extended by a type helper'#000+
       '05000_E_Identifier not found "$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+
    +  '0','5003_H_Identifier already defined in $1 at line $2'#000+
       '05004_E_Unknown identifier "$1"'#000+
    -  '05005_E_Forward declaration not so','lved "$1"'#000+
    +  '05005_E_Forward declaration not solved "$1"'#000+
       '05007_E_Error in type definition'#000+
       '05009_E_Forward type not resolved "$1"'#000+
    -  '05010_E_Only static variables can be used in static methods or outside'+
    -  ' methods'#000+
    +  '05010_E_Only static variables can be used',' in static methods or outsi'+
    +  'de methods'#000+
       '05012_E_Record or object or class type expected'#000+
    -  '05013_E_Instances of classes or',' objects with an abstract method are '+
    -  'not allowed'#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+
    +  '050','16_E_Illegal label declaration'#000+
       '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
       '05018_E_Label not found'#000+
    -  '0501','9_E_identifier isn'#039't a label'#000+
    +  '05019_E_identifier isn'#039't a label'#000+
       '05020_E_label already defined'#000+
       '05021_E_illegal type declaration of set elements'#000+
    -  '05022_E_Forward class definition not resolved "$1"'#000+
    +  '05022_E_Forward',' class definition not resolved "$1"'#000+
       '05023_H_Unit "$1" not used in $2'#000+
       '05024_H_Parameter "$1" not used'#000+
    -  '05025_N_Local va','riable "$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 ne','ver used'#000+
       '05028_H_Local $1 "$2" is not used'#000+
       '05029_N_Private field "$1.$2" is never used'#000+
    -  '05030_N_Private field "$1.$2" ','is assigned but never used'#000+
    +  '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+
    +  '05033_W_Function result does',' not seem to be set'#000+
       '05034_W_Type "$1" is not aligned correctly in current record for C'#000+
    -  '05035_E_Unknown record field i','dentifier "$1"'#000+
    +  '05035_E_Unknown record field identifier "$1"'#000+
       '05036_W_Local variable "$1" does not seem to be initialized'#000+
    -  '05037_W_Variable "$1" does not seem to be initialized'#000+
    +  '05037_W_Variable "$1" does not seem to be initia','lized'#000+
       '05038_E_identifier idents no member "$1"'#000+
       '05039_H_Found declaration: $1'#000+
       '05040_E_Data element too large'#000+
    -  '05042_E_N','o matching implementation for interface method "$1" found'#000+
    +  '05042_E_No matching implementation for interface method "$1" found'#000+
       '05043_W_Symbol "$1" is deprecated'#000+
    -  '05044_W_Symbol "$1" is not portable'#000+
    +  '05044_W_Symbol "$1" is not port','able'#000+
       '05055_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+
    +  '05057_H_Local variable "$1" does not seem to be initialized'#000+
       '05058_H_Variable "$1" does not seem to be initialized'#000+
    -  '05059_W_Function result variable does not seem to initialized'#000+
    +  '05059_W_Function result variable d','oes not seem to initialized'#000+
       '05060_H_Function result variable does not seem to be initialized'#000+
    -  '05061_W_Variable "$1" re','ad but nowhere assigned'#000+
    +  '05061_W_Variable "$1" read but nowhere assigned'#000+
       '05062_H_Found abstract method: $1'#000+
       '05063_W_Symbol "$1" is experimental'#000+
    -  '05064_W_Forward declaration "$1" not resolved, assumed external'#000+
    +  '05064_W_Forward declaration "','$1" not resolved, assumed external'#000+
       '05065_W_Symbol "$1" is belongs to a library'#000+
    -  '05066_W_Symbol "$1" is deprecated: "$2','"'#000+
    +  '05066_W_Symbol "$1" is deprecated: "$2"'#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 find a "Current" property in enumerator "$1"'#000+
    -  '05070_E_Mismatch between number of declared parameters and number o','f'+
    -  ' colons in message string.'#000+
    +  '05069_E_Ca','nnot find 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_Private const "$1.$2" never used'#000+
    -  '05073_N_Private property "$1.$2" never used'#000+
    +  '05073_N_Privat','e property "$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+
    +  '05076_W_Unit "$1" is not portable'#000+
       '05077_W_Unit "$1" is belongs to a library'#000+
       '05078_W_Unit "$1" is not implemented'#000+
    -  '05079_W_Unit "$1" is experimental'#000+
    +  '05079_W_Unit "$1" is experi','mental'#000+
       '05080_E_No complete definition of the formally declared class "$1" is '+
       'in scope'#000+
    -  '05081_E_Gotos into initializati','on or finalization blocks of units ar'+
    -  'e not allowed'#000+
    +  '05081_E_Gotos into initialization or finalization blocks of units are '+
    +  'not allowed'#000+
       '05082_E_Invalid external name "$1" for formal class "$2"'#000+
    -  '05083_E_Complete class definition with external name "$1" here'#000+
    -  '05084_W_Possible library conflict: symbol "$1" from library "$2" also',
    -  ' found in library "$3"'#000+
    +  '05083_E_Complet','e class definition with external name "$1" here'#000+
    +  '05084_W_Possible library conflict: symbol "$1" from library "$2" also '+
    +  'found in library "$3"'#000+
       '05085_E_Cannot add implicit constructor '#039'Create'#039' because ident'+
       'ifier already used by "$1"'#000+
    -  '05086_E_Cannot generate default constructor for class, because parent '+
    -  'has no parameterless constructor'#000+
    -  '05087_D_Adding helper for',' $1'#000+
    +  '05086_E_Can','not generate default constructor for class, because paren'+
    +  't has no parameterless constructor'#000+
    +  '05087_D_Adding helper for $1'#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+
    +  '06013_E_The use of a far poin','ter isn'#039't allowed there'#000+
       '06015_E_EXPORT declared functions can'#039't be called'#000+
    -  '06016_W_Possible illegal call of constructo','r or destructor'#000+
    +  '06016_W_Possible illegal call of constructor or destructor'#000+
       '06017_N_Inefficient code'#000+
       '06018_W_unreachable code'#000+
       '06020_E_Abstract methods can'#039't be called directly'#000+
    -  '06027_DL_Register $1 weight $2 $3'#000+
    +  '06027_D','L_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_P','rocvar calls cannot be inline.'#000+
    +  '06032_E_Procvar calls cannot be inline.'#000+
       '06033_E_No code for inline procedure stored'#000+
    -  '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
    -  'sed, use (set)length instead'#000+
    +  '06035_E_Element zero of an ansi/wide- or longstr','ing can'#039't be acc'+
    +  'essed, use (set)length instead'#000+
       '06037_E_Constructors or destructors cannot be called inside a '#039'wit'+
    -  'h'#039' c','lause'#000+
    +  'h'#039' clause'#000+
       '06038_E_Cannot call message handler methods directly'#000+
       '06039_E_Jump in or outside of an exception block'#000+
    -  '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
    +  '06040_E_Control',' flow statements aren'#039't allowed in a finally bloc'+
    +  'k'#000+
       '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
    -  '06042_W_Lo','cal variable size exceed 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+
    +  '06044_E_BREAK not all','owed'#000+
       '06045_E_CONTINUE not allowed'#000+
       '06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+
       'me library.'#000+
    -  '0','6047_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+
    +  '06047_F_Cannot find system type "$1". Check if you use the correct run'+
    +  ' time library.'#000+
    +  '06048_H_Inherited call to abstract meth','od 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'+
    -  'rect run time library.'#000+
    +  '06050_F_Cannot find type "$1" in unit "$2". Check if you use the corre'+
    +  'ct run time library.'#000+
       '06051_E_Interprocedural gotos are allowed only to outer subroutines'#000+
    -  '06052_E_Label must be defined in the same scope as it is declared'#000+
    -  '06053_E_Leaving procedures containing explicit or implicit exceptio','n'+
    -  's frames using goto is not allowed'#000+
    +  '06052_E_Label mu','st be defined in the same scope as it is declared'#000+
    +  '06053_E_Leaving procedures containing explicit or implicit exceptions '+
    +  'frames using goto is not allowed'#000+
       '06054_E_In ISO mode, the mod operator is defined only for positive quo'+
       'tient'#000+
    -  '06055_DL_Auto inlining: $1'#000+
    +  '06055_DL_Au','to inlining: $1'#000+
       '07000_DL_Starting $1 styled assembler parsing'#000+
       '07001_DL_Finished $1 styled assembler parsing'#000+
    -  '07002_E_N','on-label pattern contains @'#000+
    +  '07002_E_Non-label pattern contains @'#000+
       '07004_E_Error building record offset'#000+
       '07005_E_OFFSET used without identifier'#000+
    -  '07006_E_TYPE used without identifier'#000+
    +  '07006_E_TYPE used w','ithout identifier'#000+
       '07007_E_Cannot use local variable or parameters here'#000+
       '07008_E_need to use OFFSET here'#000+
    -  '07009_E_need t','o use $ here'#000+
    +  '07009_E_need to use $ here'#000+
       '07010_E_Cannot use multiple relocatable symbols'#000+
       '07011_E_Relocatable symbol can only be added'#000+
    -  '07012_E_Invalid constant expression'#000+
    +  '07012_E_Invalid c','onstant expression'#000+
       '07013_E_Relocatable symbol is not allowed'#000+
       '07014_E_Invalid reference syntax'#000+
    -  '07015_E_You cannot reac','h $1 from that code'#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+
    +  '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+
    +  '07020_E_Multiple index register usage'#000+
       '07021_E_Invalid operand type'#000+
       '07022_E_Invalid string as opcode operand: $1'#000+
       '07023_W_@CODE and @DATA not supported'#000+
    -  '07024_E_Null label references are not allowed'#000+
    +  '0702','4_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+
    +  '07027_E_escape sequence ignored: $1'#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+
    +  '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+
    +  '07032_W_Calling an overload function in assembler'#000+
       '07033_E_Unsupported symbol type for operand'#000+
       '07034_E_Constant value out of bounds'#000+
    -  '07035_E_Error converting decimal $1'#000+
    +  '07035_E_Er','ror converting decimal $1'#000+
       '07036_E_Error converting octal $1'#000+
       '07037_E_Error converting binary $1'#000+
    -  '07038_E_Error converti','ng hexadecimal $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+
    +  '07041_E_Cannot use SELF ou','tside 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+
    +  '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+
    +  '07046_W_Size suffix and dest','ination or source size do not match'#000+
       '07047_E_Assembler syntax error'#000+
    -  '07048_E_Invalid combination of opcode and operands',#000+
    +  '07048_E_Invalid combination of opcode and operands'#000+
       '07049_E_Assembler syntax error in operand'#000+
       '07050_E_Assembler syntax error in constant'#000+
       '07051_E_Invalid String expression'#000+
    -  '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
    +  '070','52_W_constant with symbol $1 for address which is not on a pointe'+
    +  'r'#000+
       '07053_E_Unrecognized opcode $1'#000+
    -  '07054_E_Invalid or ','missing opcode'#000+
    +  '07054_E_Invalid or missing opcode'#000+
       '07055_E_Invalid combination of prefix and opcode: $1'#000+
    -  '07056_E_Invalid combination of override and opcode: $1'#000+
    +  '07056_E_Invalid combination of override 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+
    +  '07061_E_Undefined local symbol $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_Invalid 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+
    +  '07068_E_Invalid floating point expression'#000+
       '07069_E_Wrong symbol type'#000+
       '07070_E_Cannot index a local var or parameter with a register'#000+
    -  '07071_E_Invalid segment override expression'#000+
    +  '07071_E_Invalid segment ','override expression'#000+
       '07072_W_Identifier $1 supposed external'#000+
       '07073_E_Strings not allowed as constants'#000+
    -  '07074_E_No type ','of variable specified'#000+
    +  '07074_E_No type of variable specified'#000+
       '07075_E_assembler code not returned to text section'#000+
       '07076_E_Not a directive or local symbol $1'#000+
    -  '07077_E_Using a defined name as a local label'#000+
    +  '07077_','E_Using a defined name as a local label'#000+
       '07078_E_Dollar token is used without an identifier'#000+
    -  '07079_W_32bit constant cre','ated for address'#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+
    +  '07081_E_Can'#039't access fields directly for parame','ters'#000+
       '07082_E_Can'#039't access fields of objects/classes directly'#000+
    -  '07083_E_No size specified and unable to determine the si','ze of the op'+
    -  'erands'#000+
    +  '07083_E_No size specified and unable to determine the size of the oper'+
    +  'ands'#000+
       '07084_E_Cannot use RESULT in this function'#000+
    -  '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
    +  '07086_W_"$1" without operand translated into "$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+
    +  '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+
    -  '07095_E_Invalid reglist for movem'#000+
    +  '07095','_E_Invalid reglist for movem'#000+
       '07096_E_Reglist invalid for opcode'#000+
       '07097_E_Higher cpu mode required ($1)'#000+
    -  '07098_W_No size',' specified and unable to determine the size of the op'+
    -  'erands, using DWORD as default'#000+
    -  '07099_E_Syntax error while trying to parse a shifter operand'#000+
    +  '07098_W_No size specified and unable to determine the size of the oper'+
    +  'ands, using DWORD as default'#000+
    +  '07099_E_Syntax error while trying to pa','rse a shifter operand'#000+
       '07100_E_Address of packed component is not at a byte boundary'#000+
    -  '07101_W_No size specified and una','ble to determine the size of the op'+
    -  'erands, using BYTE as default'#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+
    -  '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 a'+
    -  'ccess'#000+
    +  '0','7103_W_Use of +offset(%ebp) is not compatible with regcall conventi'+
    +  'on'#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+
    -  '07107_E_Generating PIC, but reference is not',' PIC-safe'#000+
    +  '07106_E_VMTOffset mu','st 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 be of the same kind and w'+
       'idth'#000+
    -  '07109_E_A register set cannot be empty'#000+
    +  '07109_E_A register set cannot be empty',#000+
       '07110_W_@GOTPCREL is useless and potentially dangereous for local symb'+
       'ols'#000+
    -  '07111_W_Constant with general purpose segm','ent register'#000+
    +  '07111_W_Constant with general purpose segment register'#000+
       '07112_E_Invalid offset value for $1'#000+
       '07113_E_Invalid register for $1'#000+
    -  '07114_E_SEH directives are allowed only in pure assembler procedures'#000+
    +  '07114_E_SEH directives are allowed only in',' pure assembler procedures'+
    +  #000+
       '07115_E_Directive "$1" is not supported for the current target'#000+
    -  '07116_E_This function'#039's res','ult location cannot be encoded direct'+
    -  'ly in a single operand when "nostackframe" is used'#000+
    -  '07117_E_GOTPCREL references in Intel assembler syntax cannot contain a'+
    -  ' base or index register, and their offset must 0.'#000+
    -  '07118_E_The current target does ','not support GOTPCREL relocations'#000+
    +  '07116_E_This function'#039's result location cannot be encoded directly'+
    +  ' in a single operand when "nostackframe" is used'#000+
    +  '07117_E_GOTPCREL references in Inte','l assembler syntax cannot contain'+
    +  ' a base or index register, and their offset must 0.'#000+
    +  '07118_E_The current target does not support GOTPCREL relocations'#000+
       '07119_W_Exported/global symbols should accessed via the GOT'#000+
    -  '07120_W_Check size of memory operand "$1"'#000+
    +  '07120_W_Check size of memory o','perand "$1"'#000+
       '07121_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
       'ts, but expected [$3 bits]"'#000+
    -  '07122_W','_Check size of memory operand "$1: memory-operand-size is $2 '+
    -  'bits, but expected [$3 bits + $4 byte offset]"'#000+
    -  '07123_W_Check "$1: offset of memory operand is negative "$2 byte"'#000+
    -  '07124_W_Check "$1: size of memory operand is empty, but es exists ','di'+
    -  'fferent definitions of the memory size =>> map to $2 (smallest option)'+
    -  '"'#000+
    -  '07125_E_Invalid register used in memory reference expression: "$1"'#000+
    +  '07122_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
    +  'ts, but expected [$3 bits + $4 byte offset]"'#000+
    +  '07123_W_Check "','$1: offset of memory operand is negative "$2 byte"'#000+
    +  '07124_W_Check "$1: size of memory operand is empty, but es exists diff'+
    +  'erent definitions of the memory size =>> map to $2 (smallest option)"'#000+
    +  '07125_E_Invalid register used in memory reference',' expression: "$1"'#000+
       '08000_F_Too many assembler files'#000+
       '08001_F_Selected assembler output not supported'#000+
    -  '08002_F_Comp not s','upported'#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+
    +  '08005_F_No',' binary writer selected'#000+
       '08006_E_Asm: Opcode $1 not in table'#000+
    -  '08007_E_Asm: $1 invalid combination of opcode and operand','s'#000+
    +  '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
       '08008_E_Asm: 16 Bit references not supported'#000+
       '08009_E_Asm: Invalid effective address'#000+
    -  '08010_E_Asm: Immediate or reference expected'#000+
    +  '08010_E_Asm: Immediate or reference e','xpected'#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 lab','el $1'#000+
    +  '08013_E_Asm: Undefined label $1'#000+
       '08014_E_Asm: Comp type not supported for this target'#000+
       '08015_E_Asm: Extended type not supported for this target'#000+
    -  '08016_E_Asm: Duplicate label $1'#000+
    +  '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 registe','r $1'#000+
    +  '08019_E_Asm: Invalid register $1'#000+
       '08020_E_Asm: 16 or 32 Bit references not supported'#000+
       '08021_E_Asm: 64 Bit operands not supported'#000+
    -  '08022_E_Asm: AH,BH,CH or DH cannot be used in an instruction requiring'+
    -  ' REX prefix'#000+
    +  '08022_E_Asm: AH,BH,CH or',' DH cannot be used in an instruction requiri'+
    +  'ng REX prefix'#000+
       '08023_E_Missing .seh_endprologue directive'#000+
    -  '08024_E_Function',' prologue exceeds 255 bytes'#000+
    +  '08024_E_Function prologue exceeds 255 bytes'#000+
       '08025_E_.seh_handlerdata directive without preceding .seh_handler'#000+
    -  '08026_F_Relocation count for section $1 exceeds 65535'#000+
    +  '08026_F_Relocation count for ','section $1 exceeds 65535'#000+
       '09000_W_Source operating system redefined'#000+
       '09001_I_Assembling (pipe) $1'#000+
    -  '09002_E_Can'#039't create ','assembler file: $1'#000+
    +  '09002_E_Can'#039't create assembler file: $1'#000+
       '09003_E_Can'#039't create object file: $1 (error code: $2)'#000+
       '09004_E_Can'#039't create archive file: $1'#000+
    -  '09005_E_Assembler $1 not found, switching to external assembling'#000+
    +  '09005_E_Asse','mbler $1 not found, switching to external assembling'#000+
       '09006_T_Using assembler: $1'#000+
    -  '09007_E_Error while assembling exitc','ode $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 smartlinking $1'#000+
    +  '09010_I_Assembling',' with smartlinking $1'#000+
       '09011_W_Object $1 not found, Linking may fail !'#000+
    -  '09012_W_Library $1 not found, Linking may fail ','!'#000+
    +  '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, switching to external linking'#000+
    +  '09016_E_Util ','$1 not found, switching to external linking'#000+
       '09017_T_Using util $1'#000+
       '09018_E_Creation of Executables not supported'#000+
    -  '09019','_E_Creation of Dynamic/Shared Libraries not supported'#000+
    +  '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
       '09020_I_Closing script $1'#000+
    -  '09021_E_resource compiler "$1" not found, switching to external mode'#000+
    +  '09021_E_resource compiler "$1" not found, s','witching to external mode'+
    +  #000+
       '09022_I_Compiling resource $1'#000+
    -  '09023_T_unit $1 can'#039't be statically linked, switching to smar','t l'+
    -  'inking'#000+
    +  '09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
    +  'king'#000+
       '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
       #000+
    -  '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
    -  'g'#000+
    +  '09025_T_unit $1 can'#039't be shared linked, switch','ing to static link'+
    +  'ing'#000+
       '09026_E_unit $1 can'#039't be smart or static linked'#000+
    -  '09027_E_unit $1 can'#039't be shared or static linke','d'#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 extern'+
    -  'al mode'#000+
    +  '09030_E_Can'#039't ca','ll the resource compiler "$1", switching to exte'+
    +  'rnal mode'#000+
       '09031_E_Can'#039't open resource file "$1"'#000+
    -  '09032_E_Can'#039't write r','esource file "$1"'#000+
    +  '09032_E_Can'#039't write resource file "$1"'#000+
       '09033_N_File "$1" not found for backquoted cat command'#000+
    -  '09034_W_"$1" not found, this will probably cause a linking failure'#000+
    +  '09034_W_"$1" not found, this will probably cause a',' linking failure'#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 b','ytes'#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+
    -  '09133_X_Stack space reserved: $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_Obje','ct file "$1" contains 32-bit absolute relocation to symb'+
    -  'ol "$2".'#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+
    +  '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 Invali','d Header (no PPU at the 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+
    -  '10010_U_PPU is compiled for another target'#000+
    +  '10010_U_PPU is ','compiled for another 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 read','ing 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+
       '10017_F_PPU Dbx count problem'#000+
    -  '10018_E_Illegal unit name: $1'#000+
    +  '10018_E_Il','legal 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 un','it $1, no sources available'#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+
    -  '10024_F_Unit $1 searched but $2 found'#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 compi','ling module, stopping'#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+
    -  '10029_U_Recompiling $1, source found only'#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 li','b is older than ppufile'#000+
    +  '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
       '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
    -  '10033_U_Recompiling unit, obj is older than asm'#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+
    +  '10037_U_PPU Check file $1 time $2'#000+
       '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
    -  '10041_U_File $1 is newer than the one used for creating PPU file $2'#000+
    +  '10041_U_File $1 is newer than ','the one used for creating 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+
    +  '10043_U_Loading interface units from $1'#000+
       '10044_U_Loading implementation units from $1'#000+
       '10045_U_Interface CRC changed for unit $1'#000+
    -  '10046_U_Implementation CRC changed for unit $1'#000+
    +  '1','0046_U_Implementation CRC changed for unit $1'#000+
       '10047_U_Finished compiling unit $1'#000+
    -  '10048_U_Adding dependency: $1 depend','s on $2'#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+
    -  '10052_U_Forced reloading'#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_Loa','ding unit $1'#000+
    +  '10055_U_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+
    -  '10059_U_Skipping re-resolving unit $1, still loading used units'#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 c','ompiled using a different whole program optimiz'+
    -  'ation feedback input ($2, $3); recompile it without 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+
    +  '10061_E_Unit $1 was compiled using a different whole program optimizat'+
    +  'ion feedback input ($2, $3); recompile it without wpo or use the same '+
    +  'wpo ','feedback input file for this compilation invocation'#000+
    +  '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+
       '10063_U_PPU is compiled for another i8086 memory model'#000+
       '11000_O_$1 [options] <inputfile> [options]'#000+
    -  '11001_W_Only one source file supported, changing source file to compil'+
    -  'e from "$1" into "$2"'#000+
    -  '11002_W_DEF file can be created only for OS/2'#000,
    +  '11001_W_Only one sour','ce 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_No option inside $1 config file'#000+
    +  '11005_N_No option inside $1 con','fig file'#000+
       '11006_E_Illegal parameter: $1'#000+
       '11007_H_-? writes help pages'#000+
       '11008_F_Too many config files nested'#000+
    -  '11009_F_Unab','le to open file $1'#000+
    +  '11009_F_Unable to open file $1'#000+
       '11010_D_Reading further options from $1'#000+
       '11011_W_Target is already set to: $1'#000+
    -  '11012_W_Shared libs not supported on DOS platform, reverting to static'+
    -  #000+
    +  '11012_W_Shared libs not sup','ported on DOS platform, reverting to stat'+
    +  'ic'#000+
       '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+
    -  'nte','red'#000+
    +  'ntered'#000+
       '11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+
       'tered'#000+
    -  '11015_F_Open conditional at the end of the options file'#000+
    +  '11015_F_Open conditional at the end of the ','options file'#000+
       '11016_W_Debug information generation is not supported by this executab'+
       'le'#000+
    -  '11017_H_Try recompiling with -d','GDB'#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+
    -  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000,
    +  '11020_N_Switch','ing assembler to default source writing assembler'#000+
    +  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
       '11022_W_"$1" assembler use forced'#000+
       '11026_T_Reading options from file $1'#000+
       '11027_T_Reading options from environment $1'#000+
    -  '11028_D_Handling option "$1"'#000+
    +  '11028_D_','Handling option "$1"'#000+
       '11029_O_*** press enter ***'#000+
       '11030_H_Start of reading config file $1'#000+
    -  '11031_H_End of reading confi','g 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_interpreting file option "$1"'#000+
    +  '11033_D_interpreting file option "$1"',#000+
       '11034_D_Reading config file "$1"'#000+
       '11035_D_found source file name "$1"'#000+
       '11039_E_Unknown codepage "$1"'#000+
    -  '11040_F_Config fi','le $1 is a directory'#000+
    +  '11040_F_Config file $1 is a directory'#000+
       '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
       '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 with','out'+
    -  ' \var{\#IF(N)DEF} found'#000+
    +  '11042_W_Use of p','pc386.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 platform'#000+
    -  '11045_F_The feature "$1" is not, or not yet, supported on the selected'+
    -  ' target platform'#000+
    -  '11046_N_DWARF debug information cannot be use','d with smart linking on'+
    -  ' this target, switching to static linking'#000+
    -  '11047_W_Option "$1" is ignored for the current target platform.'#000+
    +  '11045_F_The fea','ture "$1" is not, or not yet, supported 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 current target plat','form.'#000+
       '11048_W_Disabling external debug information because it is unsupported'+
    -  ' for the selected target/debug format com','bination.'#000+
    +  ' for the selected target/debug format combination.'#000+
       '11049_N_DWARF debug information cannot be used with smart linking with'+
    -  ' external assembler, disabling static library creation.'#000+
    +  ' external assembler, disabling static libra','ry creation.'#000+
       '11050_E_Invalid value for MACOSX_DEPLOYMENT_TARGET environment variabl'+
       'e: $1'#000+
    -  '11051_E_Invalid value for IP','HONEOS_DEPLOYMENT_TARGET environment var'+
    -  'iable: $1'#000+
    +  '11051_E_Invalid value for IPHONEOS_DEPLOYMENT_TARGET environment varia'+
    +  'ble: $1'#000+
       '11052_E_You must use a FPU type of VFPV2, VFPV3 or VFPV3_D16 when usin'+
    -  'g the EABIHF ABI target'#000+
    +  'g t','he EABIHF ABI target'#000+
       '11053_W_The selected debug format is not supported on the current targ'+
    -  'et, not changing the curre','nt setting'#000+
    +  'et, not changing the current setting'#000+
       '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
    -  '12001_D_Processing whole program optimization information in wpo feedb'+
    -  'ack file "$1"'#000+
    +  '12001_D_Processing whole program optimization ','information in wpo fee'+
    +  'dback file "$1"'#000+
       '12002_D_Finished processing the whole program optimization information'+
    -  ' in wpo f','eedback file "$1"'#000+
    +  ' 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 "'+
    -  '$2" at line $1 of wpo feedback file, ignoring'#000+
    -  '12005_D_Found whole program ','optimization section "$1" with informati'+
    -  'on about "$2"'#000+
    -  '12006_F_The selected whole program optimizations require a previously '+
    -  'generated feedback file (use -Fw to specify)'#000+
    +  '12004_W_No handler register','ed for whole program optimization 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 require a previously',
    +  ' generated feedback file (use -Fw to specify)'#000+
       '12007_E_No collected information necessary to perform "$1" whole progr'+
    -  'a','m optimization found'#000+
    +  'am optimization found'#000+
       '12008_F_Specify a whole program optimization feedback file to store th'+
    -  'e generated info in (using -FW)'#000+
    +  'e generated info in (using -FW)'#000,
       '12009_E_Not generating any whole program optimization information, yet'+
       ' a feedback file was specified (using -FW)'#000+
    -  '1201','0_E_Not performing any whole program optimizations, yet an input'+
    -  ' feedback file was specified (using -Fw)'#000+
    -  '12011_D_Skipping whole program optimization section "$1", because not '+
    -  'needed by the requested optimizations'#000+
    -  '12012_W_Overriding previous','ly read information for "$1" from feedbac'+
    -  'k input file using information in section "$2"'#000+
    -  '12013_E_Cannot extract symbol liveness information from program when s'+
    -  'tripping symbols, use -Xs-'#000+
    -  '12014_E_Cannot extract symbol liveness information from',' program when'+
    -  ' when not linking'#000+
    +  '12010_E_Not performing any whole program optimizations, yet an input f'+
    +  'eedback file was specified (using -Fw)'#000+
    +  '12011_D_Skipping w','hole program optimization section "$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 extract symbol liven','ess information from program when'+
    +  ' 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 from linked program'#000+
    +  'n from linked program'#000,
       '12016_E_Error during reading symbol liveness information produced by "'+
       '$1"'#000+
    -  '12017_F_Error executing "$1" (exitcode: $2)',' to extract symbol inform'+
    -  'ation from linked program'#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 only help when u'+
    -  'sing smart linking, use -CX -XX'#000+
    +  'si','ng smart linking, use -CX -XX'#000+
       '12019_E_Cannot create specified whole program optimisation feedback fi'+
       'le "$1"'#000+
    -  '11023_Fre','e Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $F'+
    -  'PCCPU'#010+
    +  '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+
    +  'CPU'#010+
       'Copyright (c) 1993-2013 by Florian Klaempfl and others'#000+
    -  '11024_Free Pascal Compiler version $FPCVERSION'#010+
    +  '110','24_Free Pascal Compiler version $FPCVERSION'#010+
       #010+
       'Compiler Date      : $FPCDATE'#010+
       'Compiler CPU Target: $FPCCPU'#010+
       #010+
    -  'Supported ta','rgets:'#010+
    +  'Supported targets:'#010+
       '  $OSTARGETS'#010+
       #010+
       'Supported CPU instruction sets:'#010+
       '  $INSTRUCTIONSETS'#010+
       #010+
       'Supported FPU instruction sets:'#010+
    -  '  $FPUINSTRUCTIONSETS'#010+
    +  '  $FPUINSTRUCTIONS','ETS'#010+
       #010+
       'Supported inline assembler modes:'#010+
       '  $ASMMODES'#010+
    @@ -1213,403 +1219,403 @@
       '  $ABITARGETS'#010+
       #010+
       'Supported Optimizations:'#010+
    -  '  ','$OPTIMIZATIONS'#010+
    +  '  $OPTIMIZATIONS'#010+
       #010+
       'Supported Whole Program Optimizations:'#010+
       '  All'#010+
       '  $WPOPTIMIZATIONS'#010+
       #010+
       'Supported Microcontroller types:'#010+
    -  '  $CONTROLLERTYPES'#010+
    +  '  $CONTRO','LLERTYPES'#010+
       #010+
       'This program comes under the GNU General Public Licence'#010+
       'For more information read COPYING.v2'#010+
       #010+
    -  'Please repor','t bugs in our bug tracker on:'#010+
    +  'Please report bugs in our bug tracker on:'#010+
       '                 http://bugs.freepascal.org'#010+
       #010+
    -  'More information may be found on our WWW pages (including directions'#010+
    +  'More information may be found on our WWW pages (','including directions'+
    +  #010+
       'for mailing lists useful for asking questions or discussing potential'#010+
       'new features, etc.):'#010+
    -  '     ','            http://www.freepascal.org'#000+
    +  '                 http://www.freepascal.org'#000+
       '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+
       'ble it'#010+
    -  '**1a_The compiler doesn'#039't delete the generated assembler file'#010+
    +  '**1a_The',' compiler doesn'#039't delete the generated assembler file'#010+
       '**2al_List sourcecode lines in assembler file'#010+
    -  '**2an_List node i','nfo in assembler file (-dEXTDEBUG compiler)'#010+
    +  '**2an_List node info in assembler file (-dEXTDEBUG compiler)'#010+
       '*L2ap_Use pipes instead of creating temporary assembler files'#010+
    -  '**2ar_List register allocation/release info in assembler file'#010+
    +  '**2ar_List regist','er allocation/release info in assembler file'#010+
       '**2at_List temp allocation/release info in assembler file'#010+
    -  '**1A<x>_Output',' format:'#010+
    +  '**1A<x>_Output format:'#010+
       '**2Adefault_Use default assembler'#010+
       '3*2Aas_Assemble using GNU AS'#010+
    -  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using internal writer'#010+
    +  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using inter','nal writer'#010+
       '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
       '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
    -  '3*2Anasmwin32_Win32 o','bject 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*2Anasmobj_Obj file using Nasm'#010+
    +  '3*2Anasmobj_Ob','j 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*2Aelf_ELF (Linux) using internal writer'#010+
       '3*2Acoff_COFF (Go32v2) using internal writer'#010+
       '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
    -  '4*2Aas_Assemble using GNU AS'#010+
    +  '4*2Aas','_Assemble using GNU AS'#010+
       '4*2Agas_Assemble using GNU GAS'#010+
       '4*2Agas-darwin_Assemble darwin Mach-O64 using GNU GAS'#010+
    -  '4*2Amasm_','Win64 object file using ml64 (Microsoft)'#010+
    +  '4*2Amasm_Win64 object file using ml64 (Microsoft)'#010+
       '4*2Apecoff_PE-COFF (Win64) using internal writer'#010+
    -  '4*2Aelf_ELF (Linux-64bit) using internal writer'#010+
    +  '4*2Aelf_ELF (Linux-64bit) using i','nternal writer'#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_St','andard Motorola assembler'#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 GNU AS'#010+
    -  '**1b_Generate browser info'#010+
    +  '**1b_Gener','ate browser info'#010+
       '**2bl_Generate local symbol info'#010+
       '**1B_Build all modules'#010+
       '**1C<x>_Code generation options:'#010+
    -  '**2C3_Turn ','on ieee error checking for constants'#010+
    +  '**2C3_Turn on ieee error checking for constants'#010+
       '**2Ca<x>_Select ABI, see fpc -i for possible values'#010+
    -  '**2Cb_Generate code for a big-endian variant of the target architectur'+
    -  'e'#010+
    +  '**2Cb_Generate code for a big-endi','an variant of the target architect'+
    +  'ure'#010+
       '**2Cc<x>_Set default calling convention to <x>'#010+
    -  '**2CD_Create also dynamic librar','y (not supported)'#010+
    +  '**2CD_Create also dynamic library (not supported)'#010+
       '**2Ce_Compilation with emulated floating point opcodes'#010+
    -  '**2Cf<x>_Select fpu instruction set to use, see fpc -i for possible va'+
    -  'lues'#010+
    +  '**2Cf<x>_Select fpu instruction set to use, see fp','c -i for possible '+
    +  'values'#010+
       '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
    -  '**2Cg_Generate PIC code',#010+
    +  '**2Cg_Generate PIC code'#010+
       '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
       '**2Ci_IO-checking'#010+
    -  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB'#010+
    +  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB',#010+
       '**2Cn_Omit linking stage'#010+
       'P*2CN_Generate nil-pointer checks (AIX-only)'#010+
       '**2Co_Check overflow of integer operations'#010+
    -  '**2','CO_Check for possible overflow of integer operations'#010+
    +  '**2CO_Check for possible overflow of integer operations'#010+
       '**2Cp<x>_Select instruction set, see fpc -i for possible values'#010+
    -  '**2CP<x>=<y>_ packing settings'#010+
    +  '**2CP<','x>=<y>_ packing settings'#010+
       '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
       'and 8'#010+
    -  '**2Cr_Range chec','king'#010+
    +  '**2Cr_Range checking'#010+
       '**2CR_Verify object method call validity'#010+
       '**2Cs<n>_Set stack checking size to <n>'#010+
    -  '**2Ct_Stack checking (for testing only, see manual)'#010+
    +  '**2Ct_Stack checking (for testing onl','y, see manual)'#010+
       '8*2CT<x>_Target-specific code generation options'#010+
       '3*2CT<x>_Target-specific code generation options'#010+
    -  '4*2C','T<x>_Target-specific code generation options'#010+
    +  '4*2CT<x>_Target-specific code generation options'#010+
       'p*2CT<x>_Target-specific code generation options'#010+
    -  'P*2CT<x>_Target-specific code generation options'#010+
    +  'P*2CT<x>_Target-specific code',' generation options'#010+
       'J*2CT<x>_Target-specific code generation options'#010+
    -  'A*2CT<x>_Target-specific code generation options',#010+
    +  'A*2CT<x>_Target-specific code generation options'#010+
       'p*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
       ' (AIX)'#010+
    -  'P*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
    -  ' (AIX)'#010+
    +  'P*3CTsmalltoc_ Generate smaller TOCs at the e','xpense of execution spe'+
    +  'ed (AIX)'#010+
       'J*3CTautogetterprefix=X_  Automatically create getters for properties '+
    -  'with prefix X (','empty string disables)'#010+
    +  'with prefix X (empty string disables)'#010+
       'J*3CTautosetterprefix=X_  Automatically create setters for properties '+
    -  'with prefix X (empty string disables)'#010+
    +  'with prefix X (empty string di','sables)'#010+
       '8*3CTcld_                 Emit a CLD instruction before using the x86 '+
       'string instructions'#010+
    -  '3*3CTcld_          ','       Emit a CLD instruction before using the x8'+
    +  '3*3CTcld_                 Emit a CLD instruction before using the x86 '+
    +  'string instructions'#010+
    +  '4*3CTcld_                 Emit a CLD instruction bef','ore using the x8'+
       '6 string instructions'#010+
    -  '4*3CTcld_                 Emit a CLD instruction before using the x86 '+
    -  'string instructions'#010+
       'J*3CTcompactintarrayinit_ Generate smaller (but potentially slower) co'+
    -  'de for in','itializing integer array constants'#010+
    +  'de for initializing integer array constants'#010+
       'J*3CTenumfieldinit_       Initialize enumeration fields in constructor'+
    -  's to enumtype(0), after calling inherited constructors'#010+
    +  's to enumtype(0), ','after calling inherited constructors'#010+
       'J*3CTinitlocals_          Initialize local variables that trigger a JV'+
    -  'M bytecode',' verification error if used uninitialized (slows down code'+
    -  ')'#010+
    -  'J*3CTlowercaseprocstart_  Lowercase the first character of procedure/f'+
    -  'unction/method names'#010+
    +  'M bytecode verification error if used uninitialized (slows down code)'#010+
    +  'J*3CTlowercaseprocstart_  Lowercase the first character of proc','edure'+
    +  '/function/method names'#010+
       'A*3CTthumbinterworking_ Generate Thumb interworking-safe code if possi'+
       'ble'#010+
    -  'J*2Cv_Var/out p','arameter copy-out checking'#010+
    +  'J*2Cv_Var/out parameter copy-out checking'#010+
       '**2CX_Create also smartlinked library'#010+
       '**1d<x>_Defines the symbol <x>'#010+
       '**1D_Generate a DEF file'#010+
    -  '**2Dd<x>_Set description to <x>'#010+
    +  '**','2Dd<x>_Set description to <x>'#010+
       '**2Dv<x>_Set DLL version to <x>'#010+
       '*O2Dw_PM application'#010+
       '**1e<x>_Set path to executable'#010+
    -  '**1','E_Same as -Cn'#010+
    +  '**1E_Same as -Cn'#010+
       '**1fPIC_Same as -Cg'#010+
       '**1F<x>_Set file names and paths:'#010+
    -  '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
    -  'sed'#010+
    +  '**2Fa<x>[,y]_(for a program) load units <x> and [y] bef','ore uses is p'+
    +  'arsed'#010+
       '**2Fc<x>_Set input codepage to <x>'#010+
       '**2FC<x>_Set RC compiler binary name to <x>'#010+
    -  '**2Fd_Disable the c','ompiler'#039's internal directory cache'#010+
    +  '**2Fd_Disable the compiler'#039's internal directory cache'#010+
       '**2FD<x>_Set the directory where to search for compiler utilities'#010+
    -  '**2Fe<x>_Redirect error output to <x>'#010+
    +  '**2Fe<x>_Redirect erro','r output to <x>'#010+
       '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
       '**2FE<x>_Set exe/unit output path to <x>'#010+
    -  '**2Fi<x>_Ad','d <x> to include path'#010+
    +  '**2Fi<x>_Add <x> to include path'#010+
       '**2Fl<x>_Add <x> to library path'#010+
       '**2FL<x>_Use <x> as dynamic linker'#010+
    -  '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
    -  'r'#010+
    +  '**2Fm<x>_Load unicode conversion ','table from <x>.txt in the compiler '+
    +  'dir'#010+
       '**2FM<x>_Set the directory where to search for unicode binary files'#010+
    -  '**2Fo<x>_A','dd <x> to object path'#010+
    +  '**2Fo<x>_Add <x> to object path'#010+
       '**2Fr<x>_Load error message file <x>'#010+
       '**2FR<x>_Set resource (.res) linker to <x>'#010+
    -  '**2Fu<x>_Add <x> to unit path'#010+
    +  '**2Fu<x>_Add <x> to u','nit path'#010+
       '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
    -  '**2FW<x>_Store generated whole-program optimization feed','back in <x>'#010+
    +  '**2FW<x>_Store generated whole-program optimization feedback in <x>'#010+
       '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
       'om <x>'#010+
    -  '*g1g_Generate debug information (default format for target)'#010+
    +  '*g1g_Generate debug information (d','efault format for target)'#010+
       '*g2gc_Generate checks for pointers'#010+
    -  '*g2gh_Use heaptrace unit (for memory leak/corruption deb','ugging)'#010+
    +  '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
       '*g2gl_Use line info unit (show more info with backtraces)'#010+
       '*g2go<x>_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 pa','ths in Sta'+
    -  'bs'#010+
    +  '*g3godwarfsets_ En','able DWARF '#039'set'#039' type debug information (b'+
    +  'reaks gdb < 6.5)'#010+
    +  '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
    +  #010+
       '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+
       'ame'#010+
    -  '*g2gp_Preserve case in stabs symbol names'#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_Generat','es programs traceable with Valgrind'#010+
    +  '*g2gv_Generates programs traceable with Valgrind'#010+
       '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
    -  '*g2gw2_Generate DWARFv2 debug information'#010+
    +  '*g2gw2_Generate DWARFv2 debug i','nformation'#010+
       '*g2gw3_Generate DWARFv3 debug information'#010+
       '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+
    -  '**1i_In','formation'#010+
    +  '**1i_Information'#010+
       '**2iD_Return compiler date'#010+
       '**2iV_Return short compiler version'#010+
       '**2iW_Return full compiler version'#010+
    -  '**2iSO_Return compiler OS'#010+
    +  '**2iSO_Return c','ompiler OS'#010+
       '**2iSP_Return compiler host processor'#010+
       '**2iTO_Return target OS'#010+
       '**2iTP_Return target processor'#010+
    -  '**1I<x>_Add <','x> to include path'#010+
    +  '**1I<x>_Add <x> to include path'#010+
       '**1k<x>_Pass <x> to the linker'#010+
       '**1l_Write logo'#010+
       '**1M<x>_Set language mode to <x>'#010+
    -  '**2Mfpc_Free Pascal dialect (default)'#010+
    +  '**2Mfpc_Free Pascal dial','ect (default)'#010+
       '**2Mobjfpc_FPC mode with Object Pascal support'#010+
       '**2Mdelphi_Delphi 7 compatibility mode'#010+
    -  '**2Mtp_TP/BP 7.0 ','compatibility mode'#010+
    +  '**2Mtp_TP/BP 7.0 compatibility mode'#010+
       '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
       '**1n_Do not read the default config files'#010+
    -  '**1o<x>_Change the name of the executable produced to <x>'#010+
    +  '**1o<x','>_Change the name of the executable produced to <x>'#010+
       '**1O<x>_Optimizations:'#010+
       '**2O-_Disable optimizations'#010+
    -  '**2O1_Level 1 ','optimizations (quick and debugger friendly)'#010+
    +  '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
       '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
    -  '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
    +  '**2O3_Level 3 optimizat','ions (-O2 + slow optimizations)'#010+
       '**2O4_Level 4 optimizations (-O3 + optimizations which might have unex'+
    -  'pected side eff','ects)'#010+
    +  'pected side effects)'#010+
       '**2Oa<x>=<y>_Set alignment'#010+
       '**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possible '+
       'values'#010+
    -  '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+
    -  #010+
    -  '**2OW<x>_Generate whole-program optimization feedback for o','ptimizati'+
    -  'on <x>, see fpc -i for possible values'#010+
    +  '**2Op<x>_Set ','target cpu for optimizing, see fpc -i for possible valu'+
    +  'es'#010+
    +  '**2OW<x>_Generate whole-program optimization feedback for optimization'+
    +  ' <x>, see fpc -i for possible values'#010+
       '**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+
    -  'le values'#010+
    +  'le va','lues'#010+
       '**2Os_Optimize for size rather than speed'#010+
       '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
    -  'F*1P<x>_Ta','rget CPU / compiler related options:'#010+
    +  'F*1P<x>_Target CPU / compiler related options:'#010+
       'F*2PB_Show default compiler binary'#010+
       'F*2PP_Show default target cpu'#010+
    -  'F*2P<x>_Set target CPU (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,sp'+
    -  'arc,x86_64'#010+
    +  'F*2P<x>_Set target CP','U (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,'+
    +  'sparc,x86_64'#010+
       '**1R<x>_Assembler reading style:'#010+
    -  '**2Rdefault_Use default ','assembler for target'#010+
    +  '**2Rdefault_Use default assembler for target'#010+
       '3*2Ratt_Read AT&T style assembler'#010+
       '3*2Rintel_Read Intel style assembler'#010+
    -  '6*2RMOT_Read motorola style assembler'#010+
    +  '6*2RMOT_Read motorola style ass','embler'#010+
       '**1S<x>_Syntax options:'#010+
       '**2S2_Same as -Mobjfpc'#010+
       '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
    -  '**2Sa_Turn on ','assertions'#010+
    +  '**2Sa_Turn on assertions'#010+
       '**2Sd_Same as -Mdelphi'#010+
       '**2Se<x>_Error options. <x> is a combination of the following:'#010+
    -  '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
    +  '**3*_<n> : Compiler halts ','after the <n> errors (default is 1)'#010+
       '**3*_w : Compiler also halts after warnings'#010+
    -  '**3*_n : Compiler also halts after no','tes'#010+
    +  '**3*_n : Compiler also halts after notes'#010+
       '**3*_h : Compiler also halts after hints'#010+
       '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
    -  '**2Sh_Use reference counted strings (ansistring by default) instead of'+
    -  ' shortstrings'#010+
    -  '**2Si_Turn on inlining of procedures/functions decla','red as "inline"'#010+
    +  '**2Sh_Use reference',' counted strings (ansistring by default) instead '+
    +  'of shortstrings'#010+
    +  '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
       '**2Sk_Load fpcylix unit'#010+
       '**2SI<x>_Set interface style to <x>'#010+
       '**3SIcom_COM compatible interface (default)'#010+
    -  '**3SIcorba_CORBA compatible interface'#010+
    +  '**3','SIcorba_CORBA compatible interface'#010+
       '**2Sm_Support macros like C (global)'#010+
       '**2So_Same as -Mtp'#010+
    -  '**2Ss_Constructor name mus','t be init (destructor must be done)'#010+
    +  '**2Ss_Constructor name must be init (destructor must be done)'#010+
       '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
    -  '**2Sy_@<pointer> returns a typed pointer, same as $T+'#010+
    +  '**2Sy_@<pointer> retur','ns a typed pointer, same as $T+'#010+
       '**1s_Do not call assembler and linker'#010+
       '**2sh_Generate script to link on host'#010+
    -  '**2st_Gen','erate script to link on target'#010+
    +  '**2st_Generate script to link on target'#010+
       '**2sr_Skip register allocation phase (use with -alr)'#010+
       '**1T<x>_Target operating system:'#010+
    -  '3*2Tdarwin_Darwin/Mac OS X'#010+
    +  '3*2Tda','rwin_Darwin/Mac OS X'#010+
       '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
       '3*2Tfreebsd_FreeBSD'#010+
    -  '3*2Tgo32v2_Version 2 of DJ',' Delorie DOS extender'#010+
    +  '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
       '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+
       'rwin)'#010+
       '3*2Tlinux_Linux'#010+
    -  '3*2Tnativent_Native NT API (experimental)'#010+
    +  '3*2Tnativ','ent_Native NT API (experimental)'#010+
       '3*2Tnetbsd_NetBSD'#010+
       '3*2Tnetware_Novell Netware Module (clib)'#010+
    -  '3*2Tnetwlibc_Novell Netwa','re Module (libc)'#010+
    +  '3*2Tnetwlibc_Novell Netware Module (libc)'#010+
       '3*2Topenbsd_OpenBSD'#010+
       '3*2Tos2_OS/2 / eComStation'#010+
       '3*2Tsunos_SunOS/Solaris'#010+
       '3*2Tsymbian_Symbian OS'#010+
    -  '3*2Tsolaris_Solaris'#010+
    +  '3*2Tsolaris_','Solaris'#010+
       '3*2Twatcom_Watcom compatible DOS extender'#010+
       '3*2Twdosx_WDOSX DOS extender'#010+
       '3*2Twin32_Windows 32 Bit'#010+
    -  '3*2Twince_Win','dows CE'#010+
    +  '3*2Twince_Windows CE'#010+
       '4*2Tdarwin_Darwin/Mac OS X'#010+
       '4*2Tlinux_Linux'#010+
       '4*2Twin64_Win64 (64 bit Windows systems)'#010+
       '6*2Tamiga_Commodore Amiga'#010+
    -  '6*2Tatari_Atari ST/STe/TT'#010+
    +  '6*2Ta','tari_Atari ST/STe/TT'#010+
       '6*2Tlinux_Linux'#010+
       '6*2Tpalmos_PalmOS'#010+
       'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+
       'A*2Tlinux_Linux'#010+
    -  'A*2Twince_Windo','ws CE'#010+
    +  'A*2Twince_Windows CE'#010+
       'P*2Tamiga_AmigaOS'#010+
       'P*2Tdarwin_Darwin/Mac OS X'#010+
       'P*2Tlinux_Linux'#010+
       'P*2Tmacos_Mac OS (classic)'#010+
       'P*2Tmorphos_MorphOS'#010+
    -  'S*2Tsolaris_Solaris'#010+
    +  'S*2Tsolar','is_Solaris'#010+
       'S*2Tlinux_Linux'#010+
       '**1u<x>_Undefines the symbol <x>'#010+
       '**1U_Unit options:'#010+
    -  '**2Un_Do not check where the unit name',' matches the file name'#010+
    +  '**2Un_Do not check where the unit name matches the file name'#010+
       '**2Ur_Generate release unit files (never automatically recompiled)'#010+
       '**2Us_Compile a system unit'#010+
    -  '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
    -  '**2*_e : Show errors (default)       0 : Show nothing (','except errors'+
    -  ')'#010+
    +  '**1v<','x>_Be verbose. <x> 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*_n : Show notes                  t : Show tried/','used files'#010+
       '**2*_h : Show hints                  c : Show conditionals'#010+
    -  '**2*_i : Show general info           d : Show d','ebug info'#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 : Sh','ow message numbers'#010+
       '**2*_a : Show everything             x : Executable info (Win32 only)'#010+
    -  '**2*_b : Write file names me','ssages   p : Write tree.log with parse t'+
    -  'ree'#010+
    +  '**2*_b : Write file names messages   p : Write tree.log with parse tre'+
    +  'e'#010+
       '**2*_    with full path              v : Write fpcdebug.txt with'#010+
    -  '**2*_                                    lots of debugging info'#010+
    +  '**2*_         ','                           lots of debugging info'#010+
       '**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+
    -  'F*1V<x>_Ap','pend '#039'-<x>'#039' to the used compiler binary name (e.g.'+
    -  ' for version)'#010+
    +  'F*1V<x>_Append '#039'-<x>'#039' to the used compiler binary name (e.g. f'+
    +  'or version)'#010+
       '**1W<x>_Target-specific options (targets)'#010+
    -  '3*2WA_Specify native type application (Windows)'#010+
    +  '3*2WA_Specify nat','ive type application (Windows)'#010+
       '4*2WA_Specify native type application (Windows)'#010+
    -  'A*2WA_Specify native type application ','(Windows)'#010+
    +  'A*2WA_Specify native type application (Windows)'#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+
    +  'p*2Wb_Cre','ate a bundle instead of a library (Darwin)'#010+
       'A*2Wb_Create a bundle instead of a library (Darwin)'#010+
    -  '4*2Wb_Create a bundle ','instead of a library (Darwin)'#010+
    +  '4*2Wb_Create a bundle instead of a library (Darwin)'#010+
       '3*2WB_Create a relocatable image (Windows, Symbian)'#010+
    -  '3*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
    +  '3*2WBxxxx_Set image base to xxxx (Windows',', Symbian)'#010+
       '4*2WB_Create a relocatable image (Windows)'#010+
       '4*2WBxxxx_Set image base to xxxx (Windows)'#010+
    -  'A*2WB_Create a reloc','atable image (Windows, Symbian)'#010+
    +  'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
       'A*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
    -  '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
    +  '3*2WC_Specify console type application ','(EMX, OS/2, Windows)'#010+
       '4*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
    -  'A*2WC_Specify console type applicati','on (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+
    +  '3*2WD_Use DEFFILE to export functions of DLL or EXE (W','indows)'#010+
       '4*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+
    +  '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+
    +  'A*2We_Use external resources (Da','rwin)'#010+
       'P*2We_Use external resources (Darwin)'#010+
       'p*2We_Use external resources (Darwin)'#010+
    -  '3*2WF_Specify full-screen type appl','ication (EMX, OS/2)'#010+
    +  '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
       '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
    -  '4*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
    +  '4*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 Mac OS)'#010+
       '3*2Wi_Use internal resources (Darwin)'#010+
       '4*2Wi_Use internal resources (Darwin)'#010+
       'A*2Wi_Use internal resources (Darwin)'#010+
    -  'P*2Wi_Use internal resources (Darwin)'#010+
    +  'P*2W','i_Use internal resources (Darwin)'#010+
       'p*2Wi_Use internal resources (Darwin)'#010+
    -  '3*2WI_Turn on/off the usage of import section','s (Windows)'#010+
    +  '3*2WI_Turn on/off the usage of import sections (Windows)'#010+
       '4*2WI_Turn on/off the usage of import sections (Windows)'#010+
    -  'A*2WI_Turn on/off the usage of import sections (Windows)'#010+
    +  'A*2WI_Turn on/off the usage of import sections (Window','s)'#010+
       '8*2Wm<x>_Set memory model'#010+
       '8*3WmTiny_Tiny memory model'#010+
       '8*3WmSmall_Small memory model (default)'#010+
    -  '8*3WmMedium_Medium m','emory model'#010+
    +  '8*3WmMedium_Medium memory model'#010+
       '3*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
       'n)'#010+
    -  '4*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
    -  'n)'#010+
    +  '4*2WM<x>_Minimum Mac OS X deployment v','ersion: 10.4, 10.5.1, ... (Dar'+
    +  'win)'#010+
       'p*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
       'n)'#010+
    -  'P*2WM<x>_','Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Dar'+
    -  'win)'#010+
    -  '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
    +  'P*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
    +  'n)'#010+
    +  '3*2WN_Do not generate relocation code, needed for debugging',' (Windows'+
    +  ')'#010+
       '4*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
    -  'A*2WN_Do not generate relocation cod','e, needed for debugging (Windows'+
    -  ')'#010+
    +  'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
       'A*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
    -  'V*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
    -  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesi','m)'+
    -  #010+
    +  'V*2Wpxxxx_Specify t','he controller type, see fpc -i for possible value'+
    +  's'#010+
    +  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesim)'#010+
       'A*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (Darwin)'#010+
       '3*2WR_Generate relocation code (Windows)'#010+
    -  '4*2WR_Generate relocation code (Windows)'#010+
    +  '4*2WR_Generat','e relocation code (Windows)'#010+
       'A*2WR_Generate relocation code (Windows)'#010+
       '8*2Wt<x>_Set the target executable format'#010+
    -  '8*3Wte','xe_Create a DOS .EXE file (default)'#010+
    +  '8*3Wtexe_Create a DOS .EXE file (default)'#010+
       '8*3Wtcom_Create a DOS .COM file (requires tiny memory model)'#010+
    -  'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
    +  'P*2WT_Specify MPW tool typ','e application (Classic Mac OS)'#010+
       '**2WX_Enable executable stack (Linux)'#010+
       '**1X_Executable options:'#010+
    -  '**2Xc_Pass --shared/-dy','namic to the linker (BeOS, Darwin, FreeBSD, L'+
    -  'inux)'#010+
    +  '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
    +  'ux)'#010+
       '**2Xd_Do not search default library path (sometimes required for cross'+
    -  '-compiling when not using -XR)'#010+
    +  '-c','ompiling when not using -XR)'#010+
       '**2Xe_Use external linker'#010+
    -  '**2Xg_Create debuginfo in a separate file and add a debuglink ','sectio'+
    -  'n to executable'#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+
    -  '**2Xm_Generate link map'#010+
    +  '**2Xm_G','enerate link map'#010+
       '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
       's '#039'main'#039')'#010+
    -  'F*2Xp<x>_First search for th','e compiler binary in the directory <x>'#010+
    +  'F*2Xp<x>_First search for the compiler binary in the directory <x>'#010+
       '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
    -  '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+
    -  'ile, see the ld manual for more information) (BeOS, Linux)'#010+
    -  '**2XR<x>_Prepend <x>',' to all linker search paths (BeOS, Darwin, FreeB'+
    -  'SD, Linux, Mac OS, Solaris)'#010+
    +  '**2Xr<x>_Set the linker'#039's rl','ink-path to <x> (needed for cross co'+
    +  'mpile, see the ld manual for more information) (BeOS, Linux)'#010+
    +  '**2XR<x>_Prepend <x> 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, defines FPC_LINK_STATIC)'#010+
    -  '**2Xt_Link with static libraries (-static is passed to',' linker)'#010+
    +  '**2XS_T','ry to link units statically (default, defines FPC_LINK_STATIC'+
    +  ')'#010+
    +  '**2Xt_Link with static libraries (-static is passed to linker)'#010+
       '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
       '**1*_'#010+
       '**1?_Show this help'#010+
    -  '**1h_Shows this help without waiting'
    +  '**1h_Shows this help w','ithout waiting'
     );
    Index: ncgflw.pas
    ===================================================================
    --- ncgflw.pas	(revision 26481)
    +++ ncgflw.pas	(working copy)
    @@ -422,259 +422,67 @@
     
     
         procedure tcgfornode.pass_generate_code;
    -      var
    -         l3,oldclabel,oldblabel,
    -         otl, ofl : tasmlabel;
    +       type
    +         tcompconst = (cc_false, cc_true, cc_true_withrangecheck);
    +       var
              temptovalue : boolean;
    -         hop : topcg;
    -         hcond : topcmp;
              opsize : tcgsize;
    -         count_var_is_signed,do_loopvar_at_end : boolean;
    -         cmp_const:Tconstexprint;
    -         oldflowcontrol : tflowcontrol;
    -         oldexecutionweight : longint;
    -         isjump: boolean;
    -      begin
    -         location_reset(location,LOC_VOID,OS_NO);
    -         ofl:=nil;
    -         otl:=nil;
    +         count_var_is_signed : boolean;
    +         step : aint;
     
    -         oldclabel:=current_procinfo.CurrContinueLabel;
    -         oldblabel:=current_procinfo.CurrBreakLabel;
    -         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
    -         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
    -         current_asmdata.getjumplabel(l3);
    -
    -         { only calculate reference }
    -         opsize := def_cgsize(left.resultdef);
    -         count_var_is_signed:=is_signed(left.resultdef);
    -
    -         { first set the to value
    -           because the count var can be in the expression ! }
    -         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
    -         { if the loop is unrolled and there is a jump into the loop,
    -           then we can't do the trick with incrementing the loop var only at the
    -           end
    -         }
    -           and not(assigned(entrylabel));
    -
    -        isjump:=(t1.expectloc=LOC_JUMP);
    -        if isjump then
    -          begin
    -             otl:=current_procinfo.CurrTrueLabel;
    -             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    -             ofl:=current_procinfo.CurrFalseLabel;
    -             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    -          end;
    -        secondpass(t1);
    -        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
    -          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
    -        if isjump then
    -          begin
    -            current_procinfo.CurrTrueLabel:=otl;
    -            current_procinfo.CurrFalseLabel:=ofl;
    -          end;
    -         { calculate pointer value and check if changeable and if so }
    -         { load into temporary variable                       }
    -         if t1.nodetype<>ordconstn then
    -           begin
    -              do_loopvar_at_end:=false;
    -              temptovalue:=true;
    -           end
    -         else
    -           temptovalue:=false;
    -
    -         { load loopvar, prefer loopvar being a register variable }
    -         oldexecutionweight:=cg.executionweight;
    -         inc(cg.executionweight,8);
    -         secondpass(left);
    -         cg.executionweight:=oldexecutionweight;
    -
    -         { load from value }
    -         isjump:=(right.expectloc=LOC_JUMP);
    -         if isjump then
    -           begin
    -              otl:=current_procinfo.CurrTrueLabel;
    -              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    -              ofl:=current_procinfo.CurrFalseLabel;
    -              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    -           end;
    -         secondpass(right);
    -         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
    -           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
    -         if isjump then
    -           begin
    -             current_procinfo.CurrTrueLabel:=otl;
    -             current_procinfo.CurrFalseLabel:=ofl;
    -           end;
    -
    -         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
    -         oldflowcontrol:=flowcontrol;
    -         include(flowcontrol,fc_inflowcontrol);
    -         { produce start assignment }
    -         case left.location.loc of
    -           LOC_REFERENCE,
    -           LOC_CREFERENCE :
    -             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
    -           LOC_REGISTER,
    -           LOC_CREGISTER:
    -             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
    -           LOC_SUBSETREG,
    -           LOC_CSUBSETREG :
    -             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
    -           else
    -             internalerror(200501311);
    -         end;
    -
    -         if lnf_backward in loopflags then
    -           if count_var_is_signed then
    -             hcond:=OC_LT
    -           else
    -             hcond:=OC_B
    -         else
    -           if count_var_is_signed then
    -             hcond:=OC_GT
    -           else
    -             hcond:=OC_A;
    -
    -         sync_regvars(true);
    -{$ifdef OLDREGVARS}
    -         load_all_regvars(current_asmdata.CurrAsmList);
    -{$endif OLDREGVARS}
    -
    -         if temptovalue then
    -           begin
    -             case t1.location.loc of
    -               LOC_REGISTER,LOC_CREGISTER:
    -                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -                   t1.location.register,left.location,current_procinfo.CurrBreakLabel);
    -               LOC_REFERENCE,LOC_CREFERENCE:
    -                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -                   t1.location.reference,left.location,current_procinfo.CurrBreakLabel);
    -             else
    -               InternalError(2013051601);
    -             end;
    -           end
    -         else
    -           begin
    -             if lnf_testatbegin in loopflags then
    -               begin
    -                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -                   tordconstnode(t1).value.svalue,
    -                   left.location,current_procinfo.CurrBreakLabel);
    -               end;
    -           end;
    -
    -         {If the loopvar doesn't mind on exit, we avoid this ugly
    -          dec instruction and do the loopvar inc/dec after the loop
    -          body.}
    -         if not do_loopvar_at_end then
    -            begin
    -              if lnf_backward in loopflags then
    -                hop:=OP_ADD
    -              else
    -                hop:=OP_SUB;
    -              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
    -            end;
    -
    -         if assigned(entrylabel) then
    -           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
    -
    -         { align loop target }
    -         if not(cs_opt_size in current_settings.optimizerswitches) then
    -            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
    -         hlcg.a_label(current_asmdata.CurrAsmList,l3);
    -
    -         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
    -          after the loop body instead of here.}
    -         if not do_loopvar_at_end then
    -            begin
    -              { according to count direction DEC or INC... }
    -              if lnf_backward in loopflags then
    -                hop:=OP_SUB
    -              else
    -                hop:=OP_ADD;
    -              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
    -            end;
    -
    -         if assigned(t2) then
    -           begin
    -             { Calc register weight }
    -             oldexecutionweight:=cg.executionweight;
    -             cg.executionweight:=cg.executionweight*8;
    -             secondpass(t2);
    -             cg.executionweight:=oldexecutionweight;
    -{$ifdef OLDREGVARS}
    -             load_all_regvars(current_asmdata.CurrAsmList);
    -{$endif OLDREGVARS}
    -           end;
    -
    -         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
    -          after the loop body instead of here.}
    -         if do_loopvar_at_end then
    -            begin
    -              { according to count direction DEC or INC... }
    -              if lnf_backward in loopflags then
    -                hop:=OP_SUB
    -              else
    -                hop:=OP_ADD;
    -              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
    -            end;
    -
    -         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
    -
    -         if do_loopvar_at_end then
    -           if lnf_backward in loopflags then
    +        procedure check_loopvar(comp_greater, comp_equal : boolean;
    +                                jump_to_label : tasmlabel;
    +                                check_const : tcompconst);
    +        var
    +          hcond: topcmp;
    +          cmp_const: Tconstexprint;
    +        begin
    +          if comp_equal then
    +            if comp_greater then
    +               if count_var_is_signed then
    +                 hcond:=OC_GTE
    +               else
    +                 hcond:=OC_AE
    +            else // forward
    +                if count_var_is_signed then
    +                  hcond:=OC_LTE
    +                else
    +                  hcond:=OC_BE
    +         else // is_before_body
    +            if comp_greater then
                  if count_var_is_signed then
    -               hcond:=OC_GTE
    -             else
    -               hcond:=OC_AE
    -            else
    -              if count_var_is_signed then
    -                hcond:=OC_LTE
    -              else
    -                hcond:=OC_BE
    -         else
    -           if lnf_backward in loopflags then
    -             if count_var_is_signed then
                    hcond:=OC_GT
                  else
                    hcond:=OC_A
    -            else
    +            else // forward
                   if count_var_is_signed then
                     hcond:=OC_LT
                   else
                     hcond:=OC_B;
    -{$ifdef OLDREGVARS}
    -         load_all_regvars(current_asmdata.CurrAsmList);
    -{$endif OLDREGVARS}
     
    -         { produce comparison and the corresponding }
    -         { jump                                     }
              if temptovalue then
                begin
                  case t1.location.loc of
                    LOC_REGISTER,LOC_CREGISTER:
    -                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.register,
    -                   left.location,l3);
    +                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    +                   t1.location.register,left.location,jump_to_label);
                    LOC_REFERENCE,LOC_CREFERENCE:
    -                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.reference,
    -                   left.location,l3);
    +                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    +                   t1.location.reference,left.location,jump_to_label);
                  else
    -               InternalError(2013051602);
    +               InternalError(2013051601);
                  end;
                end
              else
                begin
    -             cmp_const:=Tordconstnode(t1).value;
    -             if do_loopvar_at_end then
    +             if check_const=cc_true_withrangecheck then
                    begin
    -                 {Watch out for wrap around 255 -> 0.}
    -                 {Ugly: This code is way to long... Use tables?}
    +                 cmp_const:=Tordconstnode(t1).value;
    +                 // we check here if we need to alter hcond if the loopvar range is met
                      case opsize of
                        OS_8:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if byte(cmp_const.svalue)=low(byte) then
                                  begin
    @@ -693,7 +501,7 @@
                          end;
                        OS_16:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if word(cmp_const.svalue)=high(word) then
                                  begin
    @@ -712,7 +520,7 @@
                          end;
                        OS_32:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if cardinal(cmp_const.svalue)=high(cardinal) then
                                  begin
    @@ -731,7 +539,7 @@
                          end;
                        OS_64:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if qword(cmp_const.uvalue)=high(qword) then
                                  begin
    @@ -750,7 +558,7 @@
                          end;
                        OS_S8:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if shortint(cmp_const.svalue)=low(shortint) then
                                  begin
    @@ -769,7 +577,7 @@
                          end;
                        OS_S16:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if integer(cmp_const.svalue)=high(smallint) then
                                  begin
    @@ -788,7 +596,7 @@
                          end;
                        OS_S32:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if longint(cmp_const.svalue)=high(longint) then
                                  begin
    @@ -807,7 +615,7 @@
                          end;
                        OS_S64:
                          begin
    -                       if lnf_backward in loopflags then
    +                       if comp_greater then
                              begin
                                if int64(cmp_const.svalue)=high(int64) then
                                  begin
    @@ -829,10 +637,192 @@
                      end;
                    end;
     
    -             hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    -               aint(cmp_const.svalue),left.location,l3);
    +             if check_const >= cc_true then
    +               begin
    +                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
    +                   tordconstnode(t1).value.svalue,
    +                   left.location,jump_to_label);
    +               end;
                end;
    +        end;
     
    +        procedure do_loopvar(is_backward : boolean);
    +          var
    +            hop: topcg;
    +          begin
    +            { according to count direction DEC or INC... }
    +            if is_backward then
    +              hop:=OP_SUB
    +            else
    +              hop:=OP_ADD;
    +            hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,step,left.location);
    +          end;
    +
    +      var
    +         l3,oldclabel,oldblabel,
    +         otl, ofl : tasmlabel;
    +         do_loopvar_at_end : boolean;
    +         oldflowcontrol : tflowcontrol;
    +         oldexecutionweight : longint;
    +         isjump: boolean;
    +      begin
    +         location_reset(location,LOC_VOID,OS_NO);
    +         ofl:=nil;
    +         otl:=nil;
    +
    +         oldclabel:=current_procinfo.CurrContinueLabel;
    +         oldblabel:=current_procinfo.CurrBreakLabel;
    +         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
    +         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
    +         current_asmdata.getjumplabel(l3);
    +
    +         { only calculate reference }
    +         opsize := def_cgsize(left.resultdef);
    +         count_var_is_signed:=is_signed(left.resultdef);
    +
    +         { set a value for step. 1 by default }
    +         if not assigned(loopstep) then
    +           step:=1
    +         else
    +           step:=tordconstnode(loopstep).value;
    +
    +         { first set the to value
    +           because the count var can be in the expression ! }
    +         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
    +         { if the loop is unrolled and there is a jump into the loop,
    +           then we can't do the trick with incrementing the loop var only at the
    +           end
    +         }
    +           and not(assigned(entrylabel));
    +
    +        isjump:=(t1.expectloc=LOC_JUMP);
    +        if isjump then
    +          begin
    +             otl:=current_procinfo.CurrTrueLabel;
    +             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    +             ofl:=current_procinfo.CurrFalseLabel;
    +             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    +          end;
    +        secondpass(t1);
    +
    +        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
    +          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
    +        if isjump then
    +          begin
    +            current_procinfo.CurrTrueLabel:=otl;
    +            current_procinfo.CurrFalseLabel:=ofl;
    +          end;
    +         { calculate pointer value and check if changeable and if so }
    +         { load into temporary variable                       }
    +         if t1.nodetype<>ordconstn then
    +           begin
    +              do_loopvar_at_end:=false;
    +              temptovalue:=true;
    +           end
    +         else
    +           temptovalue:=false;
    +
    +         { load loopvar, prefer loopvar being a register variable }
    +         oldexecutionweight:=cg.executionweight;
    +         inc(cg.executionweight,8);
    +         secondpass(left);
    +         cg.executionweight:=oldexecutionweight;
    +
    +         { load from value }
    +         isjump:=(right.expectloc=LOC_JUMP);
    +         if isjump then
    +           begin
    +              otl:=current_procinfo.CurrTrueLabel;
    +              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
    +              ofl:=current_procinfo.CurrFalseLabel;
    +              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
    +           end;
    +         secondpass(right);
    +         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
    +           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
    +         if isjump then
    +           begin
    +             current_procinfo.CurrTrueLabel:=otl;
    +             current_procinfo.CurrFalseLabel:=ofl;
    +           end;
    +
    +         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
    +         oldflowcontrol:=flowcontrol;
    +         include(flowcontrol,fc_inflowcontrol);
    +         { produce start assignment }
    +         case left.location.loc of
    +           LOC_REFERENCE,
    +           LOC_CREFERENCE :
    +             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
    +           LOC_REGISTER,
    +           LOC_CREGISTER:
    +             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
    +           LOC_SUBSETREG,
    +           LOC_CSUBSETREG :
    +             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
    +           else
    +             internalerror(200501311);
    +         end;
    +
    +         sync_regvars(true);
    +{$ifdef OLDREGVARS}
    +         load_all_regvars(current_asmdata.CurrAsmList);
    +{$endif OLDREGVARS}
    +         check_loopvar(not (lnf_backward in loopflags), False, current_procinfo.CurrBreakLabel, tcompconst(ord(lnf_testatbegin in loopflags)));
    +
    +         {If the loopvar doesn't mind on exit, we avoid this ugly
    +          dec instruction and do the loopvar inc/dec after the loop
    +          body.}
    +         if not do_loopvar_at_end then
    +           do_loopvar(not (lnf_backward in loopflags));
    +
    +         if assigned(entrylabel) then
    +           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
    +
    +         { align loop target }
    +         if not(cs_opt_size in current_settings.optimizerswitches) then
    +            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
    +
    +         hlcg.a_label(current_asmdata.CurrAsmList,l3);
    +
    +         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
    +          after the loop body instead of here.}
    +         if not do_loopvar_at_end then
    +            begin
    +              { according to count direction DEC or INC... }
    +              do_loopvar(lnf_backward in loopflags);
    +            end;
    +
    +         if assigned(t2) then
    +           begin
    +             { Calc register weight }
    +             oldexecutionweight:=cg.executionweight;
    +             cg.executionweight:=cg.executionweight*8;
    +             secondpass(t2);
    +             cg.executionweight:=oldexecutionweight;
    +{$ifdef OLDREGVARS}
    +             load_all_regvars(current_asmdata.CurrAsmList);
    +{$endif OLDREGVARS}
    +           end;
    +
    +         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
    +          after the loop body instead of here.}
    +         if do_loopvar_at_end then
    +            begin
    +              { according to count direction DEC or INC... }
    +              do_loopvar(lnf_backward in loopflags);
    +            end;
    +
    +         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
    +
    +{$ifdef OLDREGVARS}
    +         load_all_regvars(current_asmdata.CurrAsmList);
    +{$endif OLDREGVARS}
    +         if do_loopvar_at_end then
    +           check_loopvar(lnf_backward in loopflags, True{comp_equal},l3{jump_to}, cc_true_withrangecheck)
    +         else
    +           check_loopvar(lnf_backward in loopflags, False{comp_equal},l3{jump_to}, cc_true_withrangecheck);
    +
              { this is the break label: }
              hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrBreakLabel);
     
    Index: nflw.pas
    ===================================================================
    --- nflw.pas	(revision 26481)
    +++ nflw.pas	(working copy)
    @@ -99,8 +99,10 @@
               entrylabel,
               { this is a dummy node used by the dfa to store life information for the loop iteration }
               loopiteration : tnode;
    +          loopstep : tnode;
               loopvar_notid:cardinal;
    -          constructor create(l,r,_t1,_t2 : tnode;back : boolean);virtual;reintroduce;
    +          constructor create(l,r,_t1,_t2, step : tnode;back : boolean);virtual;reintroduce;
    +          destructor destroy; override;
               procedure loop_var_access(not_type:Tnotification_flag;symbol:Tsym);
               function wrap_to_value:tnode;
               function pass_typecheck:tnode;override;
    @@ -240,7 +242,7 @@
           cutils,verbose,globals,
           symconst,symtable,paramgr,defcmp,defutil,htypechk,pass_1,
           ncal,nadd,ncon,nmem,nld,ncnv,nbas,cgobj,nutils,ninl,nset,
    -      pdecsub,
    +      pdecsub,nmat,
         {$ifdef state_tracking}
           nstate,
         {$endif}
    @@ -259,6 +261,7 @@
               cinlinenode.create(in_low_x,false,expr.getcopy),
               cinlinenode.create(in_high_x,false,expr.getcopy),
               hloopbody,
    +          nil{step node},
               false);
           end;
     
    @@ -529,6 +532,7 @@
               genintconstnode(1),
               cinlinenode.create(in_length_x,false,ctemprefnode.create(stringvar)),
               loopbody,
    +          nil{step node},
               false);
     
             addstatement(loopstatement,forloopnode);
    @@ -642,6 +646,7 @@
               lowbound,
               highbound,
               loopbody,
    +          nil{step node},
               false);
     
             addstatement(loopstatement,forloopnode);
    @@ -707,6 +712,7 @@
               cinlinenode.create(in_low_x,false,ctemprefnode.create(setvar)),
               cinlinenode.create(in_high_x,false,ctemprefnode.create(setvar)),
               loopbody,
    +          nil{step node},
               false);
     
             addstatement(loopstatement,forloopnode);
    @@ -1421,15 +1427,24 @@
                                   TFORNODE
     *****************************************************************************}
     
    -    constructor tfornode.create(l,r,_t1,_t2 : tnode;back : boolean);
    +    constructor tfornode.create(l,r,_t1,_t2, step : tnode;back : boolean);
     
           begin
              inherited create(forn,l,r,_t1,_t2);
    +         loopstep := step;
              if back then
                include(loopflags,lnf_backward);
              include(loopflags,lnf_testatbegin);
           end;
     
    +    destructor tfornode.destroy;
    +
    +      begin
    +         if assigned(loopstep) then
    +           loopstep.free;
    +         inherited destroy;
    +      end;
    +
         procedure Tfornode.loop_var_access(not_type:Tnotification_flag;
                                            symbol:Tsym);
     
    @@ -1492,18 +1507,49 @@
             result:=internalstatements(statements);
             temp:=ctempcreatenode.create(t1.resultdef,t1.resultdef.size,tt_persistent,true);
             addstatement(statements,temp);
    -        addstatement(statements,cassignmentnode.create(
    -          ctemprefnode.create(temp),
    -          t1));
    +
    +        if loopstep = nil then
    +          addstatement(statements,cassignmentnode.create(
    +            ctemprefnode.create(temp),
    +            t1))
    +        else { make sure that to-from mod loopvar is 0 so we don't rely on the carry flag }
    +          if not (lnf_backward in loopflags) then
    +            { temp := ((t1-right) div loopstep) * loopstep + right; }
    +            addstatement(statements,cassignmentnode.create(
    +              ctemprefnode.create(temp),
    +              caddnode.create(addn,
    +                 right.getcopy,
    +                caddnode.create(muln,
    +                  cmoddivnode.create(divn,
    +                    caddnode.create(subn,
    +                      t1.getcopy,
    +                      right.getcopy),
    +                    loopstep.getcopy),
    +                  loopstep.getcopy))))
    +          else
    +            { temp := ((right-t1) div loopstep) * loopstep - right; }
    +            addstatement(statements,cassignmentnode.create(
    +              ctemprefnode.create(temp),
    +              caddnode.create(subn,
    +                right.getcopy,
    +                caddnode.create(muln,
    +                  cmoddivnode.create(divn,
    +                    caddnode.create(subn,
    +                      right.getcopy,
    +                      t1.getcopy),
    +                    loopstep.getcopy),
    +                  loopstep.getcopy))));
    +
             { create a new for node, it is cheaper than cloning entire loop body }
             addstatement(statements,cfornode.create(
    -          left,right,ctemprefnode.create(temp),t2,lnf_backward in loopflags));
    +          left,right,ctemprefnode.create(temp),t2,loopstep,lnf_backward in loopflags));
             addstatement(statements,ctempdeletenode.create(temp));
             { all child nodes are reused }
             left:=nil;
             right:=nil;
             t1:=nil;
             t2:=nil;
    +        loopstep:=nil;
           end;
     
     
    @@ -1550,14 +1596,36 @@
     
     
         function tfornode.pass_1 : tnode;
    +      var
    +        to_from_are_consts : boolean;
    +        adjusted_to: Tconstexprint;
           begin
              result:=nil;
              expectloc:=LOC_VOID;
     
    +         to_from_are_consts:=(left.nodetype=ordconstn)and(right.nodetype = ordconstn);
    +         { this code ensures that from-to is a multiple of the 'by' value }
    +         if to_from_are_consts and assigned(loopstep) then
    +           begin
    +             if not (lnf_backward in loopflags) then
    +               begin { to }
    +                 adjusted_to:=tordconstnode(t1).value - tordconstnode(right).value div tordconstnode(loopstep).value.uvalue;
    +                 tordconstnode(t1).value:=tordconstnode(right).value+(adjusted_to*tordconstnode(loopstep).value);
    +               end
    +             else
    +               begin { downto }
    +                 adjusted_to:=tordconstnode(right).value - tordconstnode(t1).value div tordconstnode(loopstep).value.uvalue;
    +                 tordconstnode(t1).value:=tordconstnode(right).value-(adjusted_to*tordconstnode(loopstep).value);
    +               end;
    +           end;
    +
              firstpass(left);
              firstpass(right);
              firstpass(t1);
     
    +         if assigned(loopstep) then
    +           firstpass(loopstep);
    +
              if assigned(t2) then
                firstpass(t2);
              if codegenerror then
    @@ -1565,7 +1633,7 @@
     
              { 'to' value must be evaluated once before loop, so its possible modifications
                inside loop body do not affect the number of iterations (see webtbs/tw8883). }
    -         if not (t1.nodetype in [ordconstn,temprefn]) then
    +         if not (t1.nodetype in [ordconstn,temprefn]) or (assigned(loopstep) and (t1.nodetype = ordconstn))then
                result:=wrap_to_value;
           end;
     
    Index: ninl.pas
    ===================================================================
    --- ninl.pas	(revision 26481)
    +++ ninl.pas	(working copy)
    @@ -4192,6 +4192,7 @@
                cinlinenode.create(in_low_x,false,packednode.getcopy),
                cinlinenode.create(in_high_x,false,packednode.getcopy),
                loopbody,
    +           nil{step},
                false);
              addstatement(loopstatement,tempnode);
              { free the loop counter }
    Index: optloop.pas
    ===================================================================
    --- optloop.pas	(revision 26481)
    +++ optloop.pas	(working copy)
    @@ -102,12 +102,21 @@
             getridoffor : boolean;
             replaceinfo : treplaceinfo;
             usesbreakcontinue : boolean;
    +        stepvalue : Tconstexprint;
    +        stepcopy: tnode;
           begin
             result:=nil;
             if (cs_opt_size in current_settings.optimizerswitches) then
               exit;
             if not(node.nodetype in [forn]) then
               exit;
    +
    +        { set the loop step increment }
    +        if tfornode(node).loopstep=nil then
    +          stepvalue:=1
    +        else
    +          stepvalue:=tordconstnode(tfornode(node).loopstep).value;
    +
             unrolls:=number_unrolls(tfornode(node).t2);
             if unrolls>1 then
               begin
    @@ -115,10 +124,16 @@
                 if (tfornode(node).right.nodetype=ordconstn) and (tfornode(node).t1.nodetype=ordconstn) then
                   begin
                     if lnf_backward in tfornode(node).loopflags then
    -                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value+1
    +                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value
                     else
    -                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value+1;
    +                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value;
     
    +                if stepvalue > 1 then
    +                  counts:=counts div stepvalue + 1
    +                { always add 1}
    +                else
    +                  inc(counts);
    +
                     usesbreakcontinue:=foreachnodestatic(tfornode(node).t2,@checkbreakcontinue,nil);
     
                     { don't unroll more than we need,
    @@ -161,22 +176,28 @@
                           begin
                             foreachnodestatic(tnode(unrollstatement),@replaceloadnodes,@replaceinfo);
                             if lnf_backward in tfornode(node).loopflags then
    -                          replaceinfo.value:=replaceinfo.value-1
    +                          replaceinfo.value:=replaceinfo.value-stepvalue
                             else
    -                          replaceinfo.value:=replaceinfo.value+1;
    +                          replaceinfo.value:=replaceinfo.value+stepvalue;
                           end
                         else
                           begin
                             { for itself increases at the last iteration }
                             if i<unrolls then
                               begin
    +                            { create copy of step node if needed }
    +                            if tfornode(node).loopstep = nil then
    +                              stepcopy:=nil
    +                            else // if stepincrement
    +                              stepcopy:=ccallparanode.create(tfornode(node).loopstep.getcopy, nil);
    +
                                 { insert incr/decrementation of counter var }
                                 if lnf_backward in tfornode(node).loopflags then
                                   addstatement(unrollstatement,
    -                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)))
    +                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)))
                                 else
                                   addstatement(unrollstatement,
    -                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)));
    +                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)));
                               end;
                            end;
                       end;
    @@ -306,6 +327,7 @@
           var
             tempnode : ttempcreatenode;
             dummy : longint;
    +        stepcopy : tnode;
           begin
             result:=fen_false;
             case n.nodetype of
    @@ -344,14 +366,20 @@
                           inductionexprs.Add(n);
                           CreateNodes;
     
    +                      { check if we are using a stepvalue}
    +                      if not assigned(tfornode(arg).loopstep) then
    +                        stepcopy:=nil
    +                      else
    +                        stepcopy:=tfornode(arg).loopstep.getcopy;
    +
                           if lnf_backward in tfornode(arg).loopflags then
                             addstatement(calccodestatements,
                               geninlinenode(in_dec_x,false,
    -                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))))
    +                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))))
                           else
                             addstatement(calccodestatements,
                               geninlinenode(in_inc_x,false,
    -                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))));
    +                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))));
     
                           addstatement(initcodestatements,tempnode);
                           addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
    @@ -403,16 +431,22 @@
                           inductionexprs.Add(n);
                           CreateNodes;
     
    +                      { check if we are using a stepvalue}
    +                      if not assigned(tfornode(arg).loopstep) then
    +                        stepcopy:=nil
    +                      else
    +                        stepcopy:=tfornode(arg).loopstep.getcopy;
    +
                           if lnf_backward in tfornode(arg).loopflags then
                             addstatement(calccodestatements,
                               geninlinenode(in_dec_x,false,
                               ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
    -                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))))
    +                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))))
                           else
                             addstatement(calccodestatements,
                               geninlinenode(in_inc_x,false,
                               ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
    -                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))));
    +                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))));
     
                           addstatement(initcodestatements,tempnode);
                           addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
    @@ -467,11 +501,12 @@
                 { create a new for node, the old one will be released by the compiler }
                 with tfornode(node) do
                   begin
    -                fornode:=cfornode.create(left,right,t1,t2,lnf_backward in loopflags);
    +                fornode:=cfornode.create(left,right,t1,t2,loopstep,lnf_backward in loopflags);
                     left:=nil;
                     right:=nil;
                     t1:=nil;
                     t2:=nil;
    +                loopstep:=nil;
                   end;
                 node:=fornode;
     
    Index: pstatmnt.pas
    ===================================================================
    --- pstatmnt.pas	(revision 26481)
    +++ pstatmnt.pas	(working copy)
    @@ -370,8 +370,11 @@
               var
                  hp,
                  hblock,
    +             hstep,
                  hto,hfrom : tnode;
                  backward : boolean;
    +             usesstep : boolean;
    +             stepvalue: Tconstexprint;
                  loopvarsym : tabstractvarsym;
               begin
                  { Check loop variable }
    @@ -473,11 +476,49 @@
                    end;
     
                  hto:=comp_expr(true,false);
    +
    +             if try_to_consume(_BY) then
    +               begin
    +                 hstep:=comp_expr(true,false);
    +                 usesstep:=true;
    +
    +                 { we accept only ordinal consts and not enums }
    +                 if not is_ordinal(hstep.resultdef) or is_enum(hstep.resultdef) then
    +                   Message(type_e_ordinal_expr_expected)
    +                 else
    +                   if ErrorCount = 0 then
    +                     begin
    +                       stepvalue := get_ordinal_value(hstep);
    +                       if abs(stepvalue.svalue) = 1 then
    +                         begin
    +                           { no need to do anything if step = 1 }
    +                           hstep.free;
    +                           hstep := nil;
    +                           usesstep:=false;
    +                         end
    +                       else
    +                         if backward and (stepvalue.svalue >= 0) then
    +                           Message1(parser_e_expected_negative_by_value, tostr(stepvalue))
    +                         else if not backward and (stepvalue.svalue <= 0) then
    +                           Message1(parser_e_expected_positive_by_value, tostr(stepvalue))
    +                         else
    +                           if backward then
    +                             tordconstnode(hstep).value.uvalue := abs(stepvalue.svalue);
    +                     end;
    +               end
    +             else
    +               begin
    +                 hstep:=nil;
    +                 usesstep:=false;
    +               end;
    +
                  consume(_DO);
     
                  { Check if the constants fit in the range }
                  check_range(hfrom,hloopvar.resultdef);
                  check_range(hto,hloopvar.resultdef);
    +             if usesstep then
    +               check_range(hstep,hloopvar.resultdef);
     
                  { first set the varstate for from and to, so
                    uses of loopvar in those expressions will also
    @@ -488,6 +529,11 @@
                  set_varstate(hfrom,vs_read,[vsf_must_be_valid]);
                  typecheckpass(hto);
                  set_varstate(hto,vs_read,[vsf_must_be_valid]);
    +             if usesstep then
    +               begin
    +                 typecheckpass(hstep);
    +                 set_varstate(hstep,vs_read,[vsf_must_be_valid]);
    +               end;
                  typecheckpass(hloopvar);
                  { in two steps, because vs_readwritten may turn on vsf_must_be_valid }
                  { for some subnodes                                                  }
    @@ -501,7 +547,7 @@
                  if assigned(loopvarsym) then
                    exclude(loopvarsym.varoptions,vo_is_loop_counter);
     
    -             result:=cfornode.create(hloopvar,hfrom,hto,hblock,backward);
    +             result:=cfornode.create(hloopvar,hfrom,hto,hblock,hstep,backward);
               end;
     
     
    Index: tokens.pas
    ===================================================================
    --- tokens.pas	(revision 26481)
    +++ tokens.pas	(working copy)
    @@ -101,6 +101,7 @@
         _C,
         _AS,
         _AT,
    +    _BY,
         _DO,
         _IF,
         _IN,
    @@ -418,6 +419,7 @@
           (str:'C'             ;special:false;keyword:[m_none];op:NOTOKEN),
           (str:'AS'            ;special:false;keyword:[m_class];op:_OP_AS),
           (str:'AT'            ;special:false;keyword:[m_none];op:NOTOKEN),
    +      (str:'BY'            ;special:false;keyword:[m_none];op:NOTOKEN),
           (str:'DO'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
           (str:'IF'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
           (str:'IN'            ;special:false;keyword:alllanguagemodes;op:_OP_IN),
    
    for_by-noflags.patch (127,354 bytes)
  • forby_tests.patch (5,042 bytes)
    Index: test/tforby01.pp
    ===================================================================
    --- test/tforby01.pp	(revision 0)
    +++ test/tforby01.pp	(working copy)
    @@ -0,0 +1,37 @@
    +{$mode objfpc}
    +
    +{ check for looping past end of intsize and begining}
    +var
    +  i: integer;
    +  j: cardinal;
    +begin
    +  //check past end
    +  for i := high(integer)-1 to high(integer) by 2 do
    +    if i < high(integer)-1 then
    +      begin
    +        WriteLn('for by failed high integer: 0x', hexStr(j, 8));
    +        halt(1); // we've looped past maxint
    +      end;
    +
    +  for j := high(cardinal)-1 to high(cardinal) by 2 do
    +    if j < high(cardinal)-1 then
    +      begin
    +        WriteLn('for by failed high cardinal: 0x', hexStr(j, 8));
    +        halt(1);
    +      end;
    +
    +  // check past beginning
    +  for i := Low(integer)+1 downto Low(integer) by -2 do
    +    if i > Low(integer)+1 then
    +      begin
    +        WriteLn('for by failed low integer: 0x', hexStr(j, 8));
    +        halt(1);
    +      end;
    +
    +  for j := Low(cardinal)+1 downto Low(cardinal) by -2 do
    +    if j > Low(cardinal)+1 then
    +      begin
    +        WriteLn('for by failed low cardinal: 0x', hexStr(j, 8));
    +        halt(1);
    +      end;
    +end.
    Index: test/tforby02.pp
    ===================================================================
    --- test/tforby02.pp	(revision 0)
    +++ test/tforby02.pp	(working copy)
    @@ -0,0 +1,62 @@
    +{$mode objfpc}
    +var
    +  i,
    +  a,
    +  b: integer;
    +  last: Integer;
    +const
    +  BY_VAL=3;
    +begin
    +  Randomize;
    +  a := Random(500); // to get a number the program must determine at runtime
    +  b := a + 100;
    +  for i := a to b by BY_VAL do
    +  begin
    +    if (i < a) or (i > b) then
    +    begin
    +      WriteLn('for by exceeded loop bounds');
    +      Halt(1);
    +    end;
    +    if i <> a then
    +    begin
    +      if last+BY_VAL <> i then
    +      begin
    +        WriteLn('for by i not incremented correctly');
    +        halt(1);
    +      end;
    +    end;
    +    last := i;
    +  end;
    +
    +  if last <> b-1 then
    +  begin
    +    WriteLn('for by stopped too early');
    +    Halt(1);
    +  end;
    +
    +
    +  for i := b downto a by -BY_VAL do
    +  begin
    +    if (i < a) or (i > b) then
    +    begin
    +      WriteLn('for by exceeded loop bounds');
    +      Halt(1);
    +    end;
    +    if i <> b then
    +    begin
    +      if last-BY_VAL <> i then
    +      begin
    +        WriteLn('for by i not decremented correctly');
    +        halt(1);
    +      end;
    +    end;
    +    last := i;
    +  end;
    +  
    +  if last <> a+1 then
    +  begin
    +    WriteLn('for by stopped too early');
    +    Halt(1);
    +  end;
    +
    +end.
    Index: test/tforbyunrolled01.pp
    ===================================================================
    --- test/tforbyunrolled01.pp	(revision 0)
    +++ test/tforbyunrolled01.pp	(working copy)
    @@ -0,0 +1,38 @@
    +{ %OPT=-Ooloopunroll }
    +{$mode objfpc}
    +
    +{ check for looping past end of intsize and begining}
    +var
    +  i: integer;
    +  j: cardinal;
    +begin
    +  //check past end
    +  for i := high(integer)-1 to high(integer) by 2 do
    +    if i < high(integer)-1 then
    +      begin
    +        WriteLn('for by failed high integer: 0x', hexStr(j, 8));
    +        halt(1); // we've looped past maxint
    +      end;
    +
    +  for j := high(cardinal)-1 to high(cardinal) by 2 do
    +    if j < high(cardinal)-1 then
    +      begin
    +        WriteLn('for by failed high cardinal: 0x', hexStr(j, 8));
    +        halt(1);
    +      end;
    +
    +  // check past beginning
    +  for i := Low(integer)+1 downto Low(integer) by -2 do
    +    if i > Low(integer)+1 then
    +      begin
    +        WriteLn('for by failed low integer: 0x', hexStr(j, 8));
    +        halt(1);
    +      end;
    +
    +  for j := Low(cardinal)+1 downto Low(cardinal) by -2 do
    +    if j > Low(cardinal)+1 then
    +      begin
    +        WriteLn('for by failed low cardinal: 0x', hexStr(j, 8));
    +        halt(1);
    +      end;
    +end.
    Index: test/tforbyunrolled02.pp
    ===================================================================
    --- test/tforbyunrolled02.pp	(revision 0)
    +++ test/tforbyunrolled02.pp	(working copy)
    @@ -0,0 +1,63 @@
    +{ %OPT=-Ooloopunroll }
    +{$mode objfpc}
    +var
    +  i,
    +  a,
    +  b: integer;
    +  last: Integer;
    +const
    +  BY_VAL=3;
    +begin
    +  Randomize;
    +  a := Random(500); // to get a number the program must determine at runtime
    +  b := a + 100;
    +  for i := a to b by BY_VAL do
    +  begin
    +    if (i < a) or (i > b) then
    +    begin
    +      WriteLn('for by exceeded loop bounds');
    +      Halt(1);
    +    end;
    +    if i <> a then
    +    begin
    +      if last+BY_VAL <> i then
    +      begin
    +        WriteLn('for by i not incremented correctly');
    +        halt(1);
    +      end;
    +    end;
    +    last := i;
    +  end;
    +
    +  if last <> b-1 then
    +  begin
    +    WriteLn('for by stopped too early');
    +    Halt(1);
    +  end;
    +
    +
    +  for i := b downto a by -BY_VAL do
    +  begin
    +    if (i < a) or (i > b) then
    +    begin
    +      WriteLn('for by exceeded loop bounds');
    +      Halt(1);
    +    end;
    +    if i <> b then
    +    begin
    +      if last-BY_VAL <> i then
    +      begin
    +        WriteLn('for by i not decremented correctly');
    +        halt(1);
    +      end;
    +    end;
    +    last := i;
    +  end;
    +
    +  if last <> a+1 then
    +  begin
    +    WriteLn('for by stopped too early');
    +    Halt(1);
    +  end;
    +
    +end.
    
    forby_tests.patch (5,042 bytes)

Activities

Marco van de Voort

2014-01-17 09:13

manager   ~0072509

Last edited: 2014-01-17 09:45

View 2 revisions

(btw, "step" is the BASIC style keyword. Other Wirthians like Modula2 use "by", with negative values for downto)

Sven Barth

2014-01-17 13:59

manager   ~0072512

Last edited: 2014-01-17 14:02

View 2 revisions

Oxygene uses "step" as well (and allows a variable for the step value which is evaluated once).

Edit: You could test a simple constant for-loop (e.g. "1 to 4" or so) with -Ooloopunroll to check whether it would work correctly with or without your "step > 1" check.

Regards,
Sven

AndrewH

2014-01-17 14:50

developer   ~0072514

Last edited: 2014-01-19 00:09

View 2 revisions

@Marco You caught me :) I learned to program with basic a long time ago. I have no problem with step or by. Though step is what comes to mind. Negative numbers for downto add complexity since they will just be converted to positive numbers anyway.

Edit: the latest patch now expects negative numbers when downto is used.

@Sven

Compiling with -Ooloopunroll doesn't make a difference with the output. I think it only matters if "there is a jump into the loop". I'm not sure how to test that.

If I don't set do_loopvar_at_end to true then the loop can be run one step outside it's bounds.

I'm working on a fix now that moves the compare to just after loop_var is changed if step is > 1 so it won't matter. This hopefully will simplify the compiler code a little which is a bit tricky to follow. (I've been staring at it for a day and slept now so it's a bit clearer :)

Marco van de Voort

2014-01-17 16:50

manager   ~0072516

Last edited: 2014-01-17 16:59

View 2 revisions

Sven: yes and wirthian languages use "function" and "procedure". Oxygene is IMHO not strictly Wirthian, but an amalgam/experiment.

Florian

2014-01-17 20:44

administrator   ~0072521

It is at least needed:
- to have extensive tests
- tests which show that unrolling still works

AndrewH

2014-01-18 23:53

developer   ~0072535

Last edited: 2014-01-18 23:56

View 2 revisions

Ok, I uploaded the latest version of this patch. for_by.patch

It changes the keyword to by instead of step.

Also when downto is used a negative by value is expected.

I moved the various compare code in the for generation in tcgfornode.pass_generate_code; to a subproc which accepts some flags to encompass the differences in each compare. This allows the compare to be moved to before t2 without a bunch of code duplication if that's where the loopvar is changed. Currently the compare is only moved if step > 1.

This should fix any problem of an unrolled loop jumping into the for loop.

Currently the only problem I'm aware of is using downto with a value low enough that the the step value can wrap around to < 0.
for i := 4 downto 0 by -5
but
for i := 4 downto 0 by -4
would be handled correctly

AndrewH

2014-01-19 00:02

developer   ~0072536

Last edited: 2014-01-19 00:59

View 2 revisions

I just checked and
i:byte;
for i := 254 to 255 by 3 do
runs forever too.

Is there an easy way to check the carry flag?

Edit: Also unrolled loops aren't happy.

procedure loop;
var
 i: byte;
 j: byte;
begin
 j := 0;
 for i := 0 to 2 by 2 do
   j := j + 1;
 writeln(j);
end;
outputs 4. should be 2

AndrewH

2014-01-19 16:09

developer   ~0072544

Last edited: 2014-01-19 16:11

View 2 revisions

I added a new for_by.patch

Now unrolled loops give the correct result. Also I added a check for the carry flag if step > 1 which fixes the variable looping around it's range.

I'm chasing around a bug if the count of unrolled goes above 7 the compiler crashes.

this works
for i := 0 to 13 by 2 do
   j := j + 1;
this crashes
for i := 0 to 14 by 2 do
   j := j + 1;

Both work fine without -Ooloopunrolled or if by=1 (no step is assigned)


Breakpoint 1, 0x0000000000411640 in fpc_raiseexception ()
(gdb) bt
#0 0x0000000000411640 in fpc_raiseexception ()
0000001 0x000000000042d8c5 in INTERNALERROR (I=200612311) at verbose.pas:573
0000002 0x0000000000485b14 in DESTROY (this=0x7ffff7f9da00, vmt=0x1) at symdef.pas:1680
0000003 0x000000000041009a in SYSTEM_TOBJECT_$__FREE ()
0000004 0x00007fffffffbb40 in ?? ()
0000005 0x00000000004fb03e in TYPECHECKPASS_INTERNAL (P=0x7ffff7f9da00, NODE_CHANGED=true) at pass_1.pas:85
0000006 0x00000000004fb131 in TYPECHECKPASS (P=<error reading variable: Cannot access memory at address 0x7974206e776f6e6b>)
    at pass_1.pas:116
0000007 0x00000000004c293a in GET_PARATYPE (this=<error reading variable: Cannot access memory at address 0x7fffff3e6568>)
    at ncal.pas:674
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

AndrewH

2014-01-20 03:41

developer  

for_by.patch (125,180 bytes)
Index: jvm/njvmflw.pas
===================================================================
--- jvm/njvmflw.pas	(revision 26481)
+++ jvm/njvmflw.pas	(working copy)
@@ -101,7 +101,7 @@
               ctypeconvnode.create_explicit(ctemprefnode.create(iteratortmp),
                 olditerator.resultdef)));
             addstatement(newbodystat,t2);
-            addstatement(stat,cfornode.create(left,right,t1,newbody,lnf_backward in loopflags));
+            addstatement(stat,cfornode.create(left,right,t1,newbody,loopstep,lnf_backward in loopflags));
             addstatement(stat,ctempdeletenode.create(iteratortmp));
             left:=nil;
             right:=nil;
Index: msg/errore.msg
===================================================================
--- msg/errore.msg	(revision 26481)
+++ msg/errore.msg	(working copy)
@@ -398,7 +398,7 @@
 #
 # Parser
 #
-# 03335 is the last used one
+# 03337 is the last used one
 #
 % \section{Parser messages}
 % This section lists all parser messages. The parser takes care of the
@@ -1501,6 +1501,10 @@
 parser_e_property_only_sgr=03335_E_Properties can be only static, global or inside structured types
 % Properties cannot be declared local, only global, using the static
 % directive or inside structured types.
+parser_e_expected_positive_by_value=03336_E_Invalid value for by "$1" (must be greater than 0).
+% The constant value for by must be greater than zero in a for to loop.
+parser_e_expected_negative_by_value=03337_E_Invalid value for by "$1" (must be less than 0).
+% The constant value for by must be less than zero in a for downto loop. 
 %
 %
 % \end{description}
Index: msgidx.inc
===================================================================
--- msgidx.inc	(revision 26481)
+++ msgidx.inc	(working copy)
@@ -433,6 +433,8 @@
   parser_e_dir_not_allowed=03333;
   parser_e_no_assembler_in_generic=03334;
   parser_e_property_only_sgr=03335;
+  parser_e_expected_positive_by_value=03336;
+  parser_e_expected_negative_by_value=03337;
   type_e_mismatch=04000;
   type_e_incompatible_types=04001;
   type_e_not_equal_types=04002;
@@ -978,9 +980,9 @@
   option_info=11024;
   option_help_pages=11025;
 
-  MsgTxtSize = 70217;
+  MsgTxtSize = 70334;
 
   MsgIdxMax : array[1..20] of longint=(
-    26,95,336,121,88,56,126,27,202,64,
+    26,95,338,121,88,56,126,27,202,64,
     54,20,1,1,1,1,1,1,1,1
   );
Index: msgtxt.inc
===================================================================
--- msgtxt.inc	(revision 26481)
+++ msgtxt.inc	(working copy)
@@ -1,7 +1,7 @@
 {$ifdef Delphi}
-const msgtxt : array[0..000292] of string[240]=(
+const msgtxt : array[0..000293] of string[240]=(
 {$else Delphi}
-const msgtxt : array[0..000292,1..240] of char=(
+const msgtxt : array[0..000293,1..240] of char=(
 {$endif Delphi}
   '01000_T_Compiler: $1'#000+
   '01001_D_Compiler OS: $1'#000+
@@ -542,669 +542,675 @@
   '03334_E_Assembler blocks not allowed inside generics'#000+
   '03335_E_Properties can be only static, global or inside structured typ'+
   'es'#000+
+  '03336_E_Invalid value for by "$1" (must be greater than 0).'#000+
+  '03337_E_Invalid',' value for by "$1" (must be less than 0).'#000+
   '04000_E_Type mismatch'#000+
   '04001_E_Incompatible types: got "$1" expected "$2"'#000+
-  '04','002_E_Type mismatch between "$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+
+  '04005_E_Int','eger expression expected, but got "$1"'#000+
   '04006_E_Boolean expression expected, but got "$1"'#000+
-  '04007_E_Ordinal expression e','xpected'#000+
+  '04007_E_Ordinal expression expected'#000+
   '04008_E_pointer type expected, but got "$1"'#000+
   '04009_E_class type expected, but got "$1"'#000+
-  '04011_E_Can'#039't evaluate constant expression'#000+
+  '04011_E_Can'#039't evaluate consta','nt expression'#000+
   '04012_E_Set elements are not compatible'#000+
   '04013_E_Operation not implemented for sets'#000+
-  '04014_W_Automatic ty','pe conversion from floating 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+
+  '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_Ca','n'#039't read or write variables of this type'#000+
+  '04018_E_Can'#039't read or write variables of this type'#000+
   '04019_E_Can'#039't use readln or writeln on typed file'#000+
-  '04020_E_Can'#039't use read or write on untyped file.'#000+
+  '04020_E_Can'#039't use read or write ','on untyped file.'#000+
   '04021_E_Type conflict between set elements'#000+
-  '04022_W_lo/hi(dword/qword) returns the upper/lower word/d','word'#000+
+  '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
   '04023_E_Integer or real expression expected'#000+
   '04024_E_Wrong type "$1" in array constructor'#000+
-  '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
+  '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_Il','legal constant passed to internal math function'#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+
+  '04029_E_Argument can',#039't be assigned to'#000+
   '04030_E_Can'#039't assign local procedure/function to procedure variabl'+
   'e'#000+
-  '04031_E_Can'#039't assign values to ','an address'#000+
+  '04031_E_Can'#039't assign values to an address'#000+
   '04032_E_Can'#039't assign values to const variable'#000+
   '04033_E_Array type required'#000+
-  '04034_E_interface type expected, but got "$1"'#000+
+  '04034_E_interface type expected, but g','ot "$1"'#000+
   '04035_H_Mixing signed expressions and longwords gives a 64bit result'#000+
-  '04036_W_Mixing signed expressions and ca','rdinals here may cause a ran'+
-  'ge check error'#000+
+  '04036_W_Mixing signed expressions and cardinals here may cause a range'+
+  ' check error'#000+
   '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
-  '04038_E_enums with assignments can'#039't be used as array index'#000+
+  '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 ty','pes "$1" and "$2" are not related'#000+
+  '04040_W_Class types "$1" and "$2" are not related'#000+
   '04041_E_Class or interface type expected, but got "$1"'#000+
-  '04042_E_Type "$1" is not completely defined'#000+
+  '04042_E_Type "$1" is not completel','y defined'#000+
   '04043_W_String literal has more characters than short string length'#000+
-  '04044_W_Comparison might be always fals','e due to range of constant an'+
-  'd expression'#000+
+  '04044_W_Comparison might be always false due to range of constant and '+
+  'expression'#000+
   '04045_W_Comparison might be always true due to range of constant and e'+
   'xpression'#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+
+  '0','4046_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 error'#000+
-  '04049_H_Type size mismatch, possible loss of data / range check error'#000+
+  '04049_H_Type size mismatch, possible loss of d','ata / range check erro'+
+  'r'#000+
   '04050_E_The address of an abstract method can'#039't be taken'#000+
-  '04051_E_Assignments to formal parame','ters and open arrays are not pos'+
-  'sible'#000+
+  '04051_E_Assignments to formal parameters and open arrays are not possi'+
+  'ble'#000+
   '04052_E_Constant Expression expected'#000+
-  '04053_E_Operation "$1" not supported for types "$2" and "$3"'#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 po','rtable'#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+
+  '04057_E_Can'#039't determine which overloaded function t','o 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+
+  'nt, 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+
+  '04061_E_Constant packed arra','ys are not yet supported'#000+
   '04062_E_Incompatible type for arg no. $1: Got "$2" expected "(Bit)Pack'+
   'ed Array"'#000+
-  '04063_E_Inco','mpatible type for arg no. $1: Got "$2" expected "(not pa'+
-  'cked) Array"'#000+
-  '04064_E_Elements of packed arrays cannot be of a type which need to be'+
-  ' initialised'#000+
+  '04063_E_Incompatible type for arg no. $1: Got "$2" expected "(not pack'+
+  'ed) Array"'#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+}, s'+
-  'uggest typecast'#000+
+  '04066_W_Arithmetic "$1" on untyped pointer is unportable to {$T+}, sug'+
+  'gest 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+
+  '04','077_E_Can'#039't export subroutine marked as local from a unit'#000+
   '04078_E_Type is not automatable: "$1"'#000+
-  '04079_H_Converting th','e 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'+
+  '04079_H_Converting the operands to "$1" before doing the add could pre'+
+  'vent overflow errors.'#000+
+  '04080_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'+
   'd prevent overflow errors.'#000+
-  '04081_H_Converting the operands to "$1" before doing the multiply coul'+
-  'd ','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+
+  'parison results and range er','rors, use an unsigned type instead.'#000+
   '04083_E_Interface type $1 has no valid GUID'#000+
   '04084_E_Invalid selector name "$1"'#000+
-  '04','085_E_Expected Objective-C method, but got $1'#000+
+  '04085_E_Expected Objective-C method, but got $1'#000+
   '04086_E_Expected Objective-C method or constant method name'#000+
-  '04087_E_No type info available for this type'#000+
+  '04087_E_No type i','nfo available for this type'#000+
   '04088_E_Ordinal or string expression expected'#000+
   '04089_E_String expression expected'#000+
-  '04090_W_','Converting 0 to NIL'#000+
+  '04090_W_Converting 0 to NIL'#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+
+  '04092_E_The type "$1" is not supported for int','eraction with the Obje'+
+  'ctive-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+
-  '04096_E_Type parameters of specializations of generics cannot referenc'+
-  'e the currently specialized type'#000+
-  '04097_E_Type parameter','s are not allowed on non-generic class/record/'+
-  'object procedure or function'#000+
-  '04098_E_Generic declaration of "$1" differs from previous declaration'#000+
+  '04096_E_','Type parameters of specializations of generics cannot refere'+
+  'nce the currently specialized type'#000+
+  '04097_E_Type parameters are not allowed on non-generic class/record/ob'+
+  'ject procedure or function'#000+
+  '04098_E_Generic declaration of "$1" differs from',' previous declaratio'+
+  'n'#000+
   '04099_E_Helper type expected'#000+
   '04100_E_Record type expected'#000+
-  '04101_E_Derived class helper must ext','end a subclass of "$1" or the c'+
-  'lass itself'#000+
+  '04101_E_Derived class helper must extend a subclass of "$1" or the cla'+
+  'ss itself'#000+
   '04102_E_Derived record or type helper must extend "$1"'#000+
-  '04103_E_Invalid assignment, procedures return no value'#000+
+  '04103_E_Invalid assignmen','t, procedures return no value'#000+
   '04104_W_Implicit string type conversion from "$1" to "$2"'#000+
-  '04105_W_Implicit string type ','conversion with potential data loss fro'+
-  'm "$1" to "$2"'#000+
+  '04105_W_Implicit string type conversion with potential data loss from '+
+  '"$1" to "$2"'#000+
   '04106_-W_Explicit string typecast from "$1" to "$2"'#000+
-  '04107_-W_Explicit string typecast with potential data loss from "$1" t'+
-  'o "$2"'#000+
+  '04107_-W_Explicit',' string typecast with potential data loss from "$1"'+
+  ' to "$2"'#000+
   '04108_W_Unicode constant cast with potential data loss'#000+
-  '04','109_E_range check error while evaluating constants ($1 must be bet'+
+  '04109_E_range check error while evaluating constants ($1 must be betwe'+
+  'en $2 and $3)'#000+
+  '04110_W_range check error while evaluatin','g constants ($1 must be bet'+
   'ween $2 and $3)'#000+
-  '04110_W_range check error while evaluating constants ($1 must be betwe'+
-  'en $2 and $3)'#000+
   '04111_E_This type is not supported for the Default() intrinsic'#000+
-  '04112_E_JVM',' virtual class methods cannot be static'#000+
+  '04112_E_JVM virtual class methods cannot be static'#000+
   '04113_E_Final (class) fields can only be assigned in their class'#039' '+
-  '(class) constructor'#000+
+  '(class) construct','or'#000+
   '04114_E_It is not possible to typecast untyped parameters on managed p'+
-  'latforms, simply assign a value to them inst','ead.'#000+
+  'latforms, simply assign a value to them instead.'#000+
   '04115_E_The assignment side of an expression cannot be typecasted to a'+
   ' supertype on managed platforms'#000+
-  '04116_-W_The interface method "$1" raises the visibility of "$2" to pu'+
-  'blic when accessed via an interface instance'#000+
-  '04117_E_The interf','ace method "$1" has a higher visibility (public) t'+
-  'han "$2"'#000+
+  '04116_-W_The int','erface method "$1" raises the visibility of "$2" to '+
+  'public when accessed via an interface instance'#000+
+  '04117_E_The interface method "$1" has a higher visibility (public) tha'+
+  'n "$2"'#000+
   '04118_E_TYPEOF can only be used on object types with VMT'#000+
-  '04119_E_It is not possible to define a default value for a parameter o'+
-  'f type "$1"'#000+
-  '04120_E_Type "$1" cannot be extended by a ','type helper'#000+
+  '04119_E','_It is not possible to define a default value for a parameter'+
+  ' of type "$1"'#000+
+  '04120_E_Type "$1" cannot be extended by a type helper'#000+
   '05000_E_Identifier not found "$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+
+  '0','5003_H_Identifier already defined in $1 at line $2'#000+
   '05004_E_Unknown identifier "$1"'#000+
-  '05005_E_Forward declaration not so','lved "$1"'#000+
+  '05005_E_Forward declaration not solved "$1"'#000+
   '05007_E_Error in type definition'#000+
   '05009_E_Forward type not resolved "$1"'#000+
-  '05010_E_Only static variables can be used in static methods or outside'+
-  ' methods'#000+
+  '05010_E_Only static variables can be used',' in static methods or outsi'+
+  'de methods'#000+
   '05012_E_Record or object or class type expected'#000+
-  '05013_E_Instances of classes or',' objects with an abstract method are '+
-  'not allowed'#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+
+  '050','16_E_Illegal label declaration'#000+
   '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
   '05018_E_Label not found'#000+
-  '0501','9_E_identifier isn'#039't a label'#000+
+  '05019_E_identifier isn'#039't a label'#000+
   '05020_E_label already defined'#000+
   '05021_E_illegal type declaration of set elements'#000+
-  '05022_E_Forward class definition not resolved "$1"'#000+
+  '05022_E_Forward',' class definition not resolved "$1"'#000+
   '05023_H_Unit "$1" not used in $2'#000+
   '05024_H_Parameter "$1" not used'#000+
-  '05025_N_Local va','riable "$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 ne','ver used'#000+
   '05028_H_Local $1 "$2" is not used'#000+
   '05029_N_Private field "$1.$2" is never used'#000+
-  '05030_N_Private field "$1.$2" ','is assigned but never used'#000+
+  '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+
+  '05033_W_Function result does',' not seem to be set'#000+
   '05034_W_Type "$1" is not aligned correctly in current record for C'#000+
-  '05035_E_Unknown record field i','dentifier "$1"'#000+
+  '05035_E_Unknown record field identifier "$1"'#000+
   '05036_W_Local variable "$1" does not seem to be initialized'#000+
-  '05037_W_Variable "$1" does not seem to be initialized'#000+
+  '05037_W_Variable "$1" does not seem to be initia','lized'#000+
   '05038_E_identifier idents no member "$1"'#000+
   '05039_H_Found declaration: $1'#000+
   '05040_E_Data element too large'#000+
-  '05042_E_N','o matching implementation for interface method "$1" found'#000+
+  '05042_E_No matching implementation for interface method "$1" found'#000+
   '05043_W_Symbol "$1" is deprecated'#000+
-  '05044_W_Symbol "$1" is not portable'#000+
+  '05044_W_Symbol "$1" is not port','able'#000+
   '05055_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+
+  '05057_H_Local variable "$1" does not seem to be initialized'#000+
   '05058_H_Variable "$1" does not seem to be initialized'#000+
-  '05059_W_Function result variable does not seem to initialized'#000+
+  '05059_W_Function result variable d','oes not seem to initialized'#000+
   '05060_H_Function result variable does not seem to be initialized'#000+
-  '05061_W_Variable "$1" re','ad but nowhere assigned'#000+
+  '05061_W_Variable "$1" read but nowhere assigned'#000+
   '05062_H_Found abstract method: $1'#000+
   '05063_W_Symbol "$1" is experimental'#000+
-  '05064_W_Forward declaration "$1" not resolved, assumed external'#000+
+  '05064_W_Forward declaration "','$1" not resolved, assumed external'#000+
   '05065_W_Symbol "$1" is belongs to a library'#000+
-  '05066_W_Symbol "$1" is deprecated: "$2','"'#000+
+  '05066_W_Symbol "$1" is deprecated: "$2"'#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 find a "Current" property in enumerator "$1"'#000+
-  '05070_E_Mismatch between number of declared parameters and number o','f'+
-  ' colons in message string.'#000+
+  '05069_E_Ca','nnot find 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_Private const "$1.$2" never used'#000+
-  '05073_N_Private property "$1.$2" never used'#000+
+  '05073_N_Privat','e property "$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+
+  '05076_W_Unit "$1" is not portable'#000+
   '05077_W_Unit "$1" is belongs to a library'#000+
   '05078_W_Unit "$1" is not implemented'#000+
-  '05079_W_Unit "$1" is experimental'#000+
+  '05079_W_Unit "$1" is experi','mental'#000+
   '05080_E_No complete definition of the formally declared class "$1" is '+
   'in scope'#000+
-  '05081_E_Gotos into initializati','on or finalization blocks of units ar'+
-  'e not allowed'#000+
+  '05081_E_Gotos into initialization or finalization blocks of units are '+
+  'not allowed'#000+
   '05082_E_Invalid external name "$1" for formal class "$2"'#000+
-  '05083_E_Complete class definition with external name "$1" here'#000+
-  '05084_W_Possible library conflict: symbol "$1" from library "$2" also',
-  ' found in library "$3"'#000+
+  '05083_E_Complet','e class definition with external name "$1" here'#000+
+  '05084_W_Possible library conflict: symbol "$1" from library "$2" also '+
+  'found in library "$3"'#000+
   '05085_E_Cannot add implicit constructor '#039'Create'#039' because ident'+
   'ifier already used by "$1"'#000+
-  '05086_E_Cannot generate default constructor for class, because parent '+
-  'has no parameterless constructor'#000+
-  '05087_D_Adding helper for',' $1'#000+
+  '05086_E_Can','not generate default constructor for class, because paren'+
+  't has no parameterless constructor'#000+
+  '05087_D_Adding helper for $1'#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+
+  '06013_E_The use of a far poin','ter isn'#039't allowed there'#000+
   '06015_E_EXPORT declared functions can'#039't be called'#000+
-  '06016_W_Possible illegal call of constructo','r or destructor'#000+
+  '06016_W_Possible illegal call of constructor or destructor'#000+
   '06017_N_Inefficient code'#000+
   '06018_W_unreachable code'#000+
   '06020_E_Abstract methods can'#039't be called directly'#000+
-  '06027_DL_Register $1 weight $2 $3'#000+
+  '06027_D','L_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_P','rocvar calls cannot be inline.'#000+
+  '06032_E_Procvar calls cannot be inline.'#000+
   '06033_E_No code for inline procedure stored'#000+
-  '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
-  'sed, use (set)length instead'#000+
+  '06035_E_Element zero of an ansi/wide- or longstr','ing can'#039't be acc'+
+  'essed, use (set)length instead'#000+
   '06037_E_Constructors or destructors cannot be called inside a '#039'wit'+
-  'h'#039' c','lause'#000+
+  'h'#039' clause'#000+
   '06038_E_Cannot call message handler methods directly'#000+
   '06039_E_Jump in or outside of an exception block'#000+
-  '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
+  '06040_E_Control',' flow statements aren'#039't allowed in a finally bloc'+
+  'k'#000+
   '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
-  '06042_W_Lo','cal variable size exceed 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+
+  '06044_E_BREAK not all','owed'#000+
   '06045_E_CONTINUE not allowed'#000+
   '06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+
   'me library.'#000+
-  '0','6047_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+
+  '06047_F_Cannot find system type "$1". Check if you use the correct run'+
+  ' time library.'#000+
+  '06048_H_Inherited call to abstract meth','od 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'+
-  'rect run time library.'#000+
+  '06050_F_Cannot find type "$1" in unit "$2". Check if you use the corre'+
+  'ct run time library.'#000+
   '06051_E_Interprocedural gotos are allowed only to outer subroutines'#000+
-  '06052_E_Label must be defined in the same scope as it is declared'#000+
-  '06053_E_Leaving procedures containing explicit or implicit exceptio','n'+
-  's frames using goto is not allowed'#000+
+  '06052_E_Label mu','st be defined in the same scope as it is declared'#000+
+  '06053_E_Leaving procedures containing explicit or implicit exceptions '+
+  'frames using goto is not allowed'#000+
   '06054_E_In ISO mode, the mod operator is defined only for positive quo'+
   'tient'#000+
-  '06055_DL_Auto inlining: $1'#000+
+  '06055_DL_Au','to inlining: $1'#000+
   '07000_DL_Starting $1 styled assembler parsing'#000+
   '07001_DL_Finished $1 styled assembler parsing'#000+
-  '07002_E_N','on-label pattern contains @'#000+
+  '07002_E_Non-label pattern contains @'#000+
   '07004_E_Error building record offset'#000+
   '07005_E_OFFSET used without identifier'#000+
-  '07006_E_TYPE used without identifier'#000+
+  '07006_E_TYPE used w','ithout identifier'#000+
   '07007_E_Cannot use local variable or parameters here'#000+
   '07008_E_need to use OFFSET here'#000+
-  '07009_E_need t','o use $ here'#000+
+  '07009_E_need to use $ here'#000+
   '07010_E_Cannot use multiple relocatable symbols'#000+
   '07011_E_Relocatable symbol can only be added'#000+
-  '07012_E_Invalid constant expression'#000+
+  '07012_E_Invalid c','onstant expression'#000+
   '07013_E_Relocatable symbol is not allowed'#000+
   '07014_E_Invalid reference syntax'#000+
-  '07015_E_You cannot reac','h $1 from that code'#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+
+  '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+
+  '07020_E_Multiple index register usage'#000+
   '07021_E_Invalid operand type'#000+
   '07022_E_Invalid string as opcode operand: $1'#000+
   '07023_W_@CODE and @DATA not supported'#000+
-  '07024_E_Null label references are not allowed'#000+
+  '0702','4_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+
+  '07027_E_escape sequence ignored: $1'#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+
+  '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+
+  '07032_W_Calling an overload function in assembler'#000+
   '07033_E_Unsupported symbol type for operand'#000+
   '07034_E_Constant value out of bounds'#000+
-  '07035_E_Error converting decimal $1'#000+
+  '07035_E_Er','ror converting decimal $1'#000+
   '07036_E_Error converting octal $1'#000+
   '07037_E_Error converting binary $1'#000+
-  '07038_E_Error converti','ng hexadecimal $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+
+  '07041_E_Cannot use SELF ou','tside 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+
+  '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+
+  '07046_W_Size suffix and dest','ination or source size do not match'#000+
   '07047_E_Assembler syntax error'#000+
-  '07048_E_Invalid combination of opcode and operands',#000+
+  '07048_E_Invalid combination of opcode and operands'#000+
   '07049_E_Assembler syntax error in operand'#000+
   '07050_E_Assembler syntax error in constant'#000+
   '07051_E_Invalid String expression'#000+
-  '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
+  '070','52_W_constant with symbol $1 for address which is not on a pointe'+
+  'r'#000+
   '07053_E_Unrecognized opcode $1'#000+
-  '07054_E_Invalid or ','missing opcode'#000+
+  '07054_E_Invalid or missing opcode'#000+
   '07055_E_Invalid combination of prefix and opcode: $1'#000+
-  '07056_E_Invalid combination of override and opcode: $1'#000+
+  '07056_E_Invalid combination of override 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+
+  '07061_E_Undefined local symbol $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_Invalid 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+
+  '07068_E_Invalid floating point expression'#000+
   '07069_E_Wrong symbol type'#000+
   '07070_E_Cannot index a local var or parameter with a register'#000+
-  '07071_E_Invalid segment override expression'#000+
+  '07071_E_Invalid segment ','override expression'#000+
   '07072_W_Identifier $1 supposed external'#000+
   '07073_E_Strings not allowed as constants'#000+
-  '07074_E_No type ','of variable specified'#000+
+  '07074_E_No type of variable specified'#000+
   '07075_E_assembler code not returned to text section'#000+
   '07076_E_Not a directive or local symbol $1'#000+
-  '07077_E_Using a defined name as a local label'#000+
+  '07077_','E_Using a defined name as a local label'#000+
   '07078_E_Dollar token is used without an identifier'#000+
-  '07079_W_32bit constant cre','ated for address'#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+
+  '07081_E_Can'#039't access fields directly for parame','ters'#000+
   '07082_E_Can'#039't access fields of objects/classes directly'#000+
-  '07083_E_No size specified and unable to determine the si','ze of the op'+
-  'erands'#000+
+  '07083_E_No size specified and unable to determine the size of the oper'+
+  'ands'#000+
   '07084_E_Cannot use RESULT in this function'#000+
-  '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
+  '07086_W_"$1" without operand translated into "$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+
+  '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+
-  '07095_E_Invalid reglist for movem'#000+
+  '07095','_E_Invalid reglist for movem'#000+
   '07096_E_Reglist invalid for opcode'#000+
   '07097_E_Higher cpu mode required ($1)'#000+
-  '07098_W_No size',' specified and unable to determine the size of the op'+
-  'erands, using DWORD as default'#000+
-  '07099_E_Syntax error while trying to parse a shifter operand'#000+
+  '07098_W_No size specified and unable to determine the size of the oper'+
+  'ands, using DWORD as default'#000+
+  '07099_E_Syntax error while trying to pa','rse a shifter operand'#000+
   '07100_E_Address of packed component is not at a byte boundary'#000+
-  '07101_W_No size specified and una','ble to determine the size of the op'+
-  'erands, using BYTE as default'#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+
-  '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 a'+
-  'ccess'#000+
+  '0','7103_W_Use of +offset(%ebp) is not compatible with regcall conventi'+
+  'on'#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+
-  '07107_E_Generating PIC, but reference is not',' PIC-safe'#000+
+  '07106_E_VMTOffset mu','st 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 be of the same kind and w'+
   'idth'#000+
-  '07109_E_A register set cannot be empty'#000+
+  '07109_E_A register set cannot be empty',#000+
   '07110_W_@GOTPCREL is useless and potentially dangereous for local symb'+
   'ols'#000+
-  '07111_W_Constant with general purpose segm','ent register'#000+
+  '07111_W_Constant with general purpose segment register'#000+
   '07112_E_Invalid offset value for $1'#000+
   '07113_E_Invalid register for $1'#000+
-  '07114_E_SEH directives are allowed only in pure assembler procedures'#000+
+  '07114_E_SEH directives are allowed only in',' pure assembler procedures'+
+  #000+
   '07115_E_Directive "$1" is not supported for the current target'#000+
-  '07116_E_This function'#039's res','ult location cannot be encoded direct'+
-  'ly in a single operand when "nostackframe" is used'#000+
-  '07117_E_GOTPCREL references in Intel assembler syntax cannot contain a'+
-  ' base or index register, and their offset must 0.'#000+
-  '07118_E_The current target does ','not support GOTPCREL relocations'#000+
+  '07116_E_This function'#039's result location cannot be encoded directly'+
+  ' in a single operand when "nostackframe" is used'#000+
+  '07117_E_GOTPCREL references in Inte','l assembler syntax cannot contain'+
+  ' a base or index register, and their offset must 0.'#000+
+  '07118_E_The current target does not support GOTPCREL relocations'#000+
   '07119_W_Exported/global symbols should accessed via the GOT'#000+
-  '07120_W_Check size of memory operand "$1"'#000+
+  '07120_W_Check size of memory o','perand "$1"'#000+
   '07121_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
   'ts, but expected [$3 bits]"'#000+
-  '07122_W','_Check size of memory operand "$1: memory-operand-size is $2 '+
-  'bits, but expected [$3 bits + $4 byte offset]"'#000+
-  '07123_W_Check "$1: offset of memory operand is negative "$2 byte"'#000+
-  '07124_W_Check "$1: size of memory operand is empty, but es exists ','di'+
-  'fferent definitions of the memory size =>> map to $2 (smallest option)'+
-  '"'#000+
-  '07125_E_Invalid register used in memory reference expression: "$1"'#000+
+  '07122_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
+  'ts, but expected [$3 bits + $4 byte offset]"'#000+
+  '07123_W_Check "','$1: offset of memory operand is negative "$2 byte"'#000+
+  '07124_W_Check "$1: size of memory operand is empty, but es exists diff'+
+  'erent definitions of the memory size =>> map to $2 (smallest option)"'#000+
+  '07125_E_Invalid register used in memory reference',' expression: "$1"'#000+
   '08000_F_Too many assembler files'#000+
   '08001_F_Selected assembler output not supported'#000+
-  '08002_F_Comp not s','upported'#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+
+  '08005_F_No',' binary writer selected'#000+
   '08006_E_Asm: Opcode $1 not in table'#000+
-  '08007_E_Asm: $1 invalid combination of opcode and operand','s'#000+
+  '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08008_E_Asm: 16 Bit references not supported'#000+
   '08009_E_Asm: Invalid effective address'#000+
-  '08010_E_Asm: Immediate or reference expected'#000+
+  '08010_E_Asm: Immediate or reference e','xpected'#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 lab','el $1'#000+
+  '08013_E_Asm: Undefined label $1'#000+
   '08014_E_Asm: Comp type not supported for this target'#000+
   '08015_E_Asm: Extended type not supported for this target'#000+
-  '08016_E_Asm: Duplicate label $1'#000+
+  '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 registe','r $1'#000+
+  '08019_E_Asm: Invalid register $1'#000+
   '08020_E_Asm: 16 or 32 Bit references not supported'#000+
   '08021_E_Asm: 64 Bit operands not supported'#000+
-  '08022_E_Asm: AH,BH,CH or DH cannot be used in an instruction requiring'+
-  ' REX prefix'#000+
+  '08022_E_Asm: AH,BH,CH or',' DH cannot be used in an instruction requiri'+
+  'ng REX prefix'#000+
   '08023_E_Missing .seh_endprologue directive'#000+
-  '08024_E_Function',' prologue exceeds 255 bytes'#000+
+  '08024_E_Function prologue exceeds 255 bytes'#000+
   '08025_E_.seh_handlerdata directive without preceding .seh_handler'#000+
-  '08026_F_Relocation count for section $1 exceeds 65535'#000+
+  '08026_F_Relocation count for ','section $1 exceeds 65535'#000+
   '09000_W_Source operating system redefined'#000+
   '09001_I_Assembling (pipe) $1'#000+
-  '09002_E_Can'#039't create ','assembler file: $1'#000+
+  '09002_E_Can'#039't create assembler file: $1'#000+
   '09003_E_Can'#039't create object file: $1 (error code: $2)'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
-  '09005_E_Assembler $1 not found, switching to external assembling'#000+
+  '09005_E_Asse','mbler $1 not found, switching to external assembling'#000+
   '09006_T_Using assembler: $1'#000+
-  '09007_E_Error while assembling exitc','ode $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 smartlinking $1'#000+
+  '09010_I_Assembling',' with smartlinking $1'#000+
   '09011_W_Object $1 not found, Linking may fail !'#000+
-  '09012_W_Library $1 not found, Linking may fail ','!'#000+
+  '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, switching to external linking'#000+
+  '09016_E_Util ','$1 not found, switching to external linking'#000+
   '09017_T_Using util $1'#000+
   '09018_E_Creation of Executables not supported'#000+
-  '09019','_E_Creation of Dynamic/Shared Libraries not supported'#000+
+  '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
   '09020_I_Closing script $1'#000+
-  '09021_E_resource compiler "$1" not found, switching to external mode'#000+
+  '09021_E_resource compiler "$1" not found, s','witching to external mode'+
+  #000+
   '09022_I_Compiling resource $1'#000+
-  '09023_T_unit $1 can'#039't be statically linked, switching to smar','t l'+
-  'inking'#000+
+  '09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
+  'king'#000+
   '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
   #000+
-  '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
-  'g'#000+
+  '09025_T_unit $1 can'#039't be shared linked, switch','ing to static link'+
+  'ing'#000+
   '09026_E_unit $1 can'#039't be smart or static linked'#000+
-  '09027_E_unit $1 can'#039't be shared or static linke','d'#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 extern'+
-  'al mode'#000+
+  '09030_E_Can'#039't ca','ll the resource compiler "$1", switching to exte'+
+  'rnal mode'#000+
   '09031_E_Can'#039't open resource file "$1"'#000+
-  '09032_E_Can'#039't write r','esource file "$1"'#000+
+  '09032_E_Can'#039't write resource file "$1"'#000+
   '09033_N_File "$1" not found for backquoted cat command'#000+
-  '09034_W_"$1" not found, this will probably cause a linking failure'#000+
+  '09034_W_"$1" not found, this will probably cause a',' linking failure'#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 b','ytes'#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+
-  '09133_X_Stack space reserved: $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_Obje','ct file "$1" contains 32-bit absolute relocation to symb'+
-  'ol "$2".'#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+
+  '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 Invali','d Header (no PPU at the 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+
-  '10010_U_PPU is compiled for another target'#000+
+  '10010_U_PPU is ','compiled for another 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 read','ing 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+
   '10017_F_PPU Dbx count problem'#000+
-  '10018_E_Illegal unit name: $1'#000+
+  '10018_E_Il','legal 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 un','it $1, no sources available'#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+
-  '10024_F_Unit $1 searched but $2 found'#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 compi','ling module, stopping'#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+
-  '10029_U_Recompiling $1, source found only'#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 li','b is older than ppufile'#000+
+  '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
-  '10033_U_Recompiling unit, obj is older than asm'#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+
+  '10037_U_PPU Check file $1 time $2'#000+
   '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
-  '10041_U_File $1 is newer than the one used for creating PPU file $2'#000+
+  '10041_U_File $1 is newer than ','the one used for creating 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+
+  '10043_U_Loading interface units from $1'#000+
   '10044_U_Loading implementation units from $1'#000+
   '10045_U_Interface CRC changed for unit $1'#000+
-  '10046_U_Implementation CRC changed for unit $1'#000+
+  '1','0046_U_Implementation CRC changed for unit $1'#000+
   '10047_U_Finished compiling unit $1'#000+
-  '10048_U_Adding dependency: $1 depend','s on $2'#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+
-  '10052_U_Forced reloading'#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_Loa','ding unit $1'#000+
+  '10055_U_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+
-  '10059_U_Skipping re-resolving unit $1, still loading used units'#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 c','ompiled using a different whole program optimiz'+
-  'ation feedback input ($2, $3); recompile it without 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+
+  '10061_E_Unit $1 was compiled using a different whole program optimizat'+
+  'ion feedback input ($2, $3); recompile it without wpo or use the same '+
+  'wpo ','feedback input file for this compilation invocation'#000+
+  '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+
   '10063_U_PPU is compiled for another i8086 memory model'#000+
   '11000_O_$1 [options] <inputfile> [options]'#000+
-  '11001_W_Only one source file supported, changing source file to compil'+
-  'e from "$1" into "$2"'#000+
-  '11002_W_DEF file can be created only for OS/2'#000,
+  '11001_W_Only one sour','ce 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_No option inside $1 config file'#000+
+  '11005_N_No option inside $1 con','fig file'#000+
   '11006_E_Illegal parameter: $1'#000+
   '11007_H_-? writes help pages'#000+
   '11008_F_Too many config files nested'#000+
-  '11009_F_Unab','le to open file $1'#000+
+  '11009_F_Unable to open file $1'#000+
   '11010_D_Reading further options from $1'#000+
   '11011_W_Target is already set to: $1'#000+
-  '11012_W_Shared libs not supported on DOS platform, reverting to static'+
-  #000+
+  '11012_W_Shared libs not sup','ported on DOS platform, reverting to stat'+
+  'ic'#000+
   '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+
-  'nte','red'#000+
+  'ntered'#000+
   '11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+
   'tered'#000+
-  '11015_F_Open conditional at the end of the options file'#000+
+  '11015_F_Open conditional at the end of the ','options file'#000+
   '11016_W_Debug information generation is not supported by this executab'+
   'le'#000+
-  '11017_H_Try recompiling with -d','GDB'#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+
-  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000,
+  '11020_N_Switch','ing assembler to default source writing assembler'#000+
+  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
   '11022_W_"$1" assembler use forced'#000+
   '11026_T_Reading options from file $1'#000+
   '11027_T_Reading options from environment $1'#000+
-  '11028_D_Handling option "$1"'#000+
+  '11028_D_','Handling option "$1"'#000+
   '11029_O_*** press enter ***'#000+
   '11030_H_Start of reading config file $1'#000+
-  '11031_H_End of reading confi','g 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_interpreting file option "$1"'#000+
+  '11033_D_interpreting file option "$1"',#000+
   '11034_D_Reading config file "$1"'#000+
   '11035_D_found source file name "$1"'#000+
   '11039_E_Unknown codepage "$1"'#000+
-  '11040_F_Config fi','le $1 is a directory'#000+
+  '11040_F_Config file $1 is a directory'#000+
   '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
   '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 with','out'+
-  ' \var{\#IF(N)DEF} found'#000+
+  '11042_W_Use of p','pc386.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 platform'#000+
-  '11045_F_The feature "$1" is not, or not yet, supported on the selected'+
-  ' target platform'#000+
-  '11046_N_DWARF debug information cannot be use','d with smart linking on'+
-  ' this target, switching to static linking'#000+
-  '11047_W_Option "$1" is ignored for the current target platform.'#000+
+  '11045_F_The fea','ture "$1" is not, or not yet, supported 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 current target plat','form.'#000+
   '11048_W_Disabling external debug information because it is unsupported'+
-  ' for the selected target/debug format com','bination.'#000+
+  ' for the selected target/debug format combination.'#000+
   '11049_N_DWARF debug information cannot be used with smart linking with'+
-  ' external assembler, disabling static library creation.'#000+
+  ' external assembler, disabling static libra','ry creation.'#000+
   '11050_E_Invalid value for MACOSX_DEPLOYMENT_TARGET environment variabl'+
   'e: $1'#000+
-  '11051_E_Invalid value for IP','HONEOS_DEPLOYMENT_TARGET environment var'+
-  'iable: $1'#000+
+  '11051_E_Invalid value for IPHONEOS_DEPLOYMENT_TARGET environment varia'+
+  'ble: $1'#000+
   '11052_E_You must use a FPU type of VFPV2, VFPV3 or VFPV3_D16 when usin'+
-  'g the EABIHF ABI target'#000+
+  'g t','he EABIHF ABI target'#000+
   '11053_W_The selected debug format is not supported on the current targ'+
-  'et, not changing the curre','nt setting'#000+
+  'et, not changing the current setting'#000+
   '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
-  '12001_D_Processing whole program optimization information in wpo feedb'+
-  'ack file "$1"'#000+
+  '12001_D_Processing whole program optimization ','information in wpo fee'+
+  'dback file "$1"'#000+
   '12002_D_Finished processing the whole program optimization information'+
-  ' in wpo f','eedback file "$1"'#000+
+  ' 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 "'+
-  '$2" at line $1 of wpo feedback file, ignoring'#000+
-  '12005_D_Found whole program ','optimization section "$1" with informati'+
-  'on about "$2"'#000+
-  '12006_F_The selected whole program optimizations require a previously '+
-  'generated feedback file (use -Fw to specify)'#000+
+  '12004_W_No handler register','ed for whole program optimization 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 require a previously',
+  ' generated feedback file (use -Fw to specify)'#000+
   '12007_E_No collected information necessary to perform "$1" whole progr'+
-  'a','m optimization found'#000+
+  'am optimization found'#000+
   '12008_F_Specify a whole program optimization feedback file to store th'+
-  'e generated info in (using -FW)'#000+
+  'e generated info in (using -FW)'#000,
   '12009_E_Not generating any whole program optimization information, yet'+
   ' a feedback file was specified (using -FW)'#000+
-  '1201','0_E_Not performing any whole program optimizations, yet an input'+
-  ' feedback file was specified (using -Fw)'#000+
-  '12011_D_Skipping whole program optimization section "$1", because not '+
-  'needed by the requested optimizations'#000+
-  '12012_W_Overriding previous','ly read information for "$1" from feedbac'+
-  'k input file using information in section "$2"'#000+
-  '12013_E_Cannot extract symbol liveness information from program when s'+
-  'tripping symbols, use -Xs-'#000+
-  '12014_E_Cannot extract symbol liveness information from',' program when'+
-  ' when not linking'#000+
+  '12010_E_Not performing any whole program optimizations, yet an input f'+
+  'eedback file was specified (using -Fw)'#000+
+  '12011_D_Skipping w','hole program optimization section "$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 extract symbol liven','ess information from program when'+
+  ' 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 from linked program'#000+
+  'n from linked program'#000,
   '12016_E_Error during reading symbol liveness information produced by "'+
   '$1"'#000+
-  '12017_F_Error executing "$1" (exitcode: $2)',' to extract symbol inform'+
-  'ation from linked program'#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 only help when u'+
-  'sing smart linking, use -CX -XX'#000+
+  'si','ng smart linking, use -CX -XX'#000+
   '12019_E_Cannot create specified whole program optimisation feedback fi'+
   'le "$1"'#000+
-  '11023_Fre','e Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $F'+
-  'PCCPU'#010+
+  '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+
+  'CPU'#010+
   'Copyright (c) 1993-2013 by Florian Klaempfl and others'#000+
-  '11024_Free Pascal Compiler version $FPCVERSION'#010+
+  '110','24_Free Pascal Compiler version $FPCVERSION'#010+
   #010+
   'Compiler Date      : $FPCDATE'#010+
   'Compiler CPU Target: $FPCCPU'#010+
   #010+
-  'Supported ta','rgets:'#010+
+  'Supported targets:'#010+
   '  $OSTARGETS'#010+
   #010+
   'Supported CPU instruction sets:'#010+
   '  $INSTRUCTIONSETS'#010+
   #010+
   'Supported FPU instruction sets:'#010+
-  '  $FPUINSTRUCTIONSETS'#010+
+  '  $FPUINSTRUCTIONS','ETS'#010+
   #010+
   'Supported inline assembler modes:'#010+
   '  $ASMMODES'#010+
@@ -1213,403 +1219,403 @@
   '  $ABITARGETS'#010+
   #010+
   'Supported Optimizations:'#010+
-  '  ','$OPTIMIZATIONS'#010+
+  '  $OPTIMIZATIONS'#010+
   #010+
   'Supported Whole Program Optimizations:'#010+
   '  All'#010+
   '  $WPOPTIMIZATIONS'#010+
   #010+
   'Supported Microcontroller types:'#010+
-  '  $CONTROLLERTYPES'#010+
+  '  $CONTRO','LLERTYPES'#010+
   #010+
   'This program comes under the GNU General Public Licence'#010+
   'For more information read COPYING.v2'#010+
   #010+
-  'Please repor','t bugs in our bug tracker on:'#010+
+  'Please report bugs in our bug tracker on:'#010+
   '                 http://bugs.freepascal.org'#010+
   #010+
-  'More information may be found on our WWW pages (including directions'#010+
+  'More information may be found on our WWW pages (','including directions'+
+  #010+
   'for mailing lists useful for asking questions or discussing potential'#010+
   'new features, etc.):'#010+
-  '     ','            http://www.freepascal.org'#000+
+  '                 http://www.freepascal.org'#000+
   '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+
   'ble it'#010+
-  '**1a_The compiler doesn'#039't delete the generated assembler file'#010+
+  '**1a_The',' compiler doesn'#039't delete the generated assembler file'#010+
   '**2al_List sourcecode lines in assembler file'#010+
-  '**2an_List node i','nfo in assembler file (-dEXTDEBUG compiler)'#010+
+  '**2an_List node info in assembler file (-dEXTDEBUG compiler)'#010+
   '*L2ap_Use pipes instead of creating temporary assembler files'#010+
-  '**2ar_List register allocation/release info in assembler file'#010+
+  '**2ar_List regist','er allocation/release info in assembler file'#010+
   '**2at_List temp allocation/release info in assembler file'#010+
-  '**1A<x>_Output',' format:'#010+
+  '**1A<x>_Output format:'#010+
   '**2Adefault_Use default assembler'#010+
   '3*2Aas_Assemble using GNU AS'#010+
-  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using internal writer'#010+
+  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using inter','nal writer'#010+
   '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
   '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
-  '3*2Anasmwin32_Win32 o','bject 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*2Anasmobj_Obj file using Nasm'#010+
+  '3*2Anasmobj_Ob','j 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*2Aelf_ELF (Linux) using internal writer'#010+
   '3*2Acoff_COFF (Go32v2) using internal writer'#010+
   '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
-  '4*2Aas_Assemble using GNU AS'#010+
+  '4*2Aas','_Assemble using GNU AS'#010+
   '4*2Agas_Assemble using GNU GAS'#010+
   '4*2Agas-darwin_Assemble darwin Mach-O64 using GNU GAS'#010+
-  '4*2Amasm_','Win64 object file using ml64 (Microsoft)'#010+
+  '4*2Amasm_Win64 object file using ml64 (Microsoft)'#010+
   '4*2Apecoff_PE-COFF (Win64) using internal writer'#010+
-  '4*2Aelf_ELF (Linux-64bit) using internal writer'#010+
+  '4*2Aelf_ELF (Linux-64bit) using i','nternal writer'#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_St','andard Motorola assembler'#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 GNU AS'#010+
-  '**1b_Generate browser info'#010+
+  '**1b_Gener','ate browser info'#010+
   '**2bl_Generate local symbol info'#010+
   '**1B_Build all modules'#010+
   '**1C<x>_Code generation options:'#010+
-  '**2C3_Turn ','on ieee error checking for constants'#010+
+  '**2C3_Turn on ieee error checking for constants'#010+
   '**2Ca<x>_Select ABI, see fpc -i for possible values'#010+
-  '**2Cb_Generate code for a big-endian variant of the target architectur'+
-  'e'#010+
+  '**2Cb_Generate code for a big-endi','an variant of the target architect'+
+  'ure'#010+
   '**2Cc<x>_Set default calling convention to <x>'#010+
-  '**2CD_Create also dynamic librar','y (not supported)'#010+
+  '**2CD_Create also dynamic library (not supported)'#010+
   '**2Ce_Compilation with emulated floating point opcodes'#010+
-  '**2Cf<x>_Select fpu instruction set to use, see fpc -i for possible va'+
-  'lues'#010+
+  '**2Cf<x>_Select fpu instruction set to use, see fp','c -i for possible '+
+  'values'#010+
   '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
-  '**2Cg_Generate PIC code',#010+
+  '**2Cg_Generate PIC code'#010+
   '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
   '**2Ci_IO-checking'#010+
-  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB'#010+
+  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB',#010+
   '**2Cn_Omit linking stage'#010+
   'P*2CN_Generate nil-pointer checks (AIX-only)'#010+
   '**2Co_Check overflow of integer operations'#010+
-  '**2','CO_Check for possible overflow of integer operations'#010+
+  '**2CO_Check for possible overflow of integer operations'#010+
   '**2Cp<x>_Select instruction set, see fpc -i for possible values'#010+
-  '**2CP<x>=<y>_ packing settings'#010+
+  '**2CP<','x>=<y>_ packing settings'#010+
   '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
   'and 8'#010+
-  '**2Cr_Range chec','king'#010+
+  '**2Cr_Range checking'#010+
   '**2CR_Verify object method call validity'#010+
   '**2Cs<n>_Set stack checking size to <n>'#010+
-  '**2Ct_Stack checking (for testing only, see manual)'#010+
+  '**2Ct_Stack checking (for testing onl','y, see manual)'#010+
   '8*2CT<x>_Target-specific code generation options'#010+
   '3*2CT<x>_Target-specific code generation options'#010+
-  '4*2C','T<x>_Target-specific code generation options'#010+
+  '4*2CT<x>_Target-specific code generation options'#010+
   'p*2CT<x>_Target-specific code generation options'#010+
-  'P*2CT<x>_Target-specific code generation options'#010+
+  'P*2CT<x>_Target-specific code',' generation options'#010+
   'J*2CT<x>_Target-specific code generation options'#010+
-  'A*2CT<x>_Target-specific code generation options',#010+
+  'A*2CT<x>_Target-specific code generation options'#010+
   'p*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
   ' (AIX)'#010+
-  'P*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
-  ' (AIX)'#010+
+  'P*3CTsmalltoc_ Generate smaller TOCs at the e','xpense of execution spe'+
+  'ed (AIX)'#010+
   'J*3CTautogetterprefix=X_  Automatically create getters for properties '+
-  'with prefix X (','empty string disables)'#010+
+  'with prefix X (empty string disables)'#010+
   'J*3CTautosetterprefix=X_  Automatically create setters for properties '+
-  'with prefix X (empty string disables)'#010+
+  'with prefix X (empty string di','sables)'#010+
   '8*3CTcld_                 Emit a CLD instruction before using the x86 '+
   'string instructions'#010+
-  '3*3CTcld_          ','       Emit a CLD instruction before using the x8'+
+  '3*3CTcld_                 Emit a CLD instruction before using the x86 '+
+  'string instructions'#010+
+  '4*3CTcld_                 Emit a CLD instruction bef','ore using the x8'+
   '6 string instructions'#010+
-  '4*3CTcld_                 Emit a CLD instruction before using the x86 '+
-  'string instructions'#010+
   'J*3CTcompactintarrayinit_ Generate smaller (but potentially slower) co'+
-  'de for in','itializing integer array constants'#010+
+  'de for initializing integer array constants'#010+
   'J*3CTenumfieldinit_       Initialize enumeration fields in constructor'+
-  's to enumtype(0), after calling inherited constructors'#010+
+  's to enumtype(0), ','after calling inherited constructors'#010+
   'J*3CTinitlocals_          Initialize local variables that trigger a JV'+
-  'M bytecode',' verification error if used uninitialized (slows down code'+
-  ')'#010+
-  'J*3CTlowercaseprocstart_  Lowercase the first character of procedure/f'+
-  'unction/method names'#010+
+  'M bytecode verification error if used uninitialized (slows down code)'#010+
+  'J*3CTlowercaseprocstart_  Lowercase the first character of proc','edure'+
+  '/function/method names'#010+
   'A*3CTthumbinterworking_ Generate Thumb interworking-safe code if possi'+
   'ble'#010+
-  'J*2Cv_Var/out p','arameter copy-out checking'#010+
+  'J*2Cv_Var/out parameter copy-out checking'#010+
   '**2CX_Create also smartlinked library'#010+
   '**1d<x>_Defines the symbol <x>'#010+
   '**1D_Generate a DEF file'#010+
-  '**2Dd<x>_Set description to <x>'#010+
+  '**','2Dd<x>_Set description to <x>'#010+
   '**2Dv<x>_Set DLL version to <x>'#010+
   '*O2Dw_PM application'#010+
   '**1e<x>_Set path to executable'#010+
-  '**1','E_Same as -Cn'#010+
+  '**1E_Same as -Cn'#010+
   '**1fPIC_Same as -Cg'#010+
   '**1F<x>_Set file names and paths:'#010+
-  '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
-  'sed'#010+
+  '**2Fa<x>[,y]_(for a program) load units <x> and [y] bef','ore uses is p'+
+  'arsed'#010+
   '**2Fc<x>_Set input codepage to <x>'#010+
   '**2FC<x>_Set RC compiler binary name to <x>'#010+
-  '**2Fd_Disable the c','ompiler'#039's internal directory cache'#010+
+  '**2Fd_Disable the compiler'#039's internal directory cache'#010+
   '**2FD<x>_Set the directory where to search for compiler utilities'#010+
-  '**2Fe<x>_Redirect error output to <x>'#010+
+  '**2Fe<x>_Redirect erro','r output to <x>'#010+
   '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
   '**2FE<x>_Set exe/unit output path to <x>'#010+
-  '**2Fi<x>_Ad','d <x> to include path'#010+
+  '**2Fi<x>_Add <x> to include path'#010+
   '**2Fl<x>_Add <x> to library path'#010+
   '**2FL<x>_Use <x> as dynamic linker'#010+
-  '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
-  'r'#010+
+  '**2Fm<x>_Load unicode conversion ','table from <x>.txt in the compiler '+
+  'dir'#010+
   '**2FM<x>_Set the directory where to search for unicode binary files'#010+
-  '**2Fo<x>_A','dd <x> to object path'#010+
+  '**2Fo<x>_Add <x> to object path'#010+
   '**2Fr<x>_Load error message file <x>'#010+
   '**2FR<x>_Set resource (.res) linker to <x>'#010+
-  '**2Fu<x>_Add <x> to unit path'#010+
+  '**2Fu<x>_Add <x> to u','nit path'#010+
   '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
-  '**2FW<x>_Store generated whole-program optimization feed','back in <x>'#010+
+  '**2FW<x>_Store generated whole-program optimization feedback in <x>'#010+
   '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
   'om <x>'#010+
-  '*g1g_Generate debug information (default format for target)'#010+
+  '*g1g_Generate debug information (d','efault format for target)'#010+
   '*g2gc_Generate checks for pointers'#010+
-  '*g2gh_Use heaptrace unit (for memory leak/corruption deb','ugging)'#010+
+  '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
   '*g2gl_Use line info unit (show more info with backtraces)'#010+
   '*g2go<x>_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 pa','ths in Sta'+
-  'bs'#010+
+  '*g3godwarfsets_ En','able DWARF '#039'set'#039' type debug information (b'+
+  'reaks gdb < 6.5)'#010+
+  '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
+  #010+
   '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+
   'ame'#010+
-  '*g2gp_Preserve case in stabs symbol names'#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_Generat','es programs traceable with Valgrind'#010+
+  '*g2gv_Generates programs traceable with Valgrind'#010+
   '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
-  '*g2gw2_Generate DWARFv2 debug information'#010+
+  '*g2gw2_Generate DWARFv2 debug i','nformation'#010+
   '*g2gw3_Generate DWARFv3 debug information'#010+
   '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+
-  '**1i_In','formation'#010+
+  '**1i_Information'#010+
   '**2iD_Return compiler date'#010+
   '**2iV_Return short compiler version'#010+
   '**2iW_Return full compiler version'#010+
-  '**2iSO_Return compiler OS'#010+
+  '**2iSO_Return c','ompiler OS'#010+
   '**2iSP_Return compiler host processor'#010+
   '**2iTO_Return target OS'#010+
   '**2iTP_Return target processor'#010+
-  '**1I<x>_Add <','x> to include path'#010+
+  '**1I<x>_Add <x> to include path'#010+
   '**1k<x>_Pass <x> to the linker'#010+
   '**1l_Write logo'#010+
   '**1M<x>_Set language mode to <x>'#010+
-  '**2Mfpc_Free Pascal dialect (default)'#010+
+  '**2Mfpc_Free Pascal dial','ect (default)'#010+
   '**2Mobjfpc_FPC mode with Object Pascal support'#010+
   '**2Mdelphi_Delphi 7 compatibility mode'#010+
-  '**2Mtp_TP/BP 7.0 ','compatibility mode'#010+
+  '**2Mtp_TP/BP 7.0 compatibility mode'#010+
   '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
   '**1n_Do not read the default config files'#010+
-  '**1o<x>_Change the name of the executable produced to <x>'#010+
+  '**1o<x','>_Change the name of the executable produced to <x>'#010+
   '**1O<x>_Optimizations:'#010+
   '**2O-_Disable optimizations'#010+
-  '**2O1_Level 1 ','optimizations (quick and debugger friendly)'#010+
+  '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
   '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
-  '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
+  '**2O3_Level 3 optimizat','ions (-O2 + slow optimizations)'#010+
   '**2O4_Level 4 optimizations (-O3 + optimizations which might have unex'+
-  'pected side eff','ects)'#010+
+  'pected side effects)'#010+
   '**2Oa<x>=<y>_Set alignment'#010+
   '**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possible '+
   'values'#010+
-  '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+
-  #010+
-  '**2OW<x>_Generate whole-program optimization feedback for o','ptimizati'+
-  'on <x>, see fpc -i for possible values'#010+
+  '**2Op<x>_Set ','target cpu for optimizing, see fpc -i for possible valu'+
+  'es'#010+
+  '**2OW<x>_Generate whole-program optimization feedback for optimization'+
+  ' <x>, see fpc -i for possible values'#010+
   '**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+
-  'le values'#010+
+  'le va','lues'#010+
   '**2Os_Optimize for size rather than speed'#010+
   '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
-  'F*1P<x>_Ta','rget CPU / compiler related options:'#010+
+  'F*1P<x>_Target CPU / compiler related options:'#010+
   'F*2PB_Show default compiler binary'#010+
   'F*2PP_Show default target cpu'#010+
-  'F*2P<x>_Set target CPU (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,sp'+
-  'arc,x86_64'#010+
+  'F*2P<x>_Set target CP','U (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,'+
+  'sparc,x86_64'#010+
   '**1R<x>_Assembler reading style:'#010+
-  '**2Rdefault_Use default ','assembler for target'#010+
+  '**2Rdefault_Use default assembler for target'#010+
   '3*2Ratt_Read AT&T style assembler'#010+
   '3*2Rintel_Read Intel style assembler'#010+
-  '6*2RMOT_Read motorola style assembler'#010+
+  '6*2RMOT_Read motorola style ass','embler'#010+
   '**1S<x>_Syntax options:'#010+
   '**2S2_Same as -Mobjfpc'#010+
   '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
-  '**2Sa_Turn on ','assertions'#010+
+  '**2Sa_Turn on assertions'#010+
   '**2Sd_Same as -Mdelphi'#010+
   '**2Se<x>_Error options. <x> is a combination of the following:'#010+
-  '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
+  '**3*_<n> : Compiler halts ','after the <n> errors (default is 1)'#010+
   '**3*_w : Compiler also halts after warnings'#010+
-  '**3*_n : Compiler also halts after no','tes'#010+
+  '**3*_n : Compiler also halts after notes'#010+
   '**3*_h : Compiler also halts after hints'#010+
   '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
-  '**2Sh_Use reference counted strings (ansistring by default) instead of'+
-  ' shortstrings'#010+
-  '**2Si_Turn on inlining of procedures/functions decla','red as "inline"'#010+
+  '**2Sh_Use reference',' counted strings (ansistring by default) instead '+
+  'of shortstrings'#010+
+  '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
   '**2Sk_Load fpcylix unit'#010+
   '**2SI<x>_Set interface style to <x>'#010+
   '**3SIcom_COM compatible interface (default)'#010+
-  '**3SIcorba_CORBA compatible interface'#010+
+  '**3','SIcorba_CORBA compatible interface'#010+
   '**2Sm_Support macros like C (global)'#010+
   '**2So_Same as -Mtp'#010+
-  '**2Ss_Constructor name mus','t be init (destructor must be done)'#010+
+  '**2Ss_Constructor name must be init (destructor must be done)'#010+
   '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
-  '**2Sy_@<pointer> returns a typed pointer, same as $T+'#010+
+  '**2Sy_@<pointer> retur','ns a typed pointer, same as $T+'#010+
   '**1s_Do not call assembler and linker'#010+
   '**2sh_Generate script to link on host'#010+
-  '**2st_Gen','erate script to link on target'#010+
+  '**2st_Generate script to link on target'#010+
   '**2sr_Skip register allocation phase (use with -alr)'#010+
   '**1T<x>_Target operating system:'#010+
-  '3*2Tdarwin_Darwin/Mac OS X'#010+
+  '3*2Tda','rwin_Darwin/Mac OS X'#010+
   '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
   '3*2Tfreebsd_FreeBSD'#010+
-  '3*2Tgo32v2_Version 2 of DJ',' Delorie DOS extender'#010+
+  '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
   '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+
   'rwin)'#010+
   '3*2Tlinux_Linux'#010+
-  '3*2Tnativent_Native NT API (experimental)'#010+
+  '3*2Tnativ','ent_Native NT API (experimental)'#010+
   '3*2Tnetbsd_NetBSD'#010+
   '3*2Tnetware_Novell Netware Module (clib)'#010+
-  '3*2Tnetwlibc_Novell Netwa','re Module (libc)'#010+
+  '3*2Tnetwlibc_Novell Netware Module (libc)'#010+
   '3*2Topenbsd_OpenBSD'#010+
   '3*2Tos2_OS/2 / eComStation'#010+
   '3*2Tsunos_SunOS/Solaris'#010+
   '3*2Tsymbian_Symbian OS'#010+
-  '3*2Tsolaris_Solaris'#010+
+  '3*2Tsolaris_','Solaris'#010+
   '3*2Twatcom_Watcom compatible DOS extender'#010+
   '3*2Twdosx_WDOSX DOS extender'#010+
   '3*2Twin32_Windows 32 Bit'#010+
-  '3*2Twince_Win','dows CE'#010+
+  '3*2Twince_Windows CE'#010+
   '4*2Tdarwin_Darwin/Mac OS X'#010+
   '4*2Tlinux_Linux'#010+
   '4*2Twin64_Win64 (64 bit Windows systems)'#010+
   '6*2Tamiga_Commodore Amiga'#010+
-  '6*2Tatari_Atari ST/STe/TT'#010+
+  '6*2Ta','tari_Atari ST/STe/TT'#010+
   '6*2Tlinux_Linux'#010+
   '6*2Tpalmos_PalmOS'#010+
   'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+
   'A*2Tlinux_Linux'#010+
-  'A*2Twince_Windo','ws CE'#010+
+  'A*2Twince_Windows CE'#010+
   'P*2Tamiga_AmigaOS'#010+
   'P*2Tdarwin_Darwin/Mac OS X'#010+
   'P*2Tlinux_Linux'#010+
   'P*2Tmacos_Mac OS (classic)'#010+
   'P*2Tmorphos_MorphOS'#010+
-  'S*2Tsolaris_Solaris'#010+
+  'S*2Tsolar','is_Solaris'#010+
   'S*2Tlinux_Linux'#010+
   '**1u<x>_Undefines the symbol <x>'#010+
   '**1U_Unit options:'#010+
-  '**2Un_Do not check where the unit name',' matches the file name'#010+
+  '**2Un_Do not check where the unit name matches the file name'#010+
   '**2Ur_Generate release unit files (never automatically recompiled)'#010+
   '**2Us_Compile a system unit'#010+
-  '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
-  '**2*_e : Show errors (default)       0 : Show nothing (','except errors'+
-  ')'#010+
+  '**1v<','x>_Be verbose. <x> 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*_n : Show notes                  t : Show tried/','used files'#010+
   '**2*_h : Show hints                  c : Show conditionals'#010+
-  '**2*_i : Show general info           d : Show d','ebug info'#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 : Sh','ow message numbers'#010+
   '**2*_a : Show everything             x : Executable info (Win32 only)'#010+
-  '**2*_b : Write file names me','ssages   p : Write tree.log with parse t'+
-  'ree'#010+
+  '**2*_b : Write file names messages   p : Write tree.log with parse tre'+
+  'e'#010+
   '**2*_    with full path              v : Write fpcdebug.txt with'#010+
-  '**2*_                                    lots of debugging info'#010+
+  '**2*_         ','                           lots of debugging info'#010+
   '**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+
-  'F*1V<x>_Ap','pend '#039'-<x>'#039' to the used compiler binary name (e.g.'+
-  ' for version)'#010+
+  'F*1V<x>_Append '#039'-<x>'#039' to the used compiler binary name (e.g. f'+
+  'or version)'#010+
   '**1W<x>_Target-specific options (targets)'#010+
-  '3*2WA_Specify native type application (Windows)'#010+
+  '3*2WA_Specify nat','ive type application (Windows)'#010+
   '4*2WA_Specify native type application (Windows)'#010+
-  'A*2WA_Specify native type application ','(Windows)'#010+
+  'A*2WA_Specify native type application (Windows)'#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+
+  'p*2Wb_Cre','ate a bundle instead of a library (Darwin)'#010+
   'A*2Wb_Create a bundle instead of a library (Darwin)'#010+
-  '4*2Wb_Create a bundle ','instead of a library (Darwin)'#010+
+  '4*2Wb_Create a bundle instead of a library (Darwin)'#010+
   '3*2WB_Create a relocatable image (Windows, Symbian)'#010+
-  '3*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
+  '3*2WBxxxx_Set image base to xxxx (Windows',', Symbian)'#010+
   '4*2WB_Create a relocatable image (Windows)'#010+
   '4*2WBxxxx_Set image base to xxxx (Windows)'#010+
-  'A*2WB_Create a reloc','atable image (Windows, Symbian)'#010+
+  'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
   'A*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
-  '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
+  '3*2WC_Specify console type application ','(EMX, OS/2, Windows)'#010+
   '4*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
-  'A*2WC_Specify console type applicati','on (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+
+  '3*2WD_Use DEFFILE to export functions of DLL or EXE (W','indows)'#010+
   '4*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+
+  '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+
+  'A*2We_Use external resources (Da','rwin)'#010+
   'P*2We_Use external resources (Darwin)'#010+
   'p*2We_Use external resources (Darwin)'#010+
-  '3*2WF_Specify full-screen type appl','ication (EMX, OS/2)'#010+
+  '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
   '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
-  '4*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
+  '4*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 Mac OS)'#010+
   '3*2Wi_Use internal resources (Darwin)'#010+
   '4*2Wi_Use internal resources (Darwin)'#010+
   'A*2Wi_Use internal resources (Darwin)'#010+
-  'P*2Wi_Use internal resources (Darwin)'#010+
+  'P*2W','i_Use internal resources (Darwin)'#010+
   'p*2Wi_Use internal resources (Darwin)'#010+
-  '3*2WI_Turn on/off the usage of import section','s (Windows)'#010+
+  '3*2WI_Turn on/off the usage of import sections (Windows)'#010+
   '4*2WI_Turn on/off the usage of import sections (Windows)'#010+
-  'A*2WI_Turn on/off the usage of import sections (Windows)'#010+
+  'A*2WI_Turn on/off the usage of import sections (Window','s)'#010+
   '8*2Wm<x>_Set memory model'#010+
   '8*3WmTiny_Tiny memory model'#010+
   '8*3WmSmall_Small memory model (default)'#010+
-  '8*3WmMedium_Medium m','emory model'#010+
+  '8*3WmMedium_Medium memory model'#010+
   '3*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'n)'#010+
-  '4*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
-  'n)'#010+
+  '4*2WM<x>_Minimum Mac OS X deployment v','ersion: 10.4, 10.5.1, ... (Dar'+
+  'win)'#010+
   'p*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'n)'#010+
-  'P*2WM<x>_','Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Dar'+
-  'win)'#010+
-  '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
+  'P*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
+  'n)'#010+
+  '3*2WN_Do not generate relocation code, needed for debugging',' (Windows'+
+  ')'#010+
   '4*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
-  'A*2WN_Do not generate relocation cod','e, needed for debugging (Windows'+
-  ')'#010+
+  'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
   'A*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
-  'V*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
-  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesi','m)'+
-  #010+
+  'V*2Wpxxxx_Specify t','he controller type, see fpc -i for possible value'+
+  's'#010+
+  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesim)'#010+
   'A*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (Darwin)'#010+
   '3*2WR_Generate relocation code (Windows)'#010+
-  '4*2WR_Generate relocation code (Windows)'#010+
+  '4*2WR_Generat','e relocation code (Windows)'#010+
   'A*2WR_Generate relocation code (Windows)'#010+
   '8*2Wt<x>_Set the target executable format'#010+
-  '8*3Wte','xe_Create a DOS .EXE file (default)'#010+
+  '8*3Wtexe_Create a DOS .EXE file (default)'#010+
   '8*3Wtcom_Create a DOS .COM file (requires tiny memory model)'#010+
-  'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
+  'P*2WT_Specify MPW tool typ','e application (Classic Mac OS)'#010+
   '**2WX_Enable executable stack (Linux)'#010+
   '**1X_Executable options:'#010+
-  '**2Xc_Pass --shared/-dy','namic to the linker (BeOS, Darwin, FreeBSD, L'+
-  'inux)'#010+
+  '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
+  'ux)'#010+
   '**2Xd_Do not search default library path (sometimes required for cross'+
-  '-compiling when not using -XR)'#010+
+  '-c','ompiling when not using -XR)'#010+
   '**2Xe_Use external linker'#010+
-  '**2Xg_Create debuginfo in a separate file and add a debuglink ','sectio'+
-  'n to executable'#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+
-  '**2Xm_Generate link map'#010+
+  '**2Xm_G','enerate link map'#010+
   '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
   's '#039'main'#039')'#010+
-  'F*2Xp<x>_First search for th','e compiler binary in the directory <x>'#010+
+  'F*2Xp<x>_First search for the compiler binary in the directory <x>'#010+
   '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
-  '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+
-  'ile, see the ld manual for more information) (BeOS, Linux)'#010+
-  '**2XR<x>_Prepend <x>',' to all linker search paths (BeOS, Darwin, FreeB'+
-  'SD, Linux, Mac OS, Solaris)'#010+
+  '**2Xr<x>_Set the linker'#039's rl','ink-path to <x> (needed for cross co'+
+  'mpile, see the ld manual for more information) (BeOS, Linux)'#010+
+  '**2XR<x>_Prepend <x> 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, defines FPC_LINK_STATIC)'#010+
-  '**2Xt_Link with static libraries (-static is passed to',' linker)'#010+
+  '**2XS_T','ry to link units statically (default, defines FPC_LINK_STATIC'+
+  ')'#010+
+  '**2Xt_Link with static libraries (-static is passed to linker)'#010+
   '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
   '**1*_'#010+
   '**1?_Show this help'#010+
-  '**1h_Shows this help without waiting'
+  '**1h_Shows this help w','ithout waiting'
 );
Index: ncgflw.pas
===================================================================
--- ncgflw.pas	(revision 26481)
+++ ncgflw.pas	(working copy)
@@ -422,259 +422,70 @@
 
 
     procedure tcgfornode.pass_generate_code;
-      var
-         l3,oldclabel,oldblabel,
-         otl, ofl : tasmlabel;
+       type
+         tcompconst = (cc_false, cc_true, cc_true_withrangecheck);
+       var
          temptovalue : boolean;
-         hop : topcg;
-         hcond : topcmp;
          opsize : tcgsize;
-         count_var_is_signed,do_loopvar_at_end : boolean;
-         cmp_const:Tconstexprint;
-         oldflowcontrol : tflowcontrol;
-         oldexecutionweight : longint;
-         isjump: boolean;
-      begin
-         location_reset(location,LOC_VOID,OS_NO);
-         ofl:=nil;
-         otl:=nil;
+         count_var_is_signed : boolean;
+         step : aint;
 
-         oldclabel:=current_procinfo.CurrContinueLabel;
-         oldblabel:=current_procinfo.CurrBreakLabel;
-         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
-         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
-         current_asmdata.getjumplabel(l3);
-
-         { only calculate reference }
-         opsize := def_cgsize(left.resultdef);
-         count_var_is_signed:=is_signed(left.resultdef);
-
-         { first set the to value
-           because the count var can be in the expression ! }
-         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
-         { if the loop is unrolled and there is a jump into the loop,
-           then we can't do the trick with incrementing the loop var only at the
-           end
-         }
-           and not(assigned(entrylabel));
-
-        isjump:=(t1.expectloc=LOC_JUMP);
-        if isjump then
-          begin
-             otl:=current_procinfo.CurrTrueLabel;
-             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
-             ofl:=current_procinfo.CurrFalseLabel;
-             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
-          end;
-        secondpass(t1);
-        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
-          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
-        if isjump then
-          begin
-            current_procinfo.CurrTrueLabel:=otl;
-            current_procinfo.CurrFalseLabel:=ofl;
-          end;
-         { calculate pointer value and check if changeable and if so }
-         { load into temporary variable                       }
-         if t1.nodetype<>ordconstn then
-           begin
-              do_loopvar_at_end:=false;
-              temptovalue:=true;
-           end
-         else
-           temptovalue:=false;
-
-         { load loopvar, prefer loopvar being a register variable }
-         oldexecutionweight:=cg.executionweight;
-         inc(cg.executionweight,8);
-         secondpass(left);
-         cg.executionweight:=oldexecutionweight;
-
-         { load from value }
-         isjump:=(right.expectloc=LOC_JUMP);
-         if isjump then
-           begin
-              otl:=current_procinfo.CurrTrueLabel;
-              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
-              ofl:=current_procinfo.CurrFalseLabel;
-              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
-           end;
-         secondpass(right);
-         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
-           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
-         if isjump then
-           begin
-             current_procinfo.CurrTrueLabel:=otl;
-             current_procinfo.CurrFalseLabel:=ofl;
-           end;
-
-         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
-         oldflowcontrol:=flowcontrol;
-         include(flowcontrol,fc_inflowcontrol);
-         { produce start assignment }
-         case left.location.loc of
-           LOC_REFERENCE,
-           LOC_CREFERENCE :
-             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
-           LOC_REGISTER,
-           LOC_CREGISTER:
-             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
-           LOC_SUBSETREG,
-           LOC_CSUBSETREG :
-             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
-           else
-             internalerror(200501311);
-         end;
-
-         if lnf_backward in loopflags then
-           if count_var_is_signed then
-             hcond:=OC_LT
-           else
-             hcond:=OC_B
-         else
-           if count_var_is_signed then
-             hcond:=OC_GT
-           else
-             hcond:=OC_A;
-
-         sync_regvars(true);
-{$ifdef OLDREGVARS}
-         load_all_regvars(current_asmdata.CurrAsmList);
-{$endif OLDREGVARS}
-
-         if temptovalue then
-           begin
-             case t1.location.loc of
-               LOC_REGISTER,LOC_CREGISTER:
-                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-                   t1.location.register,left.location,current_procinfo.CurrBreakLabel);
-               LOC_REFERENCE,LOC_CREFERENCE:
-                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-                   t1.location.reference,left.location,current_procinfo.CurrBreakLabel);
-             else
-               InternalError(2013051601);
-             end;
-           end
-         else
-           begin
-             if lnf_testatbegin in loopflags then
-               begin
-                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-                   tordconstnode(t1).value.svalue,
-                   left.location,current_procinfo.CurrBreakLabel);
-               end;
-           end;
-
-         {If the loopvar doesn't mind on exit, we avoid this ugly
-          dec instruction and do the loopvar inc/dec after the loop
-          body.}
-         if not do_loopvar_at_end then
-            begin
-              if lnf_backward in loopflags then
-                hop:=OP_ADD
-              else
-                hop:=OP_SUB;
-              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
-            end;
-
-         if assigned(entrylabel) then
-           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
-
-         { align loop target }
-         if not(cs_opt_size in current_settings.optimizerswitches) then
-            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
-         hlcg.a_label(current_asmdata.CurrAsmList,l3);
-
-         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
-          after the loop body instead of here.}
-         if not do_loopvar_at_end then
-            begin
-              { according to count direction DEC or INC... }
-              if lnf_backward in loopflags then
-                hop:=OP_SUB
-              else
-                hop:=OP_ADD;
-              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
-            end;
-
-         if assigned(t2) then
-           begin
-             { Calc register weight }
-             oldexecutionweight:=cg.executionweight;
-             cg.executionweight:=cg.executionweight*8;
-             secondpass(t2);
-             cg.executionweight:=oldexecutionweight;
-{$ifdef OLDREGVARS}
-             load_all_regvars(current_asmdata.CurrAsmList);
-{$endif OLDREGVARS}
-           end;
-
-         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
-          after the loop body instead of here.}
-         if do_loopvar_at_end then
-            begin
-              { according to count direction DEC or INC... }
-              if lnf_backward in loopflags then
-                hop:=OP_SUB
-              else
-                hop:=OP_ADD;
-              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
-            end;
-
-         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
-
-         if do_loopvar_at_end then
-           if lnf_backward in loopflags then
+        procedure check_loopvar(comp_greater, comp_equal : boolean;
+                                check_carry : boolean;
+                                jump_to_label : tasmlabel;
+                                check_const : tcompconst);
+        var
+          hcond: topcmp;
+          cmp_const: Tconstexprint;
+        begin
+          if check_carry then { jump to break if the carry flag is set }
+            hlcg.a_jmp_flags(current_asmdata.CurrAsmList, F_C, current_procinfo.CurrBreakLabel);
+          if comp_equal then
+            if comp_greater then
+               if count_var_is_signed then
+                 hcond:=OC_GTE
+               else
+                 hcond:=OC_AE
+            else // forward
+                if count_var_is_signed then
+                  hcond:=OC_LTE
+                else
+                  hcond:=OC_BE
+         else // is_before_body
+            if comp_greater then
              if count_var_is_signed then
-               hcond:=OC_GTE
-             else
-               hcond:=OC_AE
-            else
-              if count_var_is_signed then
-                hcond:=OC_LTE
-              else
-                hcond:=OC_BE
-         else
-           if lnf_backward in loopflags then
-             if count_var_is_signed then
                hcond:=OC_GT
              else
                hcond:=OC_A
-            else
+            else // forward
               if count_var_is_signed then
                 hcond:=OC_LT
               else
                 hcond:=OC_B;
-{$ifdef OLDREGVARS}
-         load_all_regvars(current_asmdata.CurrAsmList);
-{$endif OLDREGVARS}
 
-         { produce comparison and the corresponding }
-         { jump                                     }
          if temptovalue then
            begin
              case t1.location.loc of
                LOC_REGISTER,LOC_CREGISTER:
-                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.register,
-                   left.location,l3);
+                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
+                   t1.location.register,left.location,jump_to_label);
                LOC_REFERENCE,LOC_CREFERENCE:
-                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.reference,
-                   left.location,l3);
+                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
+                   t1.location.reference,left.location,jump_to_label);
              else
-               InternalError(2013051602);
+               InternalError(2013051601);
              end;
            end
          else
            begin
-             cmp_const:=Tordconstnode(t1).value;
-             if do_loopvar_at_end then
+             if check_const=cc_true_withrangecheck then
                begin
-                 {Watch out for wrap around 255 -> 0.}
-                 {Ugly: This code is way to long... Use tables?}
+                 cmp_const:=Tordconstnode(t1).value;
+                 // we check here if we need to alter hcond if the loopvar range is met
                  case opsize of
                    OS_8:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if byte(cmp_const.svalue)=low(byte) then
                              begin
@@ -693,7 +504,7 @@
                      end;
                    OS_16:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if word(cmp_const.svalue)=high(word) then
                              begin
@@ -712,7 +523,7 @@
                      end;
                    OS_32:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if cardinal(cmp_const.svalue)=high(cardinal) then
                              begin
@@ -731,7 +542,7 @@
                      end;
                    OS_64:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if qword(cmp_const.uvalue)=high(qword) then
                              begin
@@ -750,7 +561,7 @@
                      end;
                    OS_S8:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if shortint(cmp_const.svalue)=low(shortint) then
                              begin
@@ -769,7 +580,7 @@
                      end;
                    OS_S16:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if integer(cmp_const.svalue)=high(smallint) then
                              begin
@@ -788,7 +599,7 @@
                      end;
                    OS_S32:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if longint(cmp_const.svalue)=high(longint) then
                              begin
@@ -807,7 +618,7 @@
                      end;
                    OS_S64:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if int64(cmp_const.svalue)=high(int64) then
                              begin
@@ -829,10 +640,216 @@
                  end;
                end;
 
-             hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-               aint(cmp_const.svalue),left.location,l3);
+             if check_const >= cc_true then
+               begin
+                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
+                   tordconstnode(t1).value.svalue,
+                   left.location,jump_to_label);
+               end;
            end;
+        end;
 
+        procedure do_loopvar(is_backward : boolean);
+          var
+            hop: topcg;
+          begin
+            { according to count direction DEC or INC... }
+            if is_backward then
+              hop:=OP_SUB
+            else
+              hop:=OP_ADD;
+            hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,step,left.location);
+          end;
+
+      var
+         l3,l4,oldclabel,oldblabel,
+         otl, ofl : tasmlabel;
+         do_compare_before: boolean;
+         do_loopvar_at_end : boolean;
+         oldflowcontrol : tflowcontrol;
+         oldexecutionweight : longint;
+         isjump: boolean;
+      begin
+         location_reset(location,LOC_VOID,OS_NO);
+         ofl:=nil;
+         otl:=nil;
+
+         oldclabel:=current_procinfo.CurrContinueLabel;
+         oldblabel:=current_procinfo.CurrBreakLabel;
+         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
+         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
+         current_asmdata.getjumplabel(l3);
+         current_asmdata.getjumplabel(l4);
+
+         { only calculate reference }
+         opsize := def_cgsize(left.resultdef);
+         count_var_is_signed:=is_signed(left.resultdef);
+
+         { set a value for step. 1 by default }
+         if not assigned(loopstep) then
+           step:=1
+         else
+           step:=tordconstnode(loopstep).value;
+
+         { first set the to value
+           because the count var can be in the expression ! }
+         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
+         { if the loop is unrolled and there is a jump into the loop,
+           then we can't do the trick with incrementing the loop var only at the
+           end
+         }
+           and not(assigned(entrylabel));
+
+        do_compare_before:=not do_loopvar_at_end and (abs(step) > 1);
+
+        isjump:=(t1.expectloc=LOC_JUMP);
+        if isjump then
+          begin
+             otl:=current_procinfo.CurrTrueLabel;
+             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
+             ofl:=current_procinfo.CurrFalseLabel;
+             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
+          end;
+        secondpass(t1);
+        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
+          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
+        if isjump then
+          begin
+            current_procinfo.CurrTrueLabel:=otl;
+            current_procinfo.CurrFalseLabel:=ofl;
+          end;
+         { calculate pointer value and check if changeable and if so }
+         { load into temporary variable                       }
+         if t1.nodetype<>ordconstn then
+           begin
+              do_loopvar_at_end:=false;
+              temptovalue:=true;
+           end
+         else
+           temptovalue:=false;
+
+         { load loopvar, prefer loopvar being a register variable }
+         oldexecutionweight:=cg.executionweight;
+         inc(cg.executionweight,8);
+         secondpass(left);
+         cg.executionweight:=oldexecutionweight;
+
+         { load from value }
+         isjump:=(right.expectloc=LOC_JUMP);
+         if isjump then
+           begin
+              otl:=current_procinfo.CurrTrueLabel;
+              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
+              ofl:=current_procinfo.CurrFalseLabel;
+              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
+           end;
+         secondpass(right);
+         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
+           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
+         if isjump then
+           begin
+             current_procinfo.CurrTrueLabel:=otl;
+             current_procinfo.CurrFalseLabel:=ofl;
+           end;
+
+         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
+         oldflowcontrol:=flowcontrol;
+         include(flowcontrol,fc_inflowcontrol);
+         { produce start assignment }
+         case left.location.loc of
+           LOC_REFERENCE,
+           LOC_CREFERENCE :
+             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
+           LOC_REGISTER,
+           LOC_CREGISTER:
+             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
+           LOC_SUBSETREG,
+           LOC_CSUBSETREG :
+             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
+           else
+             internalerror(200501311);
+         end;
+
+         sync_regvars(true);
+{$ifdef OLDREGVARS}
+         load_all_regvars(current_asmdata.CurrAsmList);
+{$endif OLDREGVARS}
+         check_loopvar(not (lnf_backward in loopflags), False, False{check_carry}, current_procinfo.CurrBreakLabel, tcompconst(ord(lnf_testatbegin in loopflags)));
+
+         {If the loopvar doesn't mind on exit, we avoid this ugly
+          dec instruction and do the loopvar inc/dec after the loop
+          body.}
+         if not do_loopvar_at_end and not do_compare_before then
+           do_loopvar(not (lnf_backward in loopflags));
+
+         if assigned(entrylabel) then
+           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
+
+         { align loop target }
+         if not(cs_opt_size in current_settings.optimizerswitches) then
+            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
+
+         { skip first compare since we've already done it. the jump is only
+           included when the step value isn't 1. this is because we check the
+           carry flag when step is > 1 and it gets set for the first iteration
+           if we dec it from 0 and then back. }
+         if do_compare_before then
+           hlcg.a_jmp_always(current_asmdata.CurrAsmList,l4);
+
+         hlcg.a_label(current_asmdata.CurrAsmList,l3);
+
+         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
+          after the loop body instead of here.}
+         if not do_loopvar_at_end then
+            begin
+              { according to count direction DEC or INC... }
+              do_loopvar(lnf_backward in loopflags);
+
+              if do_compare_before then
+                 check_loopvar(not (lnf_backward in loopflags), False{comp_equal},step<>1,current_procinfo.CurrBreakLabel{jump_to}, cc_true_withrangecheck)
+            end;
+
+         { jump here to avoid the first iteration of the loop reacting to the
+           carry flag if the loopvar is on either end of the range at the start
+           and rolls over
+         }
+         if do_compare_before then
+           hlcg.a_label(current_asmdata.CurrAsmList,l4);
+
+         if assigned(t2) then
+           begin
+             { Calc register weight }
+             oldexecutionweight:=cg.executionweight;
+             cg.executionweight:=cg.executionweight*8;
+             secondpass(t2);
+             cg.executionweight:=oldexecutionweight;
+{$ifdef OLDREGVARS}
+             load_all_regvars(current_asmdata.CurrAsmList);
+{$endif OLDREGVARS}
+           end;
+
+         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
+          after the loop body instead of here.}
+         if do_loopvar_at_end then
+            begin
+              { according to count direction DEC or INC... }
+              do_loopvar(lnf_backward in loopflags);
+            end;
+
+         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
+
+{$ifdef OLDREGVARS}
+         load_all_regvars(current_asmdata.CurrAsmList);
+{$endif OLDREGVARS}
+         if do_loopvar_at_end then
+           check_loopvar(lnf_backward in loopflags, True{comp_equal},step<>1{check_carry},l3{jump_to}, cc_true_withrangecheck)
+         else
+           if do_compare_before then
+              { jump to loop start where it might jump again to break }
+              hlcg.a_jmp_always(current_asmdata.CurrAsmList, l3)
+           else
+             check_loopvar(lnf_backward in loopflags, False{comp_equal},step<>1{check_carry},l3{jump_to}, cc_true_withrangecheck);
+
          { this is the break label: }
          hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrBreakLabel);
 
Index: nflw.pas
===================================================================
--- nflw.pas	(revision 26481)
+++ nflw.pas	(working copy)
@@ -99,8 +99,10 @@
           entrylabel,
           { this is a dummy node used by the dfa to store life information for the loop iteration }
           loopiteration : tnode;
+          loopstep : tnode;
           loopvar_notid:cardinal;
-          constructor create(l,r,_t1,_t2 : tnode;back : boolean);virtual;reintroduce;
+          constructor create(l,r,_t1,_t2, step : tnode;back : boolean);virtual;reintroduce;
+          destructor destroy; override;
           procedure loop_var_access(not_type:Tnotification_flag;symbol:Tsym);
           function wrap_to_value:tnode;
           function pass_typecheck:tnode;override;
@@ -259,6 +261,7 @@
           cinlinenode.create(in_low_x,false,expr.getcopy),
           cinlinenode.create(in_high_x,false,expr.getcopy),
           hloopbody,
+          nil{step node},
           false);
       end;
 
@@ -529,6 +532,7 @@
           genintconstnode(1),
           cinlinenode.create(in_length_x,false,ctemprefnode.create(stringvar)),
           loopbody,
+          nil{step node},
           false);
 
         addstatement(loopstatement,forloopnode);
@@ -642,6 +646,7 @@
           lowbound,
           highbound,
           loopbody,
+          nil{step node},
           false);
 
         addstatement(loopstatement,forloopnode);
@@ -707,6 +712,7 @@
           cinlinenode.create(in_low_x,false,ctemprefnode.create(setvar)),
           cinlinenode.create(in_high_x,false,ctemprefnode.create(setvar)),
           loopbody,
+          nil{step node},
           false);
 
         addstatement(loopstatement,forloopnode);
@@ -1421,15 +1427,24 @@
                               TFORNODE
 *****************************************************************************}
 
-    constructor tfornode.create(l,r,_t1,_t2 : tnode;back : boolean);
+    constructor tfornode.create(l,r,_t1,_t2, step : tnode;back : boolean);
 
       begin
          inherited create(forn,l,r,_t1,_t2);
+         loopstep := step;
          if back then
            include(loopflags,lnf_backward);
          include(loopflags,lnf_testatbegin);
       end;
 
+    destructor tfornode.destroy;
+
+      begin
+         if assigned(loopstep) then
+           loopstep.free;
+         inherited destroy;
+      end;
+
     procedure Tfornode.loop_var_access(not_type:Tnotification_flag;
                                        symbol:Tsym);
 
@@ -1497,13 +1512,14 @@
           t1));
         { create a new for node, it is cheaper than cloning entire loop body }
         addstatement(statements,cfornode.create(
-          left,right,ctemprefnode.create(temp),t2,lnf_backward in loopflags));
+          left,right,ctemprefnode.create(temp),t2,loopstep,lnf_backward in loopflags));
         addstatement(statements,ctempdeletenode.create(temp));
         { all child nodes are reused }
         left:=nil;
         right:=nil;
         t1:=nil;
         t2:=nil;
+        loopstep:=nil;
       end;
 
 
Index: ninl.pas
===================================================================
--- ninl.pas	(revision 26481)
+++ ninl.pas	(working copy)
@@ -4192,6 +4192,7 @@
            cinlinenode.create(in_low_x,false,packednode.getcopy),
            cinlinenode.create(in_high_x,false,packednode.getcopy),
            loopbody,
+           nil{step},
            false);
          addstatement(loopstatement,tempnode);
          { free the loop counter }
Index: optloop.pas
===================================================================
--- optloop.pas	(revision 26481)
+++ optloop.pas	(working copy)
@@ -102,12 +102,21 @@
         getridoffor : boolean;
         replaceinfo : treplaceinfo;
         usesbreakcontinue : boolean;
+        stepvalue : Tconstexprint;
+        stepcopy: tnode;
       begin
         result:=nil;
         if (cs_opt_size in current_settings.optimizerswitches) then
           exit;
         if not(node.nodetype in [forn]) then
           exit;
+
+        { set the loop step increment }
+        if tfornode(node).loopstep=nil then
+          stepvalue:=1
+        else
+          stepvalue:=tordconstnode(tfornode(node).loopstep).value;
+
         unrolls:=number_unrolls(tfornode(node).t2);
         if unrolls>1 then
           begin
@@ -115,10 +124,16 @@
             if (tfornode(node).right.nodetype=ordconstn) and (tfornode(node).t1.nodetype=ordconstn) then
               begin
                 if lnf_backward in tfornode(node).loopflags then
-                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value+1
+                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value
                 else
-                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value+1;
+                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value;
 
+                if stepvalue > 1 then
+                  counts:=counts div stepvalue + 1
+                { always add 1}
+                else
+                  inc(counts);
+
                 usesbreakcontinue:=foreachnodestatic(tfornode(node).t2,@checkbreakcontinue,nil);
 
                 { don't unroll more than we need,
@@ -161,22 +176,28 @@
                       begin
                         foreachnodestatic(tnode(unrollstatement),@replaceloadnodes,@replaceinfo);
                         if lnf_backward in tfornode(node).loopflags then
-                          replaceinfo.value:=replaceinfo.value-1
+                          replaceinfo.value:=replaceinfo.value-stepvalue
                         else
-                          replaceinfo.value:=replaceinfo.value+1;
+                          replaceinfo.value:=replaceinfo.value+stepvalue;
                       end
                     else
                       begin
                         { for itself increases at the last iteration }
                         if i<unrolls then
                           begin
+                            { create copy of step node if needed }
+                            if tfornode(node).loopstep = nil then
+                              stepcopy:=nil
+                            else // if stepincrement
+                              stepcopy:=ccallparanode.create(tfornode(node).loopstep.getcopy, nil);
+
                             { insert incr/decrementation of counter var }
                             if lnf_backward in tfornode(node).loopflags then
                               addstatement(unrollstatement,
-                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)))
+                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)))
                             else
                               addstatement(unrollstatement,
-                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)));
+                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)));
                           end;
                        end;
                   end;
@@ -306,6 +327,7 @@
       var
         tempnode : ttempcreatenode;
         dummy : longint;
+        stepcopy : tnode;
       begin
         result:=fen_false;
         case n.nodetype of
@@ -344,14 +366,20 @@
                       inductionexprs.Add(n);
                       CreateNodes;
 
+                      { check if we are using a stepvalue}
+                      if not assigned(tfornode(arg).loopstep) then
+                        stepcopy:=nil
+                      else
+                        stepcopy:=tfornode(arg).loopstep.getcopy;
+
                       if lnf_backward in tfornode(arg).loopflags then
                         addstatement(calccodestatements,
                           geninlinenode(in_dec_x,false,
-                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))))
+                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))))
                       else
                         addstatement(calccodestatements,
                           geninlinenode(in_inc_x,false,
-                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))));
+                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))));
 
                       addstatement(initcodestatements,tempnode);
                       addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
@@ -403,16 +431,22 @@
                       inductionexprs.Add(n);
                       CreateNodes;
 
+                      { check if we are using a stepvalue}
+                      if not assigned(tfornode(arg).loopstep) then
+                        stepcopy:=nil
+                      else
+                        stepcopy:=tfornode(arg).loopstep.getcopy;
+
                       if lnf_backward in tfornode(arg).loopflags then
                         addstatement(calccodestatements,
                           geninlinenode(in_dec_x,false,
                           ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
-                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))))
+                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))))
                       else
                         addstatement(calccodestatements,
                           geninlinenode(in_inc_x,false,
                           ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
-                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))));
+                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))));
 
                       addstatement(initcodestatements,tempnode);
                       addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
@@ -467,11 +501,12 @@
             { create a new for node, the old one will be released by the compiler }
             with tfornode(node) do
               begin
-                fornode:=cfornode.create(left,right,t1,t2,lnf_backward in loopflags);
+                fornode:=cfornode.create(left,right,t1,t2,loopstep,lnf_backward in loopflags);
                 left:=nil;
                 right:=nil;
                 t1:=nil;
                 t2:=nil;
+                loopstep:=nil;
               end;
             node:=fornode;
 
Index: pstatmnt.pas
===================================================================
--- pstatmnt.pas	(revision 26481)
+++ pstatmnt.pas	(working copy)
@@ -370,8 +370,11 @@
           var
              hp,
              hblock,
+             hstep,
              hto,hfrom : tnode;
              backward : boolean;
+             usesstep : boolean;
+             stepvalue: Tconstexprint;
              loopvarsym : tabstractvarsym;
           begin
              { Check loop variable }
@@ -473,11 +476,49 @@
                end;
 
              hto:=comp_expr(true,false);
+
+             if try_to_consume(_BY) then
+               begin
+                 hstep:=comp_expr(true,false);
+                 usesstep:=true;
+
+                 { we accept only ordinal consts and not enums }
+                 if not is_ordinal(hstep.resultdef) or is_enum(hstep.resultdef) then
+                   Message(type_e_ordinal_expr_expected)
+                 else
+                   if ErrorCount = 0 then
+                     begin
+                       stepvalue := get_ordinal_value(hstep);
+                       if abs(stepvalue.svalue) = 1 then
+                         begin
+                           { no need to do anything if step = 1 }
+                           hstep.free;
+                           hstep := nil;
+                           usesstep:=false;
+                         end
+                       else
+                         if backward and (stepvalue.svalue >= 0) then
+                           Message1(parser_e_expected_negative_by_value, tostr(stepvalue))
+                         else if not backward and (stepvalue.svalue <= 0) then
+                           Message1(parser_e_expected_positive_by_value, tostr(stepvalue))
+                         else
+                           if backward then
+                             tordconstnode(hstep).value.uvalue := abs(stepvalue.svalue);
+                     end;
+               end
+             else
+               begin
+                 hstep:=nil;
+                 usesstep:=false;
+               end;
+
              consume(_DO);
 
              { Check if the constants fit in the range }
              check_range(hfrom,hloopvar.resultdef);
              check_range(hto,hloopvar.resultdef);
+             if usesstep then
+               check_range(hstep,hloopvar.resultdef);
 
              { first set the varstate for from and to, so
                uses of loopvar in those expressions will also
@@ -488,6 +529,11 @@
              set_varstate(hfrom,vs_read,[vsf_must_be_valid]);
              typecheckpass(hto);
              set_varstate(hto,vs_read,[vsf_must_be_valid]);
+             if usesstep then
+               begin
+                 typecheckpass(hstep);
+                 set_varstate(hstep,vs_read,[vsf_must_be_valid]);
+               end;
              typecheckpass(hloopvar);
              { in two steps, because vs_readwritten may turn on vsf_must_be_valid }
              { for some subnodes                                                  }
@@ -501,7 +547,7 @@
              if assigned(loopvarsym) then
                exclude(loopvarsym.varoptions,vo_is_loop_counter);
 
-             result:=cfornode.create(hloopvar,hfrom,hto,hblock,backward);
+             result:=cfornode.create(hloopvar,hfrom,hto,hblock,hstep,backward);
           end;
 
 
Index: tokens.pas
===================================================================
--- tokens.pas	(revision 26481)
+++ tokens.pas	(working copy)
@@ -101,6 +101,7 @@
     _C,
     _AS,
     _AT,
+    _BY,
     _DO,
     _IF,
     _IN,
@@ -418,6 +419,7 @@
       (str:'C'             ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'AS'            ;special:false;keyword:[m_class];op:_OP_AS),
       (str:'AT'            ;special:false;keyword:[m_none];op:NOTOKEN),
+      (str:'BY'            ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'DO'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
       (str:'IF'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
       (str:'IN'            ;special:false;keyword:alllanguagemodes;op:_OP_IN),
for_by.patch (125,180 bytes)

AndrewH

2014-01-20 03:45

developer   ~0072553

Ok, now the patch works fine without any crashes. I ran the test suite with and without modifications and the results are the same for both.

I am writing some tests to try and break 'by' but so far so good.

Jonas Maebe

2014-01-20 11:37

manager   ~0072557

You cannot use hlcg.a_jmp_flags() in generic code, that only works on cpus that actually have a flags register (not all architectures do).

AndrewH

2014-01-23 07:28

developer  

for_by-noflags.patch (127,354 bytes)
Index: jvm/njvmflw.pas
===================================================================
--- jvm/njvmflw.pas	(revision 26481)
+++ jvm/njvmflw.pas	(working copy)
@@ -101,7 +101,7 @@
               ctypeconvnode.create_explicit(ctemprefnode.create(iteratortmp),
                 olditerator.resultdef)));
             addstatement(newbodystat,t2);
-            addstatement(stat,cfornode.create(left,right,t1,newbody,lnf_backward in loopflags));
+            addstatement(stat,cfornode.create(left,right,t1,newbody,loopstep,lnf_backward in loopflags));
             addstatement(stat,ctempdeletenode.create(iteratortmp));
             left:=nil;
             right:=nil;
Index: msg/errore.msg
===================================================================
--- msg/errore.msg	(revision 26481)
+++ msg/errore.msg	(working copy)
@@ -398,7 +398,7 @@
 #
 # Parser
 #
-# 03335 is the last used one
+# 03337 is the last used one
 #
 % \section{Parser messages}
 % This section lists all parser messages. The parser takes care of the
@@ -1501,6 +1501,10 @@
 parser_e_property_only_sgr=03335_E_Properties can be only static, global or inside structured types
 % Properties cannot be declared local, only global, using the static
 % directive or inside structured types.
+parser_e_expected_positive_by_value=03336_E_Invalid value for by "$1" (must be greater than 0).
+% The constant value for by must be greater than zero in a for to loop.
+parser_e_expected_negative_by_value=03337_E_Invalid value for by "$1" (must be less than 0).
+% The constant value for by must be less than zero in a for downto loop. 
 %
 %
 % \end{description}
Index: msgidx.inc
===================================================================
--- msgidx.inc	(revision 26481)
+++ msgidx.inc	(working copy)
@@ -433,6 +433,8 @@
   parser_e_dir_not_allowed=03333;
   parser_e_no_assembler_in_generic=03334;
   parser_e_property_only_sgr=03335;
+  parser_e_expected_positive_by_value=03336;
+  parser_e_expected_negative_by_value=03337;
   type_e_mismatch=04000;
   type_e_incompatible_types=04001;
   type_e_not_equal_types=04002;
@@ -978,9 +980,9 @@
   option_info=11024;
   option_help_pages=11025;
 
-  MsgTxtSize = 70217;
+  MsgTxtSize = 70334;
 
   MsgIdxMax : array[1..20] of longint=(
-    26,95,336,121,88,56,126,27,202,64,
+    26,95,338,121,88,56,126,27,202,64,
     54,20,1,1,1,1,1,1,1,1
   );
Index: msgtxt.inc
===================================================================
--- msgtxt.inc	(revision 26481)
+++ msgtxt.inc	(working copy)
@@ -1,7 +1,7 @@
 {$ifdef Delphi}
-const msgtxt : array[0..000292] of string[240]=(
+const msgtxt : array[0..000293] of string[240]=(
 {$else Delphi}
-const msgtxt : array[0..000292,1..240] of char=(
+const msgtxt : array[0..000293,1..240] of char=(
 {$endif Delphi}
   '01000_T_Compiler: $1'#000+
   '01001_D_Compiler OS: $1'#000+
@@ -542,669 +542,675 @@
   '03334_E_Assembler blocks not allowed inside generics'#000+
   '03335_E_Properties can be only static, global or inside structured typ'+
   'es'#000+
+  '03336_E_Invalid value for by "$1" (must be greater than 0).'#000+
+  '03337_E_Invalid',' value for by "$1" (must be less than 0).'#000+
   '04000_E_Type mismatch'#000+
   '04001_E_Incompatible types: got "$1" expected "$2"'#000+
-  '04','002_E_Type mismatch between "$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+
+  '04005_E_Int','eger expression expected, but got "$1"'#000+
   '04006_E_Boolean expression expected, but got "$1"'#000+
-  '04007_E_Ordinal expression e','xpected'#000+
+  '04007_E_Ordinal expression expected'#000+
   '04008_E_pointer type expected, but got "$1"'#000+
   '04009_E_class type expected, but got "$1"'#000+
-  '04011_E_Can'#039't evaluate constant expression'#000+
+  '04011_E_Can'#039't evaluate consta','nt expression'#000+
   '04012_E_Set elements are not compatible'#000+
   '04013_E_Operation not implemented for sets'#000+
-  '04014_W_Automatic ty','pe conversion from floating 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+
+  '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_Ca','n'#039't read or write variables of this type'#000+
+  '04018_E_Can'#039't read or write variables of this type'#000+
   '04019_E_Can'#039't use readln or writeln on typed file'#000+
-  '04020_E_Can'#039't use read or write on untyped file.'#000+
+  '04020_E_Can'#039't use read or write ','on untyped file.'#000+
   '04021_E_Type conflict between set elements'#000+
-  '04022_W_lo/hi(dword/qword) returns the upper/lower word/d','word'#000+
+  '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
   '04023_E_Integer or real expression expected'#000+
   '04024_E_Wrong type "$1" in array constructor'#000+
-  '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
+  '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_Il','legal constant passed to internal math function'#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+
+  '04029_E_Argument can',#039't be assigned to'#000+
   '04030_E_Can'#039't assign local procedure/function to procedure variabl'+
   'e'#000+
-  '04031_E_Can'#039't assign values to ','an address'#000+
+  '04031_E_Can'#039't assign values to an address'#000+
   '04032_E_Can'#039't assign values to const variable'#000+
   '04033_E_Array type required'#000+
-  '04034_E_interface type expected, but got "$1"'#000+
+  '04034_E_interface type expected, but g','ot "$1"'#000+
   '04035_H_Mixing signed expressions and longwords gives a 64bit result'#000+
-  '04036_W_Mixing signed expressions and ca','rdinals here may cause a ran'+
-  'ge check error'#000+
+  '04036_W_Mixing signed expressions and cardinals here may cause a range'+
+  ' check error'#000+
   '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
-  '04038_E_enums with assignments can'#039't be used as array index'#000+
+  '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 ty','pes "$1" and "$2" are not related'#000+
+  '04040_W_Class types "$1" and "$2" are not related'#000+
   '04041_E_Class or interface type expected, but got "$1"'#000+
-  '04042_E_Type "$1" is not completely defined'#000+
+  '04042_E_Type "$1" is not completel','y defined'#000+
   '04043_W_String literal has more characters than short string length'#000+
-  '04044_W_Comparison might be always fals','e due to range of constant an'+
-  'd expression'#000+
+  '04044_W_Comparison might be always false due to range of constant and '+
+  'expression'#000+
   '04045_W_Comparison might be always true due to range of constant and e'+
   'xpression'#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+
+  '0','4046_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 error'#000+
-  '04049_H_Type size mismatch, possible loss of data / range check error'#000+
+  '04049_H_Type size mismatch, possible loss of d','ata / range check erro'+
+  'r'#000+
   '04050_E_The address of an abstract method can'#039't be taken'#000+
-  '04051_E_Assignments to formal parame','ters and open arrays are not pos'+
-  'sible'#000+
+  '04051_E_Assignments to formal parameters and open arrays are not possi'+
+  'ble'#000+
   '04052_E_Constant Expression expected'#000+
-  '04053_E_Operation "$1" not supported for types "$2" and "$3"'#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 po','rtable'#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+
+  '04057_E_Can'#039't determine which overloaded function t','o 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+
+  'nt, 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+
+  '04061_E_Constant packed arra','ys are not yet supported'#000+
   '04062_E_Incompatible type for arg no. $1: Got "$2" expected "(Bit)Pack'+
   'ed Array"'#000+
-  '04063_E_Inco','mpatible type for arg no. $1: Got "$2" expected "(not pa'+
-  'cked) Array"'#000+
-  '04064_E_Elements of packed arrays cannot be of a type which need to be'+
-  ' initialised'#000+
+  '04063_E_Incompatible type for arg no. $1: Got "$2" expected "(not pack'+
+  'ed) Array"'#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+}, s'+
-  'uggest typecast'#000+
+  '04066_W_Arithmetic "$1" on untyped pointer is unportable to {$T+}, sug'+
+  'gest 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+
+  '04','077_E_Can'#039't export subroutine marked as local from a unit'#000+
   '04078_E_Type is not automatable: "$1"'#000+
-  '04079_H_Converting th','e 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'+
+  '04079_H_Converting the operands to "$1" before doing the add could pre'+
+  'vent overflow errors.'#000+
+  '04080_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'+
   'd prevent overflow errors.'#000+
-  '04081_H_Converting the operands to "$1" before doing the multiply coul'+
-  'd ','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+
+  'parison results and range er','rors, use an unsigned type instead.'#000+
   '04083_E_Interface type $1 has no valid GUID'#000+
   '04084_E_Invalid selector name "$1"'#000+
-  '04','085_E_Expected Objective-C method, but got $1'#000+
+  '04085_E_Expected Objective-C method, but got $1'#000+
   '04086_E_Expected Objective-C method or constant method name'#000+
-  '04087_E_No type info available for this type'#000+
+  '04087_E_No type i','nfo available for this type'#000+
   '04088_E_Ordinal or string expression expected'#000+
   '04089_E_String expression expected'#000+
-  '04090_W_','Converting 0 to NIL'#000+
+  '04090_W_Converting 0 to NIL'#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+
+  '04092_E_The type "$1" is not supported for int','eraction with the Obje'+
+  'ctive-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+
-  '04096_E_Type parameters of specializations of generics cannot referenc'+
-  'e the currently specialized type'#000+
-  '04097_E_Type parameter','s are not allowed on non-generic class/record/'+
-  'object procedure or function'#000+
-  '04098_E_Generic declaration of "$1" differs from previous declaration'#000+
+  '04096_E_','Type parameters of specializations of generics cannot refere'+
+  'nce the currently specialized type'#000+
+  '04097_E_Type parameters are not allowed on non-generic class/record/ob'+
+  'ject procedure or function'#000+
+  '04098_E_Generic declaration of "$1" differs from',' previous declaratio'+
+  'n'#000+
   '04099_E_Helper type expected'#000+
   '04100_E_Record type expected'#000+
-  '04101_E_Derived class helper must ext','end a subclass of "$1" or the c'+
-  'lass itself'#000+
+  '04101_E_Derived class helper must extend a subclass of "$1" or the cla'+
+  'ss itself'#000+
   '04102_E_Derived record or type helper must extend "$1"'#000+
-  '04103_E_Invalid assignment, procedures return no value'#000+
+  '04103_E_Invalid assignmen','t, procedures return no value'#000+
   '04104_W_Implicit string type conversion from "$1" to "$2"'#000+
-  '04105_W_Implicit string type ','conversion with potential data loss fro'+
-  'm "$1" to "$2"'#000+
+  '04105_W_Implicit string type conversion with potential data loss from '+
+  '"$1" to "$2"'#000+
   '04106_-W_Explicit string typecast from "$1" to "$2"'#000+
-  '04107_-W_Explicit string typecast with potential data loss from "$1" t'+
-  'o "$2"'#000+
+  '04107_-W_Explicit',' string typecast with potential data loss from "$1"'+
+  ' to "$2"'#000+
   '04108_W_Unicode constant cast with potential data loss'#000+
-  '04','109_E_range check error while evaluating constants ($1 must be bet'+
+  '04109_E_range check error while evaluating constants ($1 must be betwe'+
+  'en $2 and $3)'#000+
+  '04110_W_range check error while evaluatin','g constants ($1 must be bet'+
   'ween $2 and $3)'#000+
-  '04110_W_range check error while evaluating constants ($1 must be betwe'+
-  'en $2 and $3)'#000+
   '04111_E_This type is not supported for the Default() intrinsic'#000+
-  '04112_E_JVM',' virtual class methods cannot be static'#000+
+  '04112_E_JVM virtual class methods cannot be static'#000+
   '04113_E_Final (class) fields can only be assigned in their class'#039' '+
-  '(class) constructor'#000+
+  '(class) construct','or'#000+
   '04114_E_It is not possible to typecast untyped parameters on managed p'+
-  'latforms, simply assign a value to them inst','ead.'#000+
+  'latforms, simply assign a value to them instead.'#000+
   '04115_E_The assignment side of an expression cannot be typecasted to a'+
   ' supertype on managed platforms'#000+
-  '04116_-W_The interface method "$1" raises the visibility of "$2" to pu'+
-  'blic when accessed via an interface instance'#000+
-  '04117_E_The interf','ace method "$1" has a higher visibility (public) t'+
-  'han "$2"'#000+
+  '04116_-W_The int','erface method "$1" raises the visibility of "$2" to '+
+  'public when accessed via an interface instance'#000+
+  '04117_E_The interface method "$1" has a higher visibility (public) tha'+
+  'n "$2"'#000+
   '04118_E_TYPEOF can only be used on object types with VMT'#000+
-  '04119_E_It is not possible to define a default value for a parameter o'+
-  'f type "$1"'#000+
-  '04120_E_Type "$1" cannot be extended by a ','type helper'#000+
+  '04119_E','_It is not possible to define a default value for a parameter'+
+  ' of type "$1"'#000+
+  '04120_E_Type "$1" cannot be extended by a type helper'#000+
   '05000_E_Identifier not found "$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+
+  '0','5003_H_Identifier already defined in $1 at line $2'#000+
   '05004_E_Unknown identifier "$1"'#000+
-  '05005_E_Forward declaration not so','lved "$1"'#000+
+  '05005_E_Forward declaration not solved "$1"'#000+
   '05007_E_Error in type definition'#000+
   '05009_E_Forward type not resolved "$1"'#000+
-  '05010_E_Only static variables can be used in static methods or outside'+
-  ' methods'#000+
+  '05010_E_Only static variables can be used',' in static methods or outsi'+
+  'de methods'#000+
   '05012_E_Record or object or class type expected'#000+
-  '05013_E_Instances of classes or',' objects with an abstract method are '+
-  'not allowed'#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+
+  '050','16_E_Illegal label declaration'#000+
   '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
   '05018_E_Label not found'#000+
-  '0501','9_E_identifier isn'#039't a label'#000+
+  '05019_E_identifier isn'#039't a label'#000+
   '05020_E_label already defined'#000+
   '05021_E_illegal type declaration of set elements'#000+
-  '05022_E_Forward class definition not resolved "$1"'#000+
+  '05022_E_Forward',' class definition not resolved "$1"'#000+
   '05023_H_Unit "$1" not used in $2'#000+
   '05024_H_Parameter "$1" not used'#000+
-  '05025_N_Local va','riable "$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 ne','ver used'#000+
   '05028_H_Local $1 "$2" is not used'#000+
   '05029_N_Private field "$1.$2" is never used'#000+
-  '05030_N_Private field "$1.$2" ','is assigned but never used'#000+
+  '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+
+  '05033_W_Function result does',' not seem to be set'#000+
   '05034_W_Type "$1" is not aligned correctly in current record for C'#000+
-  '05035_E_Unknown record field i','dentifier "$1"'#000+
+  '05035_E_Unknown record field identifier "$1"'#000+
   '05036_W_Local variable "$1" does not seem to be initialized'#000+
-  '05037_W_Variable "$1" does not seem to be initialized'#000+
+  '05037_W_Variable "$1" does not seem to be initia','lized'#000+
   '05038_E_identifier idents no member "$1"'#000+
   '05039_H_Found declaration: $1'#000+
   '05040_E_Data element too large'#000+
-  '05042_E_N','o matching implementation for interface method "$1" found'#000+
+  '05042_E_No matching implementation for interface method "$1" found'#000+
   '05043_W_Symbol "$1" is deprecated'#000+
-  '05044_W_Symbol "$1" is not portable'#000+
+  '05044_W_Symbol "$1" is not port','able'#000+
   '05055_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+
+  '05057_H_Local variable "$1" does not seem to be initialized'#000+
   '05058_H_Variable "$1" does not seem to be initialized'#000+
-  '05059_W_Function result variable does not seem to initialized'#000+
+  '05059_W_Function result variable d','oes not seem to initialized'#000+
   '05060_H_Function result variable does not seem to be initialized'#000+
-  '05061_W_Variable "$1" re','ad but nowhere assigned'#000+
+  '05061_W_Variable "$1" read but nowhere assigned'#000+
   '05062_H_Found abstract method: $1'#000+
   '05063_W_Symbol "$1" is experimental'#000+
-  '05064_W_Forward declaration "$1" not resolved, assumed external'#000+
+  '05064_W_Forward declaration "','$1" not resolved, assumed external'#000+
   '05065_W_Symbol "$1" is belongs to a library'#000+
-  '05066_W_Symbol "$1" is deprecated: "$2','"'#000+
+  '05066_W_Symbol "$1" is deprecated: "$2"'#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 find a "Current" property in enumerator "$1"'#000+
-  '05070_E_Mismatch between number of declared parameters and number o','f'+
-  ' colons in message string.'#000+
+  '05069_E_Ca','nnot find 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_Private const "$1.$2" never used'#000+
-  '05073_N_Private property "$1.$2" never used'#000+
+  '05073_N_Privat','e property "$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+
+  '05076_W_Unit "$1" is not portable'#000+
   '05077_W_Unit "$1" is belongs to a library'#000+
   '05078_W_Unit "$1" is not implemented'#000+
-  '05079_W_Unit "$1" is experimental'#000+
+  '05079_W_Unit "$1" is experi','mental'#000+
   '05080_E_No complete definition of the formally declared class "$1" is '+
   'in scope'#000+
-  '05081_E_Gotos into initializati','on or finalization blocks of units ar'+
-  'e not allowed'#000+
+  '05081_E_Gotos into initialization or finalization blocks of units are '+
+  'not allowed'#000+
   '05082_E_Invalid external name "$1" for formal class "$2"'#000+
-  '05083_E_Complete class definition with external name "$1" here'#000+
-  '05084_W_Possible library conflict: symbol "$1" from library "$2" also',
-  ' found in library "$3"'#000+
+  '05083_E_Complet','e class definition with external name "$1" here'#000+
+  '05084_W_Possible library conflict: symbol "$1" from library "$2" also '+
+  'found in library "$3"'#000+
   '05085_E_Cannot add implicit constructor '#039'Create'#039' because ident'+
   'ifier already used by "$1"'#000+
-  '05086_E_Cannot generate default constructor for class, because parent '+
-  'has no parameterless constructor'#000+
-  '05087_D_Adding helper for',' $1'#000+
+  '05086_E_Can','not generate default constructor for class, because paren'+
+  't has no parameterless constructor'#000+
+  '05087_D_Adding helper for $1'#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+
+  '06013_E_The use of a far poin','ter isn'#039't allowed there'#000+
   '06015_E_EXPORT declared functions can'#039't be called'#000+
-  '06016_W_Possible illegal call of constructo','r or destructor'#000+
+  '06016_W_Possible illegal call of constructor or destructor'#000+
   '06017_N_Inefficient code'#000+
   '06018_W_unreachable code'#000+
   '06020_E_Abstract methods can'#039't be called directly'#000+
-  '06027_DL_Register $1 weight $2 $3'#000+
+  '06027_D','L_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_P','rocvar calls cannot be inline.'#000+
+  '06032_E_Procvar calls cannot be inline.'#000+
   '06033_E_No code for inline procedure stored'#000+
-  '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
-  'sed, use (set)length instead'#000+
+  '06035_E_Element zero of an ansi/wide- or longstr','ing can'#039't be acc'+
+  'essed, use (set)length instead'#000+
   '06037_E_Constructors or destructors cannot be called inside a '#039'wit'+
-  'h'#039' c','lause'#000+
+  'h'#039' clause'#000+
   '06038_E_Cannot call message handler methods directly'#000+
   '06039_E_Jump in or outside of an exception block'#000+
-  '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
+  '06040_E_Control',' flow statements aren'#039't allowed in a finally bloc'+
+  'k'#000+
   '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
-  '06042_W_Lo','cal variable size exceed 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+
+  '06044_E_BREAK not all','owed'#000+
   '06045_E_CONTINUE not allowed'#000+
   '06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+
   'me library.'#000+
-  '0','6047_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+
+  '06047_F_Cannot find system type "$1". Check if you use the correct run'+
+  ' time library.'#000+
+  '06048_H_Inherited call to abstract meth','od 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'+
-  'rect run time library.'#000+
+  '06050_F_Cannot find type "$1" in unit "$2". Check if you use the corre'+
+  'ct run time library.'#000+
   '06051_E_Interprocedural gotos are allowed only to outer subroutines'#000+
-  '06052_E_Label must be defined in the same scope as it is declared'#000+
-  '06053_E_Leaving procedures containing explicit or implicit exceptio','n'+
-  's frames using goto is not allowed'#000+
+  '06052_E_Label mu','st be defined in the same scope as it is declared'#000+
+  '06053_E_Leaving procedures containing explicit or implicit exceptions '+
+  'frames using goto is not allowed'#000+
   '06054_E_In ISO mode, the mod operator is defined only for positive quo'+
   'tient'#000+
-  '06055_DL_Auto inlining: $1'#000+
+  '06055_DL_Au','to inlining: $1'#000+
   '07000_DL_Starting $1 styled assembler parsing'#000+
   '07001_DL_Finished $1 styled assembler parsing'#000+
-  '07002_E_N','on-label pattern contains @'#000+
+  '07002_E_Non-label pattern contains @'#000+
   '07004_E_Error building record offset'#000+
   '07005_E_OFFSET used without identifier'#000+
-  '07006_E_TYPE used without identifier'#000+
+  '07006_E_TYPE used w','ithout identifier'#000+
   '07007_E_Cannot use local variable or parameters here'#000+
   '07008_E_need to use OFFSET here'#000+
-  '07009_E_need t','o use $ here'#000+
+  '07009_E_need to use $ here'#000+
   '07010_E_Cannot use multiple relocatable symbols'#000+
   '07011_E_Relocatable symbol can only be added'#000+
-  '07012_E_Invalid constant expression'#000+
+  '07012_E_Invalid c','onstant expression'#000+
   '07013_E_Relocatable symbol is not allowed'#000+
   '07014_E_Invalid reference syntax'#000+
-  '07015_E_You cannot reac','h $1 from that code'#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+
+  '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+
+  '07020_E_Multiple index register usage'#000+
   '07021_E_Invalid operand type'#000+
   '07022_E_Invalid string as opcode operand: $1'#000+
   '07023_W_@CODE and @DATA not supported'#000+
-  '07024_E_Null label references are not allowed'#000+
+  '0702','4_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+
+  '07027_E_escape sequence ignored: $1'#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+
+  '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+
+  '07032_W_Calling an overload function in assembler'#000+
   '07033_E_Unsupported symbol type for operand'#000+
   '07034_E_Constant value out of bounds'#000+
-  '07035_E_Error converting decimal $1'#000+
+  '07035_E_Er','ror converting decimal $1'#000+
   '07036_E_Error converting octal $1'#000+
   '07037_E_Error converting binary $1'#000+
-  '07038_E_Error converti','ng hexadecimal $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+
+  '07041_E_Cannot use SELF ou','tside 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+
+  '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+
+  '07046_W_Size suffix and dest','ination or source size do not match'#000+
   '07047_E_Assembler syntax error'#000+
-  '07048_E_Invalid combination of opcode and operands',#000+
+  '07048_E_Invalid combination of opcode and operands'#000+
   '07049_E_Assembler syntax error in operand'#000+
   '07050_E_Assembler syntax error in constant'#000+
   '07051_E_Invalid String expression'#000+
-  '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
+  '070','52_W_constant with symbol $1 for address which is not on a pointe'+
+  'r'#000+
   '07053_E_Unrecognized opcode $1'#000+
-  '07054_E_Invalid or ','missing opcode'#000+
+  '07054_E_Invalid or missing opcode'#000+
   '07055_E_Invalid combination of prefix and opcode: $1'#000+
-  '07056_E_Invalid combination of override and opcode: $1'#000+
+  '07056_E_Invalid combination of override 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+
+  '07061_E_Undefined local symbol $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_Invalid 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+
+  '07068_E_Invalid floating point expression'#000+
   '07069_E_Wrong symbol type'#000+
   '07070_E_Cannot index a local var or parameter with a register'#000+
-  '07071_E_Invalid segment override expression'#000+
+  '07071_E_Invalid segment ','override expression'#000+
   '07072_W_Identifier $1 supposed external'#000+
   '07073_E_Strings not allowed as constants'#000+
-  '07074_E_No type ','of variable specified'#000+
+  '07074_E_No type of variable specified'#000+
   '07075_E_assembler code not returned to text section'#000+
   '07076_E_Not a directive or local symbol $1'#000+
-  '07077_E_Using a defined name as a local label'#000+
+  '07077_','E_Using a defined name as a local label'#000+
   '07078_E_Dollar token is used without an identifier'#000+
-  '07079_W_32bit constant cre','ated for address'#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+
+  '07081_E_Can'#039't access fields directly for parame','ters'#000+
   '07082_E_Can'#039't access fields of objects/classes directly'#000+
-  '07083_E_No size specified and unable to determine the si','ze of the op'+
-  'erands'#000+
+  '07083_E_No size specified and unable to determine the size of the oper'+
+  'ands'#000+
   '07084_E_Cannot use RESULT in this function'#000+
-  '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
+  '07086_W_"$1" without operand translated into "$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+
+  '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+
-  '07095_E_Invalid reglist for movem'#000+
+  '07095','_E_Invalid reglist for movem'#000+
   '07096_E_Reglist invalid for opcode'#000+
   '07097_E_Higher cpu mode required ($1)'#000+
-  '07098_W_No size',' specified and unable to determine the size of the op'+
-  'erands, using DWORD as default'#000+
-  '07099_E_Syntax error while trying to parse a shifter operand'#000+
+  '07098_W_No size specified and unable to determine the size of the oper'+
+  'ands, using DWORD as default'#000+
+  '07099_E_Syntax error while trying to pa','rse a shifter operand'#000+
   '07100_E_Address of packed component is not at a byte boundary'#000+
-  '07101_W_No size specified and una','ble to determine the size of the op'+
-  'erands, using BYTE as default'#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+
-  '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 a'+
-  'ccess'#000+
+  '0','7103_W_Use of +offset(%ebp) is not compatible with regcall conventi'+
+  'on'#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+
-  '07107_E_Generating PIC, but reference is not',' PIC-safe'#000+
+  '07106_E_VMTOffset mu','st 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 be of the same kind and w'+
   'idth'#000+
-  '07109_E_A register set cannot be empty'#000+
+  '07109_E_A register set cannot be empty',#000+
   '07110_W_@GOTPCREL is useless and potentially dangereous for local symb'+
   'ols'#000+
-  '07111_W_Constant with general purpose segm','ent register'#000+
+  '07111_W_Constant with general purpose segment register'#000+
   '07112_E_Invalid offset value for $1'#000+
   '07113_E_Invalid register for $1'#000+
-  '07114_E_SEH directives are allowed only in pure assembler procedures'#000+
+  '07114_E_SEH directives are allowed only in',' pure assembler procedures'+
+  #000+
   '07115_E_Directive "$1" is not supported for the current target'#000+
-  '07116_E_This function'#039's res','ult location cannot be encoded direct'+
-  'ly in a single operand when "nostackframe" is used'#000+
-  '07117_E_GOTPCREL references in Intel assembler syntax cannot contain a'+
-  ' base or index register, and their offset must 0.'#000+
-  '07118_E_The current target does ','not support GOTPCREL relocations'#000+
+  '07116_E_This function'#039's result location cannot be encoded directly'+
+  ' in a single operand when "nostackframe" is used'#000+
+  '07117_E_GOTPCREL references in Inte','l assembler syntax cannot contain'+
+  ' a base or index register, and their offset must 0.'#000+
+  '07118_E_The current target does not support GOTPCREL relocations'#000+
   '07119_W_Exported/global symbols should accessed via the GOT'#000+
-  '07120_W_Check size of memory operand "$1"'#000+
+  '07120_W_Check size of memory o','perand "$1"'#000+
   '07121_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
   'ts, but expected [$3 bits]"'#000+
-  '07122_W','_Check size of memory operand "$1: memory-operand-size is $2 '+
-  'bits, but expected [$3 bits + $4 byte offset]"'#000+
-  '07123_W_Check "$1: offset of memory operand is negative "$2 byte"'#000+
-  '07124_W_Check "$1: size of memory operand is empty, but es exists ','di'+
-  'fferent definitions of the memory size =>> map to $2 (smallest option)'+
-  '"'#000+
-  '07125_E_Invalid register used in memory reference expression: "$1"'#000+
+  '07122_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
+  'ts, but expected [$3 bits + $4 byte offset]"'#000+
+  '07123_W_Check "','$1: offset of memory operand is negative "$2 byte"'#000+
+  '07124_W_Check "$1: size of memory operand is empty, but es exists diff'+
+  'erent definitions of the memory size =>> map to $2 (smallest option)"'#000+
+  '07125_E_Invalid register used in memory reference',' expression: "$1"'#000+
   '08000_F_Too many assembler files'#000+
   '08001_F_Selected assembler output not supported'#000+
-  '08002_F_Comp not s','upported'#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+
+  '08005_F_No',' binary writer selected'#000+
   '08006_E_Asm: Opcode $1 not in table'#000+
-  '08007_E_Asm: $1 invalid combination of opcode and operand','s'#000+
+  '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08008_E_Asm: 16 Bit references not supported'#000+
   '08009_E_Asm: Invalid effective address'#000+
-  '08010_E_Asm: Immediate or reference expected'#000+
+  '08010_E_Asm: Immediate or reference e','xpected'#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 lab','el $1'#000+
+  '08013_E_Asm: Undefined label $1'#000+
   '08014_E_Asm: Comp type not supported for this target'#000+
   '08015_E_Asm: Extended type not supported for this target'#000+
-  '08016_E_Asm: Duplicate label $1'#000+
+  '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 registe','r $1'#000+
+  '08019_E_Asm: Invalid register $1'#000+
   '08020_E_Asm: 16 or 32 Bit references not supported'#000+
   '08021_E_Asm: 64 Bit operands not supported'#000+
-  '08022_E_Asm: AH,BH,CH or DH cannot be used in an instruction requiring'+
-  ' REX prefix'#000+
+  '08022_E_Asm: AH,BH,CH or',' DH cannot be used in an instruction requiri'+
+  'ng REX prefix'#000+
   '08023_E_Missing .seh_endprologue directive'#000+
-  '08024_E_Function',' prologue exceeds 255 bytes'#000+
+  '08024_E_Function prologue exceeds 255 bytes'#000+
   '08025_E_.seh_handlerdata directive without preceding .seh_handler'#000+
-  '08026_F_Relocation count for section $1 exceeds 65535'#000+
+  '08026_F_Relocation count for ','section $1 exceeds 65535'#000+
   '09000_W_Source operating system redefined'#000+
   '09001_I_Assembling (pipe) $1'#000+
-  '09002_E_Can'#039't create ','assembler file: $1'#000+
+  '09002_E_Can'#039't create assembler file: $1'#000+
   '09003_E_Can'#039't create object file: $1 (error code: $2)'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
-  '09005_E_Assembler $1 not found, switching to external assembling'#000+
+  '09005_E_Asse','mbler $1 not found, switching to external assembling'#000+
   '09006_T_Using assembler: $1'#000+
-  '09007_E_Error while assembling exitc','ode $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 smartlinking $1'#000+
+  '09010_I_Assembling',' with smartlinking $1'#000+
   '09011_W_Object $1 not found, Linking may fail !'#000+
-  '09012_W_Library $1 not found, Linking may fail ','!'#000+
+  '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, switching to external linking'#000+
+  '09016_E_Util ','$1 not found, switching to external linking'#000+
   '09017_T_Using util $1'#000+
   '09018_E_Creation of Executables not supported'#000+
-  '09019','_E_Creation of Dynamic/Shared Libraries not supported'#000+
+  '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
   '09020_I_Closing script $1'#000+
-  '09021_E_resource compiler "$1" not found, switching to external mode'#000+
+  '09021_E_resource compiler "$1" not found, s','witching to external mode'+
+  #000+
   '09022_I_Compiling resource $1'#000+
-  '09023_T_unit $1 can'#039't be statically linked, switching to smar','t l'+
-  'inking'#000+
+  '09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
+  'king'#000+
   '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
   #000+
-  '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
-  'g'#000+
+  '09025_T_unit $1 can'#039't be shared linked, switch','ing to static link'+
+  'ing'#000+
   '09026_E_unit $1 can'#039't be smart or static linked'#000+
-  '09027_E_unit $1 can'#039't be shared or static linke','d'#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 extern'+
-  'al mode'#000+
+  '09030_E_Can'#039't ca','ll the resource compiler "$1", switching to exte'+
+  'rnal mode'#000+
   '09031_E_Can'#039't open resource file "$1"'#000+
-  '09032_E_Can'#039't write r','esource file "$1"'#000+
+  '09032_E_Can'#039't write resource file "$1"'#000+
   '09033_N_File "$1" not found for backquoted cat command'#000+
-  '09034_W_"$1" not found, this will probably cause a linking failure'#000+
+  '09034_W_"$1" not found, this will probably cause a',' linking failure'#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 b','ytes'#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+
-  '09133_X_Stack space reserved: $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_Obje','ct file "$1" contains 32-bit absolute relocation to symb'+
-  'ol "$2".'#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+
+  '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 Invali','d Header (no PPU at the 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+
-  '10010_U_PPU is compiled for another target'#000+
+  '10010_U_PPU is ','compiled for another 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 read','ing 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+
   '10017_F_PPU Dbx count problem'#000+
-  '10018_E_Illegal unit name: $1'#000+
+  '10018_E_Il','legal 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 un','it $1, no sources available'#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+
-  '10024_F_Unit $1 searched but $2 found'#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 compi','ling module, stopping'#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+
-  '10029_U_Recompiling $1, source found only'#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 li','b is older than ppufile'#000+
+  '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
-  '10033_U_Recompiling unit, obj is older than asm'#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+
+  '10037_U_PPU Check file $1 time $2'#000+
   '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
-  '10041_U_File $1 is newer than the one used for creating PPU file $2'#000+
+  '10041_U_File $1 is newer than ','the one used for creating 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+
+  '10043_U_Loading interface units from $1'#000+
   '10044_U_Loading implementation units from $1'#000+
   '10045_U_Interface CRC changed for unit $1'#000+
-  '10046_U_Implementation CRC changed for unit $1'#000+
+  '1','0046_U_Implementation CRC changed for unit $1'#000+
   '10047_U_Finished compiling unit $1'#000+
-  '10048_U_Adding dependency: $1 depend','s on $2'#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+
-  '10052_U_Forced reloading'#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_Loa','ding unit $1'#000+
+  '10055_U_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+
-  '10059_U_Skipping re-resolving unit $1, still loading used units'#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 c','ompiled using a different whole program optimiz'+
-  'ation feedback input ($2, $3); recompile it without 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+
+  '10061_E_Unit $1 was compiled using a different whole program optimizat'+
+  'ion feedback input ($2, $3); recompile it without wpo or use the same '+
+  'wpo ','feedback input file for this compilation invocation'#000+
+  '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+
   '10063_U_PPU is compiled for another i8086 memory model'#000+
   '11000_O_$1 [options] <inputfile> [options]'#000+
-  '11001_W_Only one source file supported, changing source file to compil'+
-  'e from "$1" into "$2"'#000+
-  '11002_W_DEF file can be created only for OS/2'#000,
+  '11001_W_Only one sour','ce 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_No option inside $1 config file'#000+
+  '11005_N_No option inside $1 con','fig file'#000+
   '11006_E_Illegal parameter: $1'#000+
   '11007_H_-? writes help pages'#000+
   '11008_F_Too many config files nested'#000+
-  '11009_F_Unab','le to open file $1'#000+
+  '11009_F_Unable to open file $1'#000+
   '11010_D_Reading further options from $1'#000+
   '11011_W_Target is already set to: $1'#000+
-  '11012_W_Shared libs not supported on DOS platform, reverting to static'+
-  #000+
+  '11012_W_Shared libs not sup','ported on DOS platform, reverting to stat'+
+  'ic'#000+
   '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+
-  'nte','red'#000+
+  'ntered'#000+
   '11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+
   'tered'#000+
-  '11015_F_Open conditional at the end of the options file'#000+
+  '11015_F_Open conditional at the end of the ','options file'#000+
   '11016_W_Debug information generation is not supported by this executab'+
   'le'#000+
-  '11017_H_Try recompiling with -d','GDB'#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+
-  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000,
+  '11020_N_Switch','ing assembler to default source writing assembler'#000+
+  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
   '11022_W_"$1" assembler use forced'#000+
   '11026_T_Reading options from file $1'#000+
   '11027_T_Reading options from environment $1'#000+
-  '11028_D_Handling option "$1"'#000+
+  '11028_D_','Handling option "$1"'#000+
   '11029_O_*** press enter ***'#000+
   '11030_H_Start of reading config file $1'#000+
-  '11031_H_End of reading confi','g 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_interpreting file option "$1"'#000+
+  '11033_D_interpreting file option "$1"',#000+
   '11034_D_Reading config file "$1"'#000+
   '11035_D_found source file name "$1"'#000+
   '11039_E_Unknown codepage "$1"'#000+
-  '11040_F_Config fi','le $1 is a directory'#000+
+  '11040_F_Config file $1 is a directory'#000+
   '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
   '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 with','out'+
-  ' \var{\#IF(N)DEF} found'#000+
+  '11042_W_Use of p','pc386.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 platform'#000+
-  '11045_F_The feature "$1" is not, or not yet, supported on the selected'+
-  ' target platform'#000+
-  '11046_N_DWARF debug information cannot be use','d with smart linking on'+
-  ' this target, switching to static linking'#000+
-  '11047_W_Option "$1" is ignored for the current target platform.'#000+
+  '11045_F_The fea','ture "$1" is not, or not yet, supported 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 current target plat','form.'#000+
   '11048_W_Disabling external debug information because it is unsupported'+
-  ' for the selected target/debug format com','bination.'#000+
+  ' for the selected target/debug format combination.'#000+
   '11049_N_DWARF debug information cannot be used with smart linking with'+
-  ' external assembler, disabling static library creation.'#000+
+  ' external assembler, disabling static libra','ry creation.'#000+
   '11050_E_Invalid value for MACOSX_DEPLOYMENT_TARGET environment variabl'+
   'e: $1'#000+
-  '11051_E_Invalid value for IP','HONEOS_DEPLOYMENT_TARGET environment var'+
-  'iable: $1'#000+
+  '11051_E_Invalid value for IPHONEOS_DEPLOYMENT_TARGET environment varia'+
+  'ble: $1'#000+
   '11052_E_You must use a FPU type of VFPV2, VFPV3 or VFPV3_D16 when usin'+
-  'g the EABIHF ABI target'#000+
+  'g t','he EABIHF ABI target'#000+
   '11053_W_The selected debug format is not supported on the current targ'+
-  'et, not changing the curre','nt setting'#000+
+  'et, not changing the current setting'#000+
   '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
-  '12001_D_Processing whole program optimization information in wpo feedb'+
-  'ack file "$1"'#000+
+  '12001_D_Processing whole program optimization ','information in wpo fee'+
+  'dback file "$1"'#000+
   '12002_D_Finished processing the whole program optimization information'+
-  ' in wpo f','eedback file "$1"'#000+
+  ' 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 "'+
-  '$2" at line $1 of wpo feedback file, ignoring'#000+
-  '12005_D_Found whole program ','optimization section "$1" with informati'+
-  'on about "$2"'#000+
-  '12006_F_The selected whole program optimizations require a previously '+
-  'generated feedback file (use -Fw to specify)'#000+
+  '12004_W_No handler register','ed for whole program optimization 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 require a previously',
+  ' generated feedback file (use -Fw to specify)'#000+
   '12007_E_No collected information necessary to perform "$1" whole progr'+
-  'a','m optimization found'#000+
+  'am optimization found'#000+
   '12008_F_Specify a whole program optimization feedback file to store th'+
-  'e generated info in (using -FW)'#000+
+  'e generated info in (using -FW)'#000,
   '12009_E_Not generating any whole program optimization information, yet'+
   ' a feedback file was specified (using -FW)'#000+
-  '1201','0_E_Not performing any whole program optimizations, yet an input'+
-  ' feedback file was specified (using -Fw)'#000+
-  '12011_D_Skipping whole program optimization section "$1", because not '+
-  'needed by the requested optimizations'#000+
-  '12012_W_Overriding previous','ly read information for "$1" from feedbac'+
-  'k input file using information in section "$2"'#000+
-  '12013_E_Cannot extract symbol liveness information from program when s'+
-  'tripping symbols, use -Xs-'#000+
-  '12014_E_Cannot extract symbol liveness information from',' program when'+
-  ' when not linking'#000+
+  '12010_E_Not performing any whole program optimizations, yet an input f'+
+  'eedback file was specified (using -Fw)'#000+
+  '12011_D_Skipping w','hole program optimization section "$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 extract symbol liven','ess information from program when'+
+  ' 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 from linked program'#000+
+  'n from linked program'#000,
   '12016_E_Error during reading symbol liveness information produced by "'+
   '$1"'#000+
-  '12017_F_Error executing "$1" (exitcode: $2)',' to extract symbol inform'+
-  'ation from linked program'#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 only help when u'+
-  'sing smart linking, use -CX -XX'#000+
+  'si','ng smart linking, use -CX -XX'#000+
   '12019_E_Cannot create specified whole program optimisation feedback fi'+
   'le "$1"'#000+
-  '11023_Fre','e Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $F'+
-  'PCCPU'#010+
+  '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+
+  'CPU'#010+
   'Copyright (c) 1993-2013 by Florian Klaempfl and others'#000+
-  '11024_Free Pascal Compiler version $FPCVERSION'#010+
+  '110','24_Free Pascal Compiler version $FPCVERSION'#010+
   #010+
   'Compiler Date      : $FPCDATE'#010+
   'Compiler CPU Target: $FPCCPU'#010+
   #010+
-  'Supported ta','rgets:'#010+
+  'Supported targets:'#010+
   '  $OSTARGETS'#010+
   #010+
   'Supported CPU instruction sets:'#010+
   '  $INSTRUCTIONSETS'#010+
   #010+
   'Supported FPU instruction sets:'#010+
-  '  $FPUINSTRUCTIONSETS'#010+
+  '  $FPUINSTRUCTIONS','ETS'#010+
   #010+
   'Supported inline assembler modes:'#010+
   '  $ASMMODES'#010+
@@ -1213,403 +1219,403 @@
   '  $ABITARGETS'#010+
   #010+
   'Supported Optimizations:'#010+
-  '  ','$OPTIMIZATIONS'#010+
+  '  $OPTIMIZATIONS'#010+
   #010+
   'Supported Whole Program Optimizations:'#010+
   '  All'#010+
   '  $WPOPTIMIZATIONS'#010+
   #010+
   'Supported Microcontroller types:'#010+
-  '  $CONTROLLERTYPES'#010+
+  '  $CONTRO','LLERTYPES'#010+
   #010+
   'This program comes under the GNU General Public Licence'#010+
   'For more information read COPYING.v2'#010+
   #010+
-  'Please repor','t bugs in our bug tracker on:'#010+
+  'Please report bugs in our bug tracker on:'#010+
   '                 http://bugs.freepascal.org'#010+
   #010+
-  'More information may be found on our WWW pages (including directions'#010+
+  'More information may be found on our WWW pages (','including directions'+
+  #010+
   'for mailing lists useful for asking questions or discussing potential'#010+
   'new features, etc.):'#010+
-  '     ','            http://www.freepascal.org'#000+
+  '                 http://www.freepascal.org'#000+
   '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+
   'ble it'#010+
-  '**1a_The compiler doesn'#039't delete the generated assembler file'#010+
+  '**1a_The',' compiler doesn'#039't delete the generated assembler file'#010+
   '**2al_List sourcecode lines in assembler file'#010+
-  '**2an_List node i','nfo in assembler file (-dEXTDEBUG compiler)'#010+
+  '**2an_List node info in assembler file (-dEXTDEBUG compiler)'#010+
   '*L2ap_Use pipes instead of creating temporary assembler files'#010+
-  '**2ar_List register allocation/release info in assembler file'#010+
+  '**2ar_List regist','er allocation/release info in assembler file'#010+
   '**2at_List temp allocation/release info in assembler file'#010+
-  '**1A<x>_Output',' format:'#010+
+  '**1A<x>_Output format:'#010+
   '**2Adefault_Use default assembler'#010+
   '3*2Aas_Assemble using GNU AS'#010+
-  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using internal writer'#010+
+  '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using inter','nal writer'#010+
   '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
   '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
-  '3*2Anasmwin32_Win32 o','bject 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*2Anasmobj_Obj file using Nasm'#010+
+  '3*2Anasmobj_Ob','j 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*2Aelf_ELF (Linux) using internal writer'#010+
   '3*2Acoff_COFF (Go32v2) using internal writer'#010+
   '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
-  '4*2Aas_Assemble using GNU AS'#010+
+  '4*2Aas','_Assemble using GNU AS'#010+
   '4*2Agas_Assemble using GNU GAS'#010+
   '4*2Agas-darwin_Assemble darwin Mach-O64 using GNU GAS'#010+
-  '4*2Amasm_','Win64 object file using ml64 (Microsoft)'#010+
+  '4*2Amasm_Win64 object file using ml64 (Microsoft)'#010+
   '4*2Apecoff_PE-COFF (Win64) using internal writer'#010+
-  '4*2Aelf_ELF (Linux-64bit) using internal writer'#010+
+  '4*2Aelf_ELF (Linux-64bit) using i','nternal writer'#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_St','andard Motorola assembler'#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 GNU AS'#010+
-  '**1b_Generate browser info'#010+
+  '**1b_Gener','ate browser info'#010+
   '**2bl_Generate local symbol info'#010+
   '**1B_Build all modules'#010+
   '**1C<x>_Code generation options:'#010+
-  '**2C3_Turn ','on ieee error checking for constants'#010+
+  '**2C3_Turn on ieee error checking for constants'#010+
   '**2Ca<x>_Select ABI, see fpc -i for possible values'#010+
-  '**2Cb_Generate code for a big-endian variant of the target architectur'+
-  'e'#010+
+  '**2Cb_Generate code for a big-endi','an variant of the target architect'+
+  'ure'#010+
   '**2Cc<x>_Set default calling convention to <x>'#010+
-  '**2CD_Create also dynamic librar','y (not supported)'#010+
+  '**2CD_Create also dynamic library (not supported)'#010+
   '**2Ce_Compilation with emulated floating point opcodes'#010+
-  '**2Cf<x>_Select fpu instruction set to use, see fpc -i for possible va'+
-  'lues'#010+
+  '**2Cf<x>_Select fpu instruction set to use, see fp','c -i for possible '+
+  'values'#010+
   '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
-  '**2Cg_Generate PIC code',#010+
+  '**2Cg_Generate PIC code'#010+
   '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
   '**2Ci_IO-checking'#010+
-  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB'#010+
+  'A*2CI<x>_Select instruction set on ARM: ARM or THUMB',#010+
   '**2Cn_Omit linking stage'#010+
   'P*2CN_Generate nil-pointer checks (AIX-only)'#010+
   '**2Co_Check overflow of integer operations'#010+
-  '**2','CO_Check for possible overflow of integer operations'#010+
+  '**2CO_Check for possible overflow of integer operations'#010+
   '**2Cp<x>_Select instruction set, see fpc -i for possible values'#010+
-  '**2CP<x>=<y>_ packing settings'#010+
+  '**2CP<','x>=<y>_ packing settings'#010+
   '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
   'and 8'#010+
-  '**2Cr_Range chec','king'#010+
+  '**2Cr_Range checking'#010+
   '**2CR_Verify object method call validity'#010+
   '**2Cs<n>_Set stack checking size to <n>'#010+
-  '**2Ct_Stack checking (for testing only, see manual)'#010+
+  '**2Ct_Stack checking (for testing onl','y, see manual)'#010+
   '8*2CT<x>_Target-specific code generation options'#010+
   '3*2CT<x>_Target-specific code generation options'#010+
-  '4*2C','T<x>_Target-specific code generation options'#010+
+  '4*2CT<x>_Target-specific code generation options'#010+
   'p*2CT<x>_Target-specific code generation options'#010+
-  'P*2CT<x>_Target-specific code generation options'#010+
+  'P*2CT<x>_Target-specific code',' generation options'#010+
   'J*2CT<x>_Target-specific code generation options'#010+
-  'A*2CT<x>_Target-specific code generation options',#010+
+  'A*2CT<x>_Target-specific code generation options'#010+
   'p*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
   ' (AIX)'#010+
-  'P*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
-  ' (AIX)'#010+
+  'P*3CTsmalltoc_ Generate smaller TOCs at the e','xpense of execution spe'+
+  'ed (AIX)'#010+
   'J*3CTautogetterprefix=X_  Automatically create getters for properties '+
-  'with prefix X (','empty string disables)'#010+
+  'with prefix X (empty string disables)'#010+
   'J*3CTautosetterprefix=X_  Automatically create setters for properties '+
-  'with prefix X (empty string disables)'#010+
+  'with prefix X (empty string di','sables)'#010+
   '8*3CTcld_                 Emit a CLD instruction before using the x86 '+
   'string instructions'#010+
-  '3*3CTcld_          ','       Emit a CLD instruction before using the x8'+
+  '3*3CTcld_                 Emit a CLD instruction before using the x86 '+
+  'string instructions'#010+
+  '4*3CTcld_                 Emit a CLD instruction bef','ore using the x8'+
   '6 string instructions'#010+
-  '4*3CTcld_                 Emit a CLD instruction before using the x86 '+
-  'string instructions'#010+
   'J*3CTcompactintarrayinit_ Generate smaller (but potentially slower) co'+
-  'de for in','itializing integer array constants'#010+
+  'de for initializing integer array constants'#010+
   'J*3CTenumfieldinit_       Initialize enumeration fields in constructor'+
-  's to enumtype(0), after calling inherited constructors'#010+
+  's to enumtype(0), ','after calling inherited constructors'#010+
   'J*3CTinitlocals_          Initialize local variables that trigger a JV'+
-  'M bytecode',' verification error if used uninitialized (slows down code'+
-  ')'#010+
-  'J*3CTlowercaseprocstart_  Lowercase the first character of procedure/f'+
-  'unction/method names'#010+
+  'M bytecode verification error if used uninitialized (slows down code)'#010+
+  'J*3CTlowercaseprocstart_  Lowercase the first character of proc','edure'+
+  '/function/method names'#010+
   'A*3CTthumbinterworking_ Generate Thumb interworking-safe code if possi'+
   'ble'#010+
-  'J*2Cv_Var/out p','arameter copy-out checking'#010+
+  'J*2Cv_Var/out parameter copy-out checking'#010+
   '**2CX_Create also smartlinked library'#010+
   '**1d<x>_Defines the symbol <x>'#010+
   '**1D_Generate a DEF file'#010+
-  '**2Dd<x>_Set description to <x>'#010+
+  '**','2Dd<x>_Set description to <x>'#010+
   '**2Dv<x>_Set DLL version to <x>'#010+
   '*O2Dw_PM application'#010+
   '**1e<x>_Set path to executable'#010+
-  '**1','E_Same as -Cn'#010+
+  '**1E_Same as -Cn'#010+
   '**1fPIC_Same as -Cg'#010+
   '**1F<x>_Set file names and paths:'#010+
-  '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
-  'sed'#010+
+  '**2Fa<x>[,y]_(for a program) load units <x> and [y] bef','ore uses is p'+
+  'arsed'#010+
   '**2Fc<x>_Set input codepage to <x>'#010+
   '**2FC<x>_Set RC compiler binary name to <x>'#010+
-  '**2Fd_Disable the c','ompiler'#039's internal directory cache'#010+
+  '**2Fd_Disable the compiler'#039's internal directory cache'#010+
   '**2FD<x>_Set the directory where to search for compiler utilities'#010+
-  '**2Fe<x>_Redirect error output to <x>'#010+
+  '**2Fe<x>_Redirect erro','r output to <x>'#010+
   '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
   '**2FE<x>_Set exe/unit output path to <x>'#010+
-  '**2Fi<x>_Ad','d <x> to include path'#010+
+  '**2Fi<x>_Add <x> to include path'#010+
   '**2Fl<x>_Add <x> to library path'#010+
   '**2FL<x>_Use <x> as dynamic linker'#010+
-  '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
-  'r'#010+
+  '**2Fm<x>_Load unicode conversion ','table from <x>.txt in the compiler '+
+  'dir'#010+
   '**2FM<x>_Set the directory where to search for unicode binary files'#010+
-  '**2Fo<x>_A','dd <x> to object path'#010+
+  '**2Fo<x>_Add <x> to object path'#010+
   '**2Fr<x>_Load error message file <x>'#010+
   '**2FR<x>_Set resource (.res) linker to <x>'#010+
-  '**2Fu<x>_Add <x> to unit path'#010+
+  '**2Fu<x>_Add <x> to u','nit path'#010+
   '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
-  '**2FW<x>_Store generated whole-program optimization feed','back in <x>'#010+
+  '**2FW<x>_Store generated whole-program optimization feedback in <x>'#010+
   '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
   'om <x>'#010+
-  '*g1g_Generate debug information (default format for target)'#010+
+  '*g1g_Generate debug information (d','efault format for target)'#010+
   '*g2gc_Generate checks for pointers'#010+
-  '*g2gh_Use heaptrace unit (for memory leak/corruption deb','ugging)'#010+
+  '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
   '*g2gl_Use line info unit (show more info with backtraces)'#010+
   '*g2go<x>_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 pa','ths in Sta'+
-  'bs'#010+
+  '*g3godwarfsets_ En','able DWARF '#039'set'#039' type debug information (b'+
+  'reaks gdb < 6.5)'#010+
+  '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
+  #010+
   '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+
   'ame'#010+
-  '*g2gp_Preserve case in stabs symbol names'#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_Generat','es programs traceable with Valgrind'#010+
+  '*g2gv_Generates programs traceable with Valgrind'#010+
   '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
-  '*g2gw2_Generate DWARFv2 debug information'#010+
+  '*g2gw2_Generate DWARFv2 debug i','nformation'#010+
   '*g2gw3_Generate DWARFv3 debug information'#010+
   '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+
-  '**1i_In','formation'#010+
+  '**1i_Information'#010+
   '**2iD_Return compiler date'#010+
   '**2iV_Return short compiler version'#010+
   '**2iW_Return full compiler version'#010+
-  '**2iSO_Return compiler OS'#010+
+  '**2iSO_Return c','ompiler OS'#010+
   '**2iSP_Return compiler host processor'#010+
   '**2iTO_Return target OS'#010+
   '**2iTP_Return target processor'#010+
-  '**1I<x>_Add <','x> to include path'#010+
+  '**1I<x>_Add <x> to include path'#010+
   '**1k<x>_Pass <x> to the linker'#010+
   '**1l_Write logo'#010+
   '**1M<x>_Set language mode to <x>'#010+
-  '**2Mfpc_Free Pascal dialect (default)'#010+
+  '**2Mfpc_Free Pascal dial','ect (default)'#010+
   '**2Mobjfpc_FPC mode with Object Pascal support'#010+
   '**2Mdelphi_Delphi 7 compatibility mode'#010+
-  '**2Mtp_TP/BP 7.0 ','compatibility mode'#010+
+  '**2Mtp_TP/BP 7.0 compatibility mode'#010+
   '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
   '**1n_Do not read the default config files'#010+
-  '**1o<x>_Change the name of the executable produced to <x>'#010+
+  '**1o<x','>_Change the name of the executable produced to <x>'#010+
   '**1O<x>_Optimizations:'#010+
   '**2O-_Disable optimizations'#010+
-  '**2O1_Level 1 ','optimizations (quick and debugger friendly)'#010+
+  '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
   '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
-  '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
+  '**2O3_Level 3 optimizat','ions (-O2 + slow optimizations)'#010+
   '**2O4_Level 4 optimizations (-O3 + optimizations which might have unex'+
-  'pected side eff','ects)'#010+
+  'pected side effects)'#010+
   '**2Oa<x>=<y>_Set alignment'#010+
   '**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possible '+
   'values'#010+
-  '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+
-  #010+
-  '**2OW<x>_Generate whole-program optimization feedback for o','ptimizati'+
-  'on <x>, see fpc -i for possible values'#010+
+  '**2Op<x>_Set ','target cpu for optimizing, see fpc -i for possible valu'+
+  'es'#010+
+  '**2OW<x>_Generate whole-program optimization feedback for optimization'+
+  ' <x>, see fpc -i for possible values'#010+
   '**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+
-  'le values'#010+
+  'le va','lues'#010+
   '**2Os_Optimize for size rather than speed'#010+
   '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
-  'F*1P<x>_Ta','rget CPU / compiler related options:'#010+
+  'F*1P<x>_Target CPU / compiler related options:'#010+
   'F*2PB_Show default compiler binary'#010+
   'F*2PP_Show default target cpu'#010+
-  'F*2P<x>_Set target CPU (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,sp'+
-  'arc,x86_64'#010+
+  'F*2P<x>_Set target CP','U (arm,i386,m68k,mips,mipsel,powerpc,powerpc64,'+
+  'sparc,x86_64'#010+
   '**1R<x>_Assembler reading style:'#010+
-  '**2Rdefault_Use default ','assembler for target'#010+
+  '**2Rdefault_Use default assembler for target'#010+
   '3*2Ratt_Read AT&T style assembler'#010+
   '3*2Rintel_Read Intel style assembler'#010+
-  '6*2RMOT_Read motorola style assembler'#010+
+  '6*2RMOT_Read motorola style ass','embler'#010+
   '**1S<x>_Syntax options:'#010+
   '**2S2_Same as -Mobjfpc'#010+
   '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
-  '**2Sa_Turn on ','assertions'#010+
+  '**2Sa_Turn on assertions'#010+
   '**2Sd_Same as -Mdelphi'#010+
   '**2Se<x>_Error options. <x> is a combination of the following:'#010+
-  '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
+  '**3*_<n> : Compiler halts ','after the <n> errors (default is 1)'#010+
   '**3*_w : Compiler also halts after warnings'#010+
-  '**3*_n : Compiler also halts after no','tes'#010+
+  '**3*_n : Compiler also halts after notes'#010+
   '**3*_h : Compiler also halts after hints'#010+
   '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
-  '**2Sh_Use reference counted strings (ansistring by default) instead of'+
-  ' shortstrings'#010+
-  '**2Si_Turn on inlining of procedures/functions decla','red as "inline"'#010+
+  '**2Sh_Use reference',' counted strings (ansistring by default) instead '+
+  'of shortstrings'#010+
+  '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
   '**2Sk_Load fpcylix unit'#010+
   '**2SI<x>_Set interface style to <x>'#010+
   '**3SIcom_COM compatible interface (default)'#010+
-  '**3SIcorba_CORBA compatible interface'#010+
+  '**3','SIcorba_CORBA compatible interface'#010+
   '**2Sm_Support macros like C (global)'#010+
   '**2So_Same as -Mtp'#010+
-  '**2Ss_Constructor name mus','t be init (destructor must be done)'#010+
+  '**2Ss_Constructor name must be init (destructor must be done)'#010+
   '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
-  '**2Sy_@<pointer> returns a typed pointer, same as $T+'#010+
+  '**2Sy_@<pointer> retur','ns a typed pointer, same as $T+'#010+
   '**1s_Do not call assembler and linker'#010+
   '**2sh_Generate script to link on host'#010+
-  '**2st_Gen','erate script to link on target'#010+
+  '**2st_Generate script to link on target'#010+
   '**2sr_Skip register allocation phase (use with -alr)'#010+
   '**1T<x>_Target operating system:'#010+
-  '3*2Tdarwin_Darwin/Mac OS X'#010+
+  '3*2Tda','rwin_Darwin/Mac OS X'#010+
   '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
   '3*2Tfreebsd_FreeBSD'#010+
-  '3*2Tgo32v2_Version 2 of DJ',' Delorie DOS extender'#010+
+  '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
   '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+
   'rwin)'#010+
   '3*2Tlinux_Linux'#010+
-  '3*2Tnativent_Native NT API (experimental)'#010+
+  '3*2Tnativ','ent_Native NT API (experimental)'#010+
   '3*2Tnetbsd_NetBSD'#010+
   '3*2Tnetware_Novell Netware Module (clib)'#010+
-  '3*2Tnetwlibc_Novell Netwa','re Module (libc)'#010+
+  '3*2Tnetwlibc_Novell Netware Module (libc)'#010+
   '3*2Topenbsd_OpenBSD'#010+
   '3*2Tos2_OS/2 / eComStation'#010+
   '3*2Tsunos_SunOS/Solaris'#010+
   '3*2Tsymbian_Symbian OS'#010+
-  '3*2Tsolaris_Solaris'#010+
+  '3*2Tsolaris_','Solaris'#010+
   '3*2Twatcom_Watcom compatible DOS extender'#010+
   '3*2Twdosx_WDOSX DOS extender'#010+
   '3*2Twin32_Windows 32 Bit'#010+
-  '3*2Twince_Win','dows CE'#010+
+  '3*2Twince_Windows CE'#010+
   '4*2Tdarwin_Darwin/Mac OS X'#010+
   '4*2Tlinux_Linux'#010+
   '4*2Twin64_Win64 (64 bit Windows systems)'#010+
   '6*2Tamiga_Commodore Amiga'#010+
-  '6*2Tatari_Atari ST/STe/TT'#010+
+  '6*2Ta','tari_Atari ST/STe/TT'#010+
   '6*2Tlinux_Linux'#010+
   '6*2Tpalmos_PalmOS'#010+
   'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+
   'A*2Tlinux_Linux'#010+
-  'A*2Twince_Windo','ws CE'#010+
+  'A*2Twince_Windows CE'#010+
   'P*2Tamiga_AmigaOS'#010+
   'P*2Tdarwin_Darwin/Mac OS X'#010+
   'P*2Tlinux_Linux'#010+
   'P*2Tmacos_Mac OS (classic)'#010+
   'P*2Tmorphos_MorphOS'#010+
-  'S*2Tsolaris_Solaris'#010+
+  'S*2Tsolar','is_Solaris'#010+
   'S*2Tlinux_Linux'#010+
   '**1u<x>_Undefines the symbol <x>'#010+
   '**1U_Unit options:'#010+
-  '**2Un_Do not check where the unit name',' matches the file name'#010+
+  '**2Un_Do not check where the unit name matches the file name'#010+
   '**2Ur_Generate release unit files (never automatically recompiled)'#010+
   '**2Us_Compile a system unit'#010+
-  '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
-  '**2*_e : Show errors (default)       0 : Show nothing (','except errors'+
-  ')'#010+
+  '**1v<','x>_Be verbose. <x> 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*_n : Show notes                  t : Show tried/','used files'#010+
   '**2*_h : Show hints                  c : Show conditionals'#010+
-  '**2*_i : Show general info           d : Show d','ebug info'#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 : Sh','ow message numbers'#010+
   '**2*_a : Show everything             x : Executable info (Win32 only)'#010+
-  '**2*_b : Write file names me','ssages   p : Write tree.log with parse t'+
-  'ree'#010+
+  '**2*_b : Write file names messages   p : Write tree.log with parse tre'+
+  'e'#010+
   '**2*_    with full path              v : Write fpcdebug.txt with'#010+
-  '**2*_                                    lots of debugging info'#010+
+  '**2*_         ','                           lots of debugging info'#010+
   '**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+
-  'F*1V<x>_Ap','pend '#039'-<x>'#039' to the used compiler binary name (e.g.'+
-  ' for version)'#010+
+  'F*1V<x>_Append '#039'-<x>'#039' to the used compiler binary name (e.g. f'+
+  'or version)'#010+
   '**1W<x>_Target-specific options (targets)'#010+
-  '3*2WA_Specify native type application (Windows)'#010+
+  '3*2WA_Specify nat','ive type application (Windows)'#010+
   '4*2WA_Specify native type application (Windows)'#010+
-  'A*2WA_Specify native type application ','(Windows)'#010+
+  'A*2WA_Specify native type application (Windows)'#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+
+  'p*2Wb_Cre','ate a bundle instead of a library (Darwin)'#010+
   'A*2Wb_Create a bundle instead of a library (Darwin)'#010+
-  '4*2Wb_Create a bundle ','instead of a library (Darwin)'#010+
+  '4*2Wb_Create a bundle instead of a library (Darwin)'#010+
   '3*2WB_Create a relocatable image (Windows, Symbian)'#010+
-  '3*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
+  '3*2WBxxxx_Set image base to xxxx (Windows',', Symbian)'#010+
   '4*2WB_Create a relocatable image (Windows)'#010+
   '4*2WBxxxx_Set image base to xxxx (Windows)'#010+
-  'A*2WB_Create a reloc','atable image (Windows, Symbian)'#010+
+  'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
   'A*2WBxxxx_Set image base to xxxx (Windows, Symbian)'#010+
-  '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
+  '3*2WC_Specify console type application ','(EMX, OS/2, Windows)'#010+
   '4*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
-  'A*2WC_Specify console type applicati','on (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+
+  '3*2WD_Use DEFFILE to export functions of DLL or EXE (W','indows)'#010+
   '4*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+
+  '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+
+  'A*2We_Use external resources (Da','rwin)'#010+
   'P*2We_Use external resources (Darwin)'#010+
   'p*2We_Use external resources (Darwin)'#010+
-  '3*2WF_Specify full-screen type appl','ication (EMX, OS/2)'#010+
+  '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
   '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
-  '4*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
+  '4*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 Mac OS)'#010+
   '3*2Wi_Use internal resources (Darwin)'#010+
   '4*2Wi_Use internal resources (Darwin)'#010+
   'A*2Wi_Use internal resources (Darwin)'#010+
-  'P*2Wi_Use internal resources (Darwin)'#010+
+  'P*2W','i_Use internal resources (Darwin)'#010+
   'p*2Wi_Use internal resources (Darwin)'#010+
-  '3*2WI_Turn on/off the usage of import section','s (Windows)'#010+
+  '3*2WI_Turn on/off the usage of import sections (Windows)'#010+
   '4*2WI_Turn on/off the usage of import sections (Windows)'#010+
-  'A*2WI_Turn on/off the usage of import sections (Windows)'#010+
+  'A*2WI_Turn on/off the usage of import sections (Window','s)'#010+
   '8*2Wm<x>_Set memory model'#010+
   '8*3WmTiny_Tiny memory model'#010+
   '8*3WmSmall_Small memory model (default)'#010+
-  '8*3WmMedium_Medium m','emory model'#010+
+  '8*3WmMedium_Medium memory model'#010+
   '3*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'n)'#010+
-  '4*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
-  'n)'#010+
+  '4*2WM<x>_Minimum Mac OS X deployment v','ersion: 10.4, 10.5.1, ... (Dar'+
+  'win)'#010+
   'p*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'n)'#010+
-  'P*2WM<x>_','Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Dar'+
-  'win)'#010+
-  '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
+  'P*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
+  'n)'#010+
+  '3*2WN_Do not generate relocation code, needed for debugging',' (Windows'+
+  ')'#010+
   '4*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
-  'A*2WN_Do not generate relocation cod','e, needed for debugging (Windows'+
-  ')'#010+
+  'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
   'A*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
-  'V*2Wpxxxx_Specify the controller type, see fpc -i for possible values'#010+
-  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesi','m)'+
-  #010+
+  'V*2Wpxxxx_Specify t','he controller type, see fpc -i for possible value'+
+  's'#010+
+  '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesim)'#010+
   'A*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (Darwin)'#010+
   '3*2WR_Generate relocation code (Windows)'#010+
-  '4*2WR_Generate relocation code (Windows)'#010+
+  '4*2WR_Generat','e relocation code (Windows)'#010+
   'A*2WR_Generate relocation code (Windows)'#010+
   '8*2Wt<x>_Set the target executable format'#010+
-  '8*3Wte','xe_Create a DOS .EXE file (default)'#010+
+  '8*3Wtexe_Create a DOS .EXE file (default)'#010+
   '8*3Wtcom_Create a DOS .COM file (requires tiny memory model)'#010+
-  'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
+  'P*2WT_Specify MPW tool typ','e application (Classic Mac OS)'#010+
   '**2WX_Enable executable stack (Linux)'#010+
   '**1X_Executable options:'#010+
-  '**2Xc_Pass --shared/-dy','namic to the linker (BeOS, Darwin, FreeBSD, L'+
-  'inux)'#010+
+  '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
+  'ux)'#010+
   '**2Xd_Do not search default library path (sometimes required for cross'+
-  '-compiling when not using -XR)'#010+
+  '-c','ompiling when not using -XR)'#010+
   '**2Xe_Use external linker'#010+
-  '**2Xg_Create debuginfo in a separate file and add a debuglink ','sectio'+
-  'n to executable'#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+
-  '**2Xm_Generate link map'#010+
+  '**2Xm_G','enerate link map'#010+
   '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
   's '#039'main'#039')'#010+
-  'F*2Xp<x>_First search for th','e compiler binary in the directory <x>'#010+
+  'F*2Xp<x>_First search for the compiler binary in the directory <x>'#010+
   '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
-  '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+
-  'ile, see the ld manual for more information) (BeOS, Linux)'#010+
-  '**2XR<x>_Prepend <x>',' to all linker search paths (BeOS, Darwin, FreeB'+
-  'SD, Linux, Mac OS, Solaris)'#010+
+  '**2Xr<x>_Set the linker'#039's rl','ink-path to <x> (needed for cross co'+
+  'mpile, see the ld manual for more information) (BeOS, Linux)'#010+
+  '**2XR<x>_Prepend <x> 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, defines FPC_LINK_STATIC)'#010+
-  '**2Xt_Link with static libraries (-static is passed to',' linker)'#010+
+  '**2XS_T','ry to link units statically (default, defines FPC_LINK_STATIC'+
+  ')'#010+
+  '**2Xt_Link with static libraries (-static is passed to linker)'#010+
   '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
   '**1*_'#010+
   '**1?_Show this help'#010+
-  '**1h_Shows this help without waiting'
+  '**1h_Shows this help w','ithout waiting'
 );
Index: ncgflw.pas
===================================================================
--- ncgflw.pas	(revision 26481)
+++ ncgflw.pas	(working copy)
@@ -422,259 +422,67 @@
 
 
     procedure tcgfornode.pass_generate_code;
-      var
-         l3,oldclabel,oldblabel,
-         otl, ofl : tasmlabel;
+       type
+         tcompconst = (cc_false, cc_true, cc_true_withrangecheck);
+       var
          temptovalue : boolean;
-         hop : topcg;
-         hcond : topcmp;
          opsize : tcgsize;
-         count_var_is_signed,do_loopvar_at_end : boolean;
-         cmp_const:Tconstexprint;
-         oldflowcontrol : tflowcontrol;
-         oldexecutionweight : longint;
-         isjump: boolean;
-      begin
-         location_reset(location,LOC_VOID,OS_NO);
-         ofl:=nil;
-         otl:=nil;
+         count_var_is_signed : boolean;
+         step : aint;
 
-         oldclabel:=current_procinfo.CurrContinueLabel;
-         oldblabel:=current_procinfo.CurrBreakLabel;
-         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
-         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
-         current_asmdata.getjumplabel(l3);
-
-         { only calculate reference }
-         opsize := def_cgsize(left.resultdef);
-         count_var_is_signed:=is_signed(left.resultdef);
-
-         { first set the to value
-           because the count var can be in the expression ! }
-         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
-         { if the loop is unrolled and there is a jump into the loop,
-           then we can't do the trick with incrementing the loop var only at the
-           end
-         }
-           and not(assigned(entrylabel));
-
-        isjump:=(t1.expectloc=LOC_JUMP);
-        if isjump then
-          begin
-             otl:=current_procinfo.CurrTrueLabel;
-             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
-             ofl:=current_procinfo.CurrFalseLabel;
-             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
-          end;
-        secondpass(t1);
-        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
-          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
-        if isjump then
-          begin
-            current_procinfo.CurrTrueLabel:=otl;
-            current_procinfo.CurrFalseLabel:=ofl;
-          end;
-         { calculate pointer value and check if changeable and if so }
-         { load into temporary variable                       }
-         if t1.nodetype<>ordconstn then
-           begin
-              do_loopvar_at_end:=false;
-              temptovalue:=true;
-           end
-         else
-           temptovalue:=false;
-
-         { load loopvar, prefer loopvar being a register variable }
-         oldexecutionweight:=cg.executionweight;
-         inc(cg.executionweight,8);
-         secondpass(left);
-         cg.executionweight:=oldexecutionweight;
-
-         { load from value }
-         isjump:=(right.expectloc=LOC_JUMP);
-         if isjump then
-           begin
-              otl:=current_procinfo.CurrTrueLabel;
-              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
-              ofl:=current_procinfo.CurrFalseLabel;
-              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
-           end;
-         secondpass(right);
-         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
-           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
-         if isjump then
-           begin
-             current_procinfo.CurrTrueLabel:=otl;
-             current_procinfo.CurrFalseLabel:=ofl;
-           end;
-
-         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
-         oldflowcontrol:=flowcontrol;
-         include(flowcontrol,fc_inflowcontrol);
-         { produce start assignment }
-         case left.location.loc of
-           LOC_REFERENCE,
-           LOC_CREFERENCE :
-             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
-           LOC_REGISTER,
-           LOC_CREGISTER:
-             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
-           LOC_SUBSETREG,
-           LOC_CSUBSETREG :
-             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
-           else
-             internalerror(200501311);
-         end;
-
-         if lnf_backward in loopflags then
-           if count_var_is_signed then
-             hcond:=OC_LT
-           else
-             hcond:=OC_B
-         else
-           if count_var_is_signed then
-             hcond:=OC_GT
-           else
-             hcond:=OC_A;
-
-         sync_regvars(true);
-{$ifdef OLDREGVARS}
-         load_all_regvars(current_asmdata.CurrAsmList);
-{$endif OLDREGVARS}
-
-         if temptovalue then
-           begin
-             case t1.location.loc of
-               LOC_REGISTER,LOC_CREGISTER:
-                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-                   t1.location.register,left.location,current_procinfo.CurrBreakLabel);
-               LOC_REFERENCE,LOC_CREFERENCE:
-                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-                   t1.location.reference,left.location,current_procinfo.CurrBreakLabel);
-             else
-               InternalError(2013051601);
-             end;
-           end
-         else
-           begin
-             if lnf_testatbegin in loopflags then
-               begin
-                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-                   tordconstnode(t1).value.svalue,
-                   left.location,current_procinfo.CurrBreakLabel);
-               end;
-           end;
-
-         {If the loopvar doesn't mind on exit, we avoid this ugly
-          dec instruction and do the loopvar inc/dec after the loop
-          body.}
-         if not do_loopvar_at_end then
-            begin
-              if lnf_backward in loopflags then
-                hop:=OP_ADD
-              else
-                hop:=OP_SUB;
-              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
-            end;
-
-         if assigned(entrylabel) then
-           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
-
-         { align loop target }
-         if not(cs_opt_size in current_settings.optimizerswitches) then
-            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
-         hlcg.a_label(current_asmdata.CurrAsmList,l3);
-
-         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
-          after the loop body instead of here.}
-         if not do_loopvar_at_end then
-            begin
-              { according to count direction DEC or INC... }
-              if lnf_backward in loopflags then
-                hop:=OP_SUB
-              else
-                hop:=OP_ADD;
-              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
-            end;
-
-         if assigned(t2) then
-           begin
-             { Calc register weight }
-             oldexecutionweight:=cg.executionweight;
-             cg.executionweight:=cg.executionweight*8;
-             secondpass(t2);
-             cg.executionweight:=oldexecutionweight;
-{$ifdef OLDREGVARS}
-             load_all_regvars(current_asmdata.CurrAsmList);
-{$endif OLDREGVARS}
-           end;
-
-         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
-          after the loop body instead of here.}
-         if do_loopvar_at_end then
-            begin
-              { according to count direction DEC or INC... }
-              if lnf_backward in loopflags then
-                hop:=OP_SUB
-              else
-                hop:=OP_ADD;
-              hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,1,left.location);
-            end;
-
-         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
-
-         if do_loopvar_at_end then
-           if lnf_backward in loopflags then
+        procedure check_loopvar(comp_greater, comp_equal : boolean;
+                                jump_to_label : tasmlabel;
+                                check_const : tcompconst);
+        var
+          hcond: topcmp;
+          cmp_const: Tconstexprint;
+        begin
+          if comp_equal then
+            if comp_greater then
+               if count_var_is_signed then
+                 hcond:=OC_GTE
+               else
+                 hcond:=OC_AE
+            else // forward
+                if count_var_is_signed then
+                  hcond:=OC_LTE
+                else
+                  hcond:=OC_BE
+         else // is_before_body
+            if comp_greater then
              if count_var_is_signed then
-               hcond:=OC_GTE
-             else
-               hcond:=OC_AE
-            else
-              if count_var_is_signed then
-                hcond:=OC_LTE
-              else
-                hcond:=OC_BE
-         else
-           if lnf_backward in loopflags then
-             if count_var_is_signed then
                hcond:=OC_GT
              else
                hcond:=OC_A
-            else
+            else // forward
               if count_var_is_signed then
                 hcond:=OC_LT
               else
                 hcond:=OC_B;
-{$ifdef OLDREGVARS}
-         load_all_regvars(current_asmdata.CurrAsmList);
-{$endif OLDREGVARS}
 
-         { produce comparison and the corresponding }
-         { jump                                     }
          if temptovalue then
            begin
              case t1.location.loc of
                LOC_REGISTER,LOC_CREGISTER:
-                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.register,
-                   left.location,l3);
+                 hlcg.a_cmp_reg_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
+                   t1.location.register,left.location,jump_to_label);
                LOC_REFERENCE,LOC_CREFERENCE:
-                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,t1.location.reference,
-                   left.location,l3);
+                 hlcg.a_cmp_ref_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
+                   t1.location.reference,left.location,jump_to_label);
              else
-               InternalError(2013051602);
+               InternalError(2013051601);
              end;
            end
          else
            begin
-             cmp_const:=Tordconstnode(t1).value;
-             if do_loopvar_at_end then
+             if check_const=cc_true_withrangecheck then
                begin
-                 {Watch out for wrap around 255 -> 0.}
-                 {Ugly: This code is way to long... Use tables?}
+                 cmp_const:=Tordconstnode(t1).value;
+                 // we check here if we need to alter hcond if the loopvar range is met
                  case opsize of
                    OS_8:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if byte(cmp_const.svalue)=low(byte) then
                              begin
@@ -693,7 +501,7 @@
                      end;
                    OS_16:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if word(cmp_const.svalue)=high(word) then
                              begin
@@ -712,7 +520,7 @@
                      end;
                    OS_32:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if cardinal(cmp_const.svalue)=high(cardinal) then
                              begin
@@ -731,7 +539,7 @@
                      end;
                    OS_64:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if qword(cmp_const.uvalue)=high(qword) then
                              begin
@@ -750,7 +558,7 @@
                      end;
                    OS_S8:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if shortint(cmp_const.svalue)=low(shortint) then
                              begin
@@ -769,7 +577,7 @@
                      end;
                    OS_S16:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if integer(cmp_const.svalue)=high(smallint) then
                              begin
@@ -788,7 +596,7 @@
                      end;
                    OS_S32:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if longint(cmp_const.svalue)=high(longint) then
                              begin
@@ -807,7 +615,7 @@
                      end;
                    OS_S64:
                      begin
-                       if lnf_backward in loopflags then
+                       if comp_greater then
                          begin
                            if int64(cmp_const.svalue)=high(int64) then
                              begin
@@ -829,10 +637,192 @@
                  end;
                end;
 
-             hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
-               aint(cmp_const.svalue),left.location,l3);
+             if check_const >= cc_true then
+               begin
+                 hlcg.a_cmp_const_loc_label(current_asmdata.CurrAsmList,left.resultdef,hcond,
+                   tordconstnode(t1).value.svalue,
+                   left.location,jump_to_label);
+               end;
            end;
+        end;
 
+        procedure do_loopvar(is_backward : boolean);
+          var
+            hop: topcg;
+          begin
+            { according to count direction DEC or INC... }
+            if is_backward then
+              hop:=OP_SUB
+            else
+              hop:=OP_ADD;
+            hlcg.a_op_const_loc(current_asmdata.CurrAsmList,hop,left.resultdef,step,left.location);
+          end;
+
+      var
+         l3,oldclabel,oldblabel,
+         otl, ofl : tasmlabel;
+         do_loopvar_at_end : boolean;
+         oldflowcontrol : tflowcontrol;
+         oldexecutionweight : longint;
+         isjump: boolean;
+      begin
+         location_reset(location,LOC_VOID,OS_NO);
+         ofl:=nil;
+         otl:=nil;
+
+         oldclabel:=current_procinfo.CurrContinueLabel;
+         oldblabel:=current_procinfo.CurrBreakLabel;
+         current_asmdata.getjumplabel(current_procinfo.CurrContinueLabel);
+         current_asmdata.getjumplabel(current_procinfo.CurrBreakLabel);
+         current_asmdata.getjumplabel(l3);
+
+         { only calculate reference }
+         opsize := def_cgsize(left.resultdef);
+         count_var_is_signed:=is_signed(left.resultdef);
+
+         { set a value for step. 1 by default }
+         if not assigned(loopstep) then
+           step:=1
+         else
+           step:=tordconstnode(loopstep).value;
+
+         { first set the to value
+           because the count var can be in the expression ! }
+         do_loopvar_at_end:=(lnf_dont_mind_loopvar_on_exit in loopflags)
+         { if the loop is unrolled and there is a jump into the loop,
+           then we can't do the trick with incrementing the loop var only at the
+           end
+         }
+           and not(assigned(entrylabel));
+
+        isjump:=(t1.expectloc=LOC_JUMP);
+        if isjump then
+          begin
+             otl:=current_procinfo.CurrTrueLabel;
+             current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
+             ofl:=current_procinfo.CurrFalseLabel;
+             current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
+          end;
+        secondpass(t1);
+
+        if t1.location.loc in [LOC_FLAGS,LOC_JUMP] then
+          hlcg.location_force_reg(current_asmdata.CurrAsmList,t1.location,t1.resultdef,t1.resultdef,false);
+        if isjump then
+          begin
+            current_procinfo.CurrTrueLabel:=otl;
+            current_procinfo.CurrFalseLabel:=ofl;
+          end;
+         { calculate pointer value and check if changeable and if so }
+         { load into temporary variable                       }
+         if t1.nodetype<>ordconstn then
+           begin
+              do_loopvar_at_end:=false;
+              temptovalue:=true;
+           end
+         else
+           temptovalue:=false;
+
+         { load loopvar, prefer loopvar being a register variable }
+         oldexecutionweight:=cg.executionweight;
+         inc(cg.executionweight,8);
+         secondpass(left);
+         cg.executionweight:=oldexecutionweight;
+
+         { load from value }
+         isjump:=(right.expectloc=LOC_JUMP);
+         if isjump then
+           begin
+              otl:=current_procinfo.CurrTrueLabel;
+              current_asmdata.getjumplabel(current_procinfo.CurrTrueLabel);
+              ofl:=current_procinfo.CurrFalseLabel;
+              current_asmdata.getjumplabel(current_procinfo.CurrFalseLabel);
+           end;
+         secondpass(right);
+         if right.location.loc in [LOC_FLAGS,LOC_JUMP] then
+           hlcg.location_force_reg(current_asmdata.CurrAsmList,right.location,right.resultdef,right.resultdef,false);
+         if isjump then
+           begin
+             current_procinfo.CurrTrueLabel:=otl;
+             current_procinfo.CurrFalseLabel:=ofl;
+           end;
+
+         maybechangeloadnodereg(current_asmdata.CurrAsmList,left,false);
+         oldflowcontrol:=flowcontrol;
+         include(flowcontrol,fc_inflowcontrol);
+         { produce start assignment }
+         case left.location.loc of
+           LOC_REFERENCE,
+           LOC_CREFERENCE :
+             hlcg.a_load_loc_ref(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.reference);
+           LOC_REGISTER,
+           LOC_CREGISTER:
+             hlcg.a_load_loc_reg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.register);
+           LOC_SUBSETREG,
+           LOC_CSUBSETREG :
+             hlcg.a_load_loc_subsetreg(current_asmdata.CurrAsmList,right.resultdef,left.resultdef,right.location,left.location.sreg);
+           else
+             internalerror(200501311);
+         end;
+
+         sync_regvars(true);
+{$ifdef OLDREGVARS}
+         load_all_regvars(current_asmdata.CurrAsmList);
+{$endif OLDREGVARS}
+         check_loopvar(not (lnf_backward in loopflags), False, current_procinfo.CurrBreakLabel, tcompconst(ord(lnf_testatbegin in loopflags)));
+
+         {If the loopvar doesn't mind on exit, we avoid this ugly
+          dec instruction and do the loopvar inc/dec after the loop
+          body.}
+         if not do_loopvar_at_end then
+           do_loopvar(not (lnf_backward in loopflags));
+
+         if assigned(entrylabel) then
+           hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(entrylabel).getasmlabel);
+
+         { align loop target }
+         if not(cs_opt_size in current_settings.optimizerswitches) then
+            current_asmdata.CurrAsmList.concat(Tai_align.Create(current_settings.alignment.loopalign));
+
+         hlcg.a_label(current_asmdata.CurrAsmList,l3);
+
+         {If the loopvar doesn't mind on exit, we avoid the loopvar inc/dec
+          after the loop body instead of here.}
+         if not do_loopvar_at_end then
+            begin
+              { according to count direction DEC or INC... }
+              do_loopvar(lnf_backward in loopflags);
+            end;
+
+         if assigned(t2) then
+           begin
+             { Calc register weight }
+             oldexecutionweight:=cg.executionweight;
+             cg.executionweight:=cg.executionweight*8;
+             secondpass(t2);
+             cg.executionweight:=oldexecutionweight;
+{$ifdef OLDREGVARS}
+             load_all_regvars(current_asmdata.CurrAsmList);
+{$endif OLDREGVARS}
+           end;
+
+         {If the loopvar doesn't mind on exit, we do the loopvar inc/dec
+          after the loop body instead of here.}
+         if do_loopvar_at_end then
+            begin
+              { according to count direction DEC or INC... }
+              do_loopvar(lnf_backward in loopflags);
+            end;
+
+         hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrContinueLabel);
+
+{$ifdef OLDREGVARS}
+         load_all_regvars(current_asmdata.CurrAsmList);
+{$endif OLDREGVARS}
+         if do_loopvar_at_end then
+           check_loopvar(lnf_backward in loopflags, True{comp_equal},l3{jump_to}, cc_true_withrangecheck)
+         else
+           check_loopvar(lnf_backward in loopflags, False{comp_equal},l3{jump_to}, cc_true_withrangecheck);
+
          { this is the break label: }
          hlcg.a_label(current_asmdata.CurrAsmList,current_procinfo.CurrBreakLabel);
 
Index: nflw.pas
===================================================================
--- nflw.pas	(revision 26481)
+++ nflw.pas	(working copy)
@@ -99,8 +99,10 @@
           entrylabel,
           { this is a dummy node used by the dfa to store life information for the loop iteration }
           loopiteration : tnode;
+          loopstep : tnode;
           loopvar_notid:cardinal;
-          constructor create(l,r,_t1,_t2 : tnode;back : boolean);virtual;reintroduce;
+          constructor create(l,r,_t1,_t2, step : tnode;back : boolean);virtual;reintroduce;
+          destructor destroy; override;
           procedure loop_var_access(not_type:Tnotification_flag;symbol:Tsym);
           function wrap_to_value:tnode;
           function pass_typecheck:tnode;override;
@@ -240,7 +242,7 @@
       cutils,verbose,globals,
       symconst,symtable,paramgr,defcmp,defutil,htypechk,pass_1,
       ncal,nadd,ncon,nmem,nld,ncnv,nbas,cgobj,nutils,ninl,nset,
-      pdecsub,
+      pdecsub,nmat,
     {$ifdef state_tracking}
       nstate,
     {$endif}
@@ -259,6 +261,7 @@
           cinlinenode.create(in_low_x,false,expr.getcopy),
           cinlinenode.create(in_high_x,false,expr.getcopy),
           hloopbody,
+          nil{step node},
           false);
       end;
 
@@ -529,6 +532,7 @@
           genintconstnode(1),
           cinlinenode.create(in_length_x,false,ctemprefnode.create(stringvar)),
           loopbody,
+          nil{step node},
           false);
 
         addstatement(loopstatement,forloopnode);
@@ -642,6 +646,7 @@
           lowbound,
           highbound,
           loopbody,
+          nil{step node},
           false);
 
         addstatement(loopstatement,forloopnode);
@@ -707,6 +712,7 @@
           cinlinenode.create(in_low_x,false,ctemprefnode.create(setvar)),
           cinlinenode.create(in_high_x,false,ctemprefnode.create(setvar)),
           loopbody,
+          nil{step node},
           false);
 
         addstatement(loopstatement,forloopnode);
@@ -1421,15 +1427,24 @@
                               TFORNODE
 *****************************************************************************}
 
-    constructor tfornode.create(l,r,_t1,_t2 : tnode;back : boolean);
+    constructor tfornode.create(l,r,_t1,_t2, step : tnode;back : boolean);
 
       begin
          inherited create(forn,l,r,_t1,_t2);
+         loopstep := step;
          if back then
            include(loopflags,lnf_backward);
          include(loopflags,lnf_testatbegin);
       end;
 
+    destructor tfornode.destroy;
+
+      begin
+         if assigned(loopstep) then
+           loopstep.free;
+         inherited destroy;
+      end;
+
     procedure Tfornode.loop_var_access(not_type:Tnotification_flag;
                                        symbol:Tsym);
 
@@ -1492,18 +1507,49 @@
         result:=internalstatements(statements);
         temp:=ctempcreatenode.create(t1.resultdef,t1.resultdef.size,tt_persistent,true);
         addstatement(statements,temp);
-        addstatement(statements,cassignmentnode.create(
-          ctemprefnode.create(temp),
-          t1));
+
+        if loopstep = nil then
+          addstatement(statements,cassignmentnode.create(
+            ctemprefnode.create(temp),
+            t1))
+        else { make sure that to-from mod loopvar is 0 so we don't rely on the carry flag }
+          if not (lnf_backward in loopflags) then
+            { temp := ((t1-right) div loopstep) * loopstep + right; }
+            addstatement(statements,cassignmentnode.create(
+              ctemprefnode.create(temp),
+              caddnode.create(addn,
+                 right.getcopy,
+                caddnode.create(muln,
+                  cmoddivnode.create(divn,
+                    caddnode.create(subn,
+                      t1.getcopy,
+                      right.getcopy),
+                    loopstep.getcopy),
+                  loopstep.getcopy))))
+          else
+            { temp := ((right-t1) div loopstep) * loopstep - right; }
+            addstatement(statements,cassignmentnode.create(
+              ctemprefnode.create(temp),
+              caddnode.create(subn,
+                right.getcopy,
+                caddnode.create(muln,
+                  cmoddivnode.create(divn,
+                    caddnode.create(subn,
+                      right.getcopy,
+                      t1.getcopy),
+                    loopstep.getcopy),
+                  loopstep.getcopy))));
+
         { create a new for node, it is cheaper than cloning entire loop body }
         addstatement(statements,cfornode.create(
-          left,right,ctemprefnode.create(temp),t2,lnf_backward in loopflags));
+          left,right,ctemprefnode.create(temp),t2,loopstep,lnf_backward in loopflags));
         addstatement(statements,ctempdeletenode.create(temp));
         { all child nodes are reused }
         left:=nil;
         right:=nil;
         t1:=nil;
         t2:=nil;
+        loopstep:=nil;
       end;
 
 
@@ -1550,14 +1596,36 @@
 
 
     function tfornode.pass_1 : tnode;
+      var
+        to_from_are_consts : boolean;
+        adjusted_to: Tconstexprint;
       begin
          result:=nil;
          expectloc:=LOC_VOID;
 
+         to_from_are_consts:=(left.nodetype=ordconstn)and(right.nodetype = ordconstn);
+         { this code ensures that from-to is a multiple of the 'by' value }
+         if to_from_are_consts and assigned(loopstep) then
+           begin
+             if not (lnf_backward in loopflags) then
+               begin { to }
+                 adjusted_to:=tordconstnode(t1).value - tordconstnode(right).value div tordconstnode(loopstep).value.uvalue;
+                 tordconstnode(t1).value:=tordconstnode(right).value+(adjusted_to*tordconstnode(loopstep).value);
+               end
+             else
+               begin { downto }
+                 adjusted_to:=tordconstnode(right).value - tordconstnode(t1).value div tordconstnode(loopstep).value.uvalue;
+                 tordconstnode(t1).value:=tordconstnode(right).value-(adjusted_to*tordconstnode(loopstep).value);
+               end;
+           end;
+
          firstpass(left);
          firstpass(right);
          firstpass(t1);
 
+         if assigned(loopstep) then
+           firstpass(loopstep);
+
          if assigned(t2) then
            firstpass(t2);
          if codegenerror then
@@ -1565,7 +1633,7 @@
 
          { 'to' value must be evaluated once before loop, so its possible modifications
            inside loop body do not affect the number of iterations (see webtbs/tw8883). }
-         if not (t1.nodetype in [ordconstn,temprefn]) then
+         if not (t1.nodetype in [ordconstn,temprefn]) or (assigned(loopstep) and (t1.nodetype = ordconstn))then
            result:=wrap_to_value;
       end;
 
Index: ninl.pas
===================================================================
--- ninl.pas	(revision 26481)
+++ ninl.pas	(working copy)
@@ -4192,6 +4192,7 @@
            cinlinenode.create(in_low_x,false,packednode.getcopy),
            cinlinenode.create(in_high_x,false,packednode.getcopy),
            loopbody,
+           nil{step},
            false);
          addstatement(loopstatement,tempnode);
          { free the loop counter }
Index: optloop.pas
===================================================================
--- optloop.pas	(revision 26481)
+++ optloop.pas	(working copy)
@@ -102,12 +102,21 @@
         getridoffor : boolean;
         replaceinfo : treplaceinfo;
         usesbreakcontinue : boolean;
+        stepvalue : Tconstexprint;
+        stepcopy: tnode;
       begin
         result:=nil;
         if (cs_opt_size in current_settings.optimizerswitches) then
           exit;
         if not(node.nodetype in [forn]) then
           exit;
+
+        { set the loop step increment }
+        if tfornode(node).loopstep=nil then
+          stepvalue:=1
+        else
+          stepvalue:=tordconstnode(tfornode(node).loopstep).value;
+
         unrolls:=number_unrolls(tfornode(node).t2);
         if unrolls>1 then
           begin
@@ -115,10 +124,16 @@
             if (tfornode(node).right.nodetype=ordconstn) and (tfornode(node).t1.nodetype=ordconstn) then
               begin
                 if lnf_backward in tfornode(node).loopflags then
-                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value+1
+                  counts:=tordconstnode(tfornode(node).right).value-tordconstnode(tfornode(node).t1).value
                 else
-                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value+1;
+                  counts:=tordconstnode(tfornode(node).t1).value-tordconstnode(tfornode(node).right).value;
 
+                if stepvalue > 1 then
+                  counts:=counts div stepvalue + 1
+                { always add 1}
+                else
+                  inc(counts);
+
                 usesbreakcontinue:=foreachnodestatic(tfornode(node).t2,@checkbreakcontinue,nil);
 
                 { don't unroll more than we need,
@@ -161,22 +176,28 @@
                       begin
                         foreachnodestatic(tnode(unrollstatement),@replaceloadnodes,@replaceinfo);
                         if lnf_backward in tfornode(node).loopflags then
-                          replaceinfo.value:=replaceinfo.value-1
+                          replaceinfo.value:=replaceinfo.value-stepvalue
                         else
-                          replaceinfo.value:=replaceinfo.value+1;
+                          replaceinfo.value:=replaceinfo.value+stepvalue;
                       end
                     else
                       begin
                         { for itself increases at the last iteration }
                         if i<unrolls then
                           begin
+                            { create copy of step node if needed }
+                            if tfornode(node).loopstep = nil then
+                              stepcopy:=nil
+                            else // if stepincrement
+                              stepcopy:=ccallparanode.create(tfornode(node).loopstep.getcopy, nil);
+
                             { insert incr/decrementation of counter var }
                             if lnf_backward in tfornode(node).loopflags then
                               addstatement(unrollstatement,
-                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)))
+                                geninlinenode(in_dec_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)))
                             else
                               addstatement(unrollstatement,
-                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,nil)));
+                                geninlinenode(in_inc_x,false,ccallparanode.create(tfornode(node).left.getcopy,stepcopy)));
                           end;
                        end;
                   end;
@@ -306,6 +327,7 @@
       var
         tempnode : ttempcreatenode;
         dummy : longint;
+        stepcopy : tnode;
       begin
         result:=fen_false;
         case n.nodetype of
@@ -344,14 +366,20 @@
                       inductionexprs.Add(n);
                       CreateNodes;
 
+                      { check if we are using a stepvalue}
+                      if not assigned(tfornode(arg).loopstep) then
+                        stepcopy:=nil
+                      else
+                        stepcopy:=tfornode(arg).loopstep.getcopy;
+
                       if lnf_backward in tfornode(arg).loopflags then
                         addstatement(calccodestatements,
                           geninlinenode(in_dec_x,false,
-                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))))
+                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))))
                       else
                         addstatement(calccodestatements,
                           geninlinenode(in_inc_x,false,
-                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,nil))));
+                          ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(taddnode(n).right.getcopy,stepcopy))));
 
                       addstatement(initcodestatements,tempnode);
                       addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
@@ -403,16 +431,22 @@
                       inductionexprs.Add(n);
                       CreateNodes;
 
+                      { check if we are using a stepvalue}
+                      if not assigned(tfornode(arg).loopstep) then
+                        stepcopy:=nil
+                      else
+                        stepcopy:=tfornode(arg).loopstep.getcopy;
+
                       if lnf_backward in tfornode(arg).loopflags then
                         addstatement(calccodestatements,
                           geninlinenode(in_dec_x,false,
                           ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
-                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))))
+                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))))
                       else
                         addstatement(calccodestatements,
                           geninlinenode(in_inc_x,false,
                           ccallparanode.create(ctemprefnode.create(tempnode),ccallparanode.create(
-                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),nil))));
+                          cordconstnode.create(tcgvecnode(n).get_mul_size,tfornode(arg).right.resultdef,false),stepcopy))));
 
                       addstatement(initcodestatements,tempnode);
                       addstatement(initcodestatements,cassignmentnode.create(ctemprefnode.create(tempnode),
@@ -467,11 +501,12 @@
             { create a new for node, the old one will be released by the compiler }
             with tfornode(node) do
               begin
-                fornode:=cfornode.create(left,right,t1,t2,lnf_backward in loopflags);
+                fornode:=cfornode.create(left,right,t1,t2,loopstep,lnf_backward in loopflags);
                 left:=nil;
                 right:=nil;
                 t1:=nil;
                 t2:=nil;
+                loopstep:=nil;
               end;
             node:=fornode;
 
Index: pstatmnt.pas
===================================================================
--- pstatmnt.pas	(revision 26481)
+++ pstatmnt.pas	(working copy)
@@ -370,8 +370,11 @@
           var
              hp,
              hblock,
+             hstep,
              hto,hfrom : tnode;
              backward : boolean;
+             usesstep : boolean;
+             stepvalue: Tconstexprint;
              loopvarsym : tabstractvarsym;
           begin
              { Check loop variable }
@@ -473,11 +476,49 @@
                end;
 
              hto:=comp_expr(true,false);
+
+             if try_to_consume(_BY) then
+               begin
+                 hstep:=comp_expr(true,false);
+                 usesstep:=true;
+
+                 { we accept only ordinal consts and not enums }
+                 if not is_ordinal(hstep.resultdef) or is_enum(hstep.resultdef) then
+                   Message(type_e_ordinal_expr_expected)
+                 else
+                   if ErrorCount = 0 then
+                     begin
+                       stepvalue := get_ordinal_value(hstep);
+                       if abs(stepvalue.svalue) = 1 then
+                         begin
+                           { no need to do anything if step = 1 }
+                           hstep.free;
+                           hstep := nil;
+                           usesstep:=false;
+                         end
+                       else
+                         if backward and (stepvalue.svalue >= 0) then
+                           Message1(parser_e_expected_negative_by_value, tostr(stepvalue))
+                         else if not backward and (stepvalue.svalue <= 0) then
+                           Message1(parser_e_expected_positive_by_value, tostr(stepvalue))
+                         else
+                           if backward then
+                             tordconstnode(hstep).value.uvalue := abs(stepvalue.svalue);
+                     end;
+               end
+             else
+               begin
+                 hstep:=nil;
+                 usesstep:=false;
+               end;
+
              consume(_DO);
 
              { Check if the constants fit in the range }
              check_range(hfrom,hloopvar.resultdef);
              check_range(hto,hloopvar.resultdef);
+             if usesstep then
+               check_range(hstep,hloopvar.resultdef);
 
              { first set the varstate for from and to, so
                uses of loopvar in those expressions will also
@@ -488,6 +529,11 @@
              set_varstate(hfrom,vs_read,[vsf_must_be_valid]);
              typecheckpass(hto);
              set_varstate(hto,vs_read,[vsf_must_be_valid]);
+             if usesstep then
+               begin
+                 typecheckpass(hstep);
+                 set_varstate(hstep,vs_read,[vsf_must_be_valid]);
+               end;
              typecheckpass(hloopvar);
              { in two steps, because vs_readwritten may turn on vsf_must_be_valid }
              { for some subnodes                                                  }
@@ -501,7 +547,7 @@
              if assigned(loopvarsym) then
                exclude(loopvarsym.varoptions,vo_is_loop_counter);
 
-             result:=cfornode.create(hloopvar,hfrom,hto,hblock,backward);
+             result:=cfornode.create(hloopvar,hfrom,hto,hblock,hstep,backward);
           end;
 
 
Index: tokens.pas
===================================================================
--- tokens.pas	(revision 26481)
+++ tokens.pas	(working copy)
@@ -101,6 +101,7 @@
     _C,
     _AS,
     _AT,
+    _BY,
     _DO,
     _IF,
     _IN,
@@ -418,6 +419,7 @@
       (str:'C'             ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'AS'            ;special:false;keyword:[m_class];op:_OP_AS),
       (str:'AT'            ;special:false;keyword:[m_none];op:NOTOKEN),
+      (str:'BY'            ;special:false;keyword:[m_none];op:NOTOKEN),
       (str:'DO'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
       (str:'IF'            ;special:false;keyword:alllanguagemodes;op:NOTOKEN),
       (str:'IN'            ;special:false;keyword:alllanguagemodes;op:_OP_IN),
for_by-noflags.patch (127,354 bytes)

AndrewH

2014-01-23 07:34

developer  

forby_tests.patch (5,042 bytes)
Index: test/tforby01.pp
===================================================================
--- test/tforby01.pp	(revision 0)
+++ test/tforby01.pp	(working copy)
@@ -0,0 +1,37 @@
+{$mode objfpc}
+
+{ check for looping past end of intsize and begining}
+var
+  i: integer;
+  j: cardinal;
+begin
+  //check past end
+  for i := high(integer)-1 to high(integer) by 2 do
+    if i < high(integer)-1 then
+      begin
+        WriteLn('for by failed high integer: 0x', hexStr(j, 8));
+        halt(1); // we've looped past maxint
+      end;
+
+  for j := high(cardinal)-1 to high(cardinal) by 2 do
+    if j < high(cardinal)-1 then
+      begin
+        WriteLn('for by failed high cardinal: 0x', hexStr(j, 8));
+        halt(1);
+      end;
+
+  // check past beginning
+  for i := Low(integer)+1 downto Low(integer) by -2 do
+    if i > Low(integer)+1 then
+      begin
+        WriteLn('for by failed low integer: 0x', hexStr(j, 8));
+        halt(1);
+      end;
+
+  for j := Low(cardinal)+1 downto Low(cardinal) by -2 do
+    if j > Low(cardinal)+1 then
+      begin
+        WriteLn('for by failed low cardinal: 0x', hexStr(j, 8));
+        halt(1);
+      end;
+end.
Index: test/tforby02.pp
===================================================================
--- test/tforby02.pp	(revision 0)
+++ test/tforby02.pp	(working copy)
@@ -0,0 +1,62 @@
+{$mode objfpc}
+var
+  i,
+  a,
+  b: integer;
+  last: Integer;
+const
+  BY_VAL=3;
+begin
+  Randomize;
+  a := Random(500); // to get a number the program must determine at runtime
+  b := a + 100;
+  for i := a to b by BY_VAL do
+  begin
+    if (i < a) or (i > b) then
+    begin
+      WriteLn('for by exceeded loop bounds');
+      Halt(1);
+    end;
+    if i <> a then
+    begin
+      if last+BY_VAL <> i then
+      begin
+        WriteLn('for by i not incremented correctly');
+        halt(1);
+      end;
+    end;
+    last := i;
+  end;
+
+  if last <> b-1 then
+  begin
+    WriteLn('for by stopped too early');
+    Halt(1);
+  end;
+
+
+  for i := b downto a by -BY_VAL do
+  begin
+    if (i < a) or (i > b) then
+    begin
+      WriteLn('for by exceeded loop bounds');
+      Halt(1);
+    end;
+    if i <> b then
+    begin
+      if last-BY_VAL <> i then
+      begin
+        WriteLn('for by i not decremented correctly');
+        halt(1);
+      end;
+    end;
+    last := i;
+  end;
+  
+  if last <> a+1 then
+  begin
+    WriteLn('for by stopped too early');
+    Halt(1);
+  end;
+
+end.
Index: test/tforbyunrolled01.pp
===================================================================
--- test/tforbyunrolled01.pp	(revision 0)
+++ test/tforbyunrolled01.pp	(working copy)
@@ -0,0 +1,38 @@
+{ %OPT=-Ooloopunroll }
+{$mode objfpc}
+
+{ check for looping past end of intsize and begining}
+var
+  i: integer;
+  j: cardinal;
+begin
+  //check past end
+  for i := high(integer)-1 to high(integer) by 2 do
+    if i < high(integer)-1 then
+      begin
+        WriteLn('for by failed high integer: 0x', hexStr(j, 8));
+        halt(1); // we've looped past maxint
+      end;
+
+  for j := high(cardinal)-1 to high(cardinal) by 2 do
+    if j < high(cardinal)-1 then
+      begin
+        WriteLn('for by failed high cardinal: 0x', hexStr(j, 8));
+        halt(1);
+      end;
+
+  // check past beginning
+  for i := Low(integer)+1 downto Low(integer) by -2 do
+    if i > Low(integer)+1 then
+      begin
+        WriteLn('for by failed low integer: 0x', hexStr(j, 8));
+        halt(1);
+      end;
+
+  for j := Low(cardinal)+1 downto Low(cardinal) by -2 do
+    if j > Low(cardinal)+1 then
+      begin
+        WriteLn('for by failed low cardinal: 0x', hexStr(j, 8));
+        halt(1);
+      end;
+end.
Index: test/tforbyunrolled02.pp
===================================================================
--- test/tforbyunrolled02.pp	(revision 0)
+++ test/tforbyunrolled02.pp	(working copy)
@@ -0,0 +1,63 @@
+{ %OPT=-Ooloopunroll }
+{$mode objfpc}
+var
+  i,
+  a,
+  b: integer;
+  last: Integer;
+const
+  BY_VAL=3;
+begin
+  Randomize;
+  a := Random(500); // to get a number the program must determine at runtime
+  b := a + 100;
+  for i := a to b by BY_VAL do
+  begin
+    if (i < a) or (i > b) then
+    begin
+      WriteLn('for by exceeded loop bounds');
+      Halt(1);
+    end;
+    if i <> a then
+    begin
+      if last+BY_VAL <> i then
+      begin
+        WriteLn('for by i not incremented correctly');
+        halt(1);
+      end;
+    end;
+    last := i;
+  end;
+
+  if last <> b-1 then
+  begin
+    WriteLn('for by stopped too early');
+    Halt(1);
+  end;
+
+
+  for i := b downto a by -BY_VAL do
+  begin
+    if (i < a) or (i > b) then
+    begin
+      WriteLn('for by exceeded loop bounds');
+      Halt(1);
+    end;
+    if i <> b then
+    begin
+      if last-BY_VAL <> i then
+      begin
+        WriteLn('for by i not decremented correctly');
+        halt(1);
+      end;
+    end;
+    last := i;
+  end;
+
+  if last <> a+1 then
+  begin
+    WriteLn('for by stopped too early');
+    Halt(1);
+  end;
+
+end.
forby_tests.patch (5,042 bytes)

AndrewH

2014-01-23 07:47

developer   ~0072613

I had to think about this solution a bit harder. This new patch for_by-noflags.patch as the name implies doesn't use flags. The testsuite results haven't changed and I added new tests to test for by in the forby_tests.patch

Now the temp to value is altered so it is a multiple of by. If from and to are static then the compiler does the math in pass 1. If either from or to is dynamic then the compiler generates some code to do it at runtime.

A side effect of not checking flags was I didn't have to move the compare to before the loop. And I removed the label with the jump I added.

Issue History

Date Modified Username Field Change
2014-01-17 05:14 AndrewH New Issue
2014-01-17 05:14 AndrewH File Added: for_step.patch
2014-01-17 09:13 Marco van de Voort Note Added: 0072509
2014-01-17 09:45 Marco van de Voort Note Edited: 0072509 View Revisions
2014-01-17 13:59 Sven Barth Note Added: 0072512
2014-01-17 14:02 Sven Barth Note Edited: 0072512 View Revisions
2014-01-17 14:50 AndrewH Note Added: 0072514
2014-01-17 16:50 Marco van de Voort Note Added: 0072516
2014-01-17 16:59 Marco van de Voort Note Edited: 0072516 View Revisions
2014-01-17 20:44 Florian Note Added: 0072521
2014-01-18 23:41 AndrewH File Added: for_by.patch
2014-01-18 23:53 AndrewH Note Added: 0072535
2014-01-18 23:56 AndrewH Note Edited: 0072535 View Revisions
2014-01-19 00:02 AndrewH Note Added: 0072536
2014-01-19 00:09 AndrewH Note Edited: 0072514 View Revisions
2014-01-19 00:59 AndrewH Note Edited: 0072536 View Revisions
2014-01-19 16:02 AndrewH File Deleted: for_by.patch
2014-01-19 16:02 AndrewH File Added: for_by.patch
2014-01-19 16:09 AndrewH Note Added: 0072544
2014-01-19 16:11 AndrewH Note Edited: 0072544 View Revisions
2014-01-20 03:40 AndrewH File Deleted: for_step.patch
2014-01-20 03:41 AndrewH File Deleted: for_by.patch
2014-01-20 03:41 AndrewH File Added: for_by.patch
2014-01-20 03:45 AndrewH Note Added: 0072553
2014-01-20 04:48 AndrewH Description Updated View Revisions
2014-01-20 11:37 Jonas Maebe Note Added: 0072557
2014-01-23 07:28 AndrewH File Added: for_by-noflags.patch
2014-01-23 07:34 AndrewH File Added: forby_tests.patch
2014-01-23 07:47 AndrewH Note Added: 0072613
2015-02-19 17:33 AndrewH Description Updated View Revisions