Browse Source

* array access for properties added

peter 24 years ago
parent
commit
cb06c9bcb8

+ 10 - 6
compiler/globals.pas

@@ -129,10 +129,7 @@ interface
        nwthreadname : string;
        nwthreadname : string;
        nwcopyright  : string;
        nwcopyright  : string;
 
 
-
-       { type of currently parsed block }
-       { isn't full implemented (FK)    }
-       block_type : tblock_type;
+       block_type : tblock_type;         { type of currently parsed block }
 
 
        in_args : boolean;                { arguments must be checked especially }
        in_args : boolean;                { arguments must be checked especially }
        parsing_para_level : integer;     { parameter level, used to convert
        parsing_para_level : integer;     { parameter level, used to convert
@@ -1330,12 +1327,16 @@ implementation
      begin
      begin
         get_exepath;
         get_exepath;
 
 
-      { set global switches }
+      { reset globals }
         do_build:=false;
         do_build:=false;
         do_release:=false;
         do_release:=false;
         do_make:=true;
         do_make:=true;
         compile_level:=0;
         compile_level:=0;
         DLLsource:=false;
         DLLsource:=false;
+        inlining_procedure:=false;
+        resolving_forward:=false;
+        in_args:=false;
+        make_ref:=false;
 
 
       { Output }
       { Output }
         OutputFile:='';
         OutputFile:='';
@@ -1411,7 +1412,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.46  2001-10-20 20:30:20  peter
+  Revision 1.47  2001-10-21 12:33:05  peter
+    * array access for properties added
+
+  Revision 1.46  2001/10/20 20:30:20  peter
     * read only typed const support, switch $J-
     * read only typed const support, switch $J-
 
 
   Revision 1.45  2001/10/16 15:10:34  jonas
   Revision 1.45  2001/10/16 15:10:34  jonas

+ 31 - 19
compiler/i386/n386cal.pas

@@ -279,6 +279,7 @@ implementation
          params : tnode;
          params : tnode;
          inlined : boolean;
          inlined : boolean;
          inlinecode : tprocinlinenode;
          inlinecode : tprocinlinenode;
+         store_parast_fixup,
          para_alignment,
          para_alignment,
          para_offset : longint;
          para_offset : longint;
          { instruction for alignement correction }
          { instruction for alignement correction }
@@ -286,10 +287,10 @@ implementation
          { we must pop this size also after !! }
          { we must pop this size also after !! }
 {        must_pop : boolean; }
 {        must_pop : boolean; }
          pop_size : longint;
          pop_size : longint;
-{$ifdef dummy}
-         push_size : longint;
-{$endif}
+{$ifdef OPTALIGN}
          pop_esp : boolean;
          pop_esp : boolean;
+         push_size : longint;
+{$endif OPTALIGN}
          pop_allowed : boolean;
          pop_allowed : boolean;
          regs_to_push : byte;
          regs_to_push : byte;
          constructorfailed : tasmlabel;
          constructorfailed : tasmlabel;
@@ -325,11 +326,13 @@ implementation
            begin
            begin
               inlined:=true;
               inlined:=true;
               inlinecode:=tprocinlinenode(right);
               inlinecode:=tprocinlinenode(right);
+              right:=nil;
               { set it to the same lexical level as the local symtable, becuase
               { set it to the same lexical level as the local symtable, becuase
                 the para's are stored there }
                 the para's are stored there }
               tprocdef(procdefinition).parast.symtablelevel:=aktprocsym.definition.localst.symtablelevel;
               tprocdef(procdefinition).parast.symtablelevel:=aktprocsym.definition.localst.symtablelevel;
               if assigned(params) then
               if assigned(params) then
                 inlinecode.para_offset:=gettempofsizepersistant(inlinecode.para_size);
                 inlinecode.para_offset:=gettempofsizepersistant(inlinecode.para_size);
+              store_parast_fixup:=tprocdef(procdefinition).parast.address_fixup;
               tprocdef(procdefinition).parast.address_fixup:=inlinecode.para_offset;
               tprocdef(procdefinition).parast.address_fixup:=inlinecode.para_offset;
 {$ifdef extdebug}
 {$ifdef extdebug}
              Comment(V_debug,
              Comment(V_debug,
@@ -339,9 +342,6 @@ implementation
                strpnew('inlined parasymtable is at offset '
                strpnew('inlined parasymtable is at offset '
                +tostr(tprocdef(procdefinition).parast.address_fixup))));
                +tostr(tprocdef(procdefinition).parast.address_fixup))));
 {$endif extdebug}
 {$endif extdebug}
-              { disable further inlining of the same proc
-                in the args }
-              exclude(procdefinition.proccalloptions,pocall_inline);
            end;
            end;
          { only if no proc var }
          { only if no proc var }
          if inlined or
          if inlined or
@@ -385,11 +385,10 @@ implementation
          pop_size:=0;
          pop_size:=0;
          { no inc esp for inlined procedure
          { no inc esp for inlined procedure
            and for objects constructors PM }
            and for objects constructors PM }
-         if (inlined or
-            (right=nil)) and
-            (procdefinition.proctypeoption=potype_constructor) and
+         if inlined or
+            ((procdefinition.proctypeoption=potype_constructor) and
             { quick'n'dirty check if it is a class or an object }
             { quick'n'dirty check if it is a class or an object }
-            (resulttype.def.deftype=orddef) then
+             (resulttype.def.deftype=orddef)) then
            pop_allowed:=false
            pop_allowed:=false
          else
          else
            pop_allowed:=true;
            pop_allowed:=true;
@@ -417,7 +416,7 @@ implementation
 {$endif GDB}
 {$endif GDB}
              end;
              end;
           end;
           end;
-{$ifdef dummy}
+{$ifdef OPTALIGN}
          if pop_allowed and (cs_align in aktglobalswitches) then
          if pop_allowed and (cs_align in aktglobalswitches) then
            begin
            begin
               pop_esp:=true;
               pop_esp:=true;
@@ -428,18 +427,18 @@ implementation
               inc(push_size,12);
               inc(push_size,12);
               emit_reg_reg(A_MOV,S_L,R_ESP,R_EDI);
               emit_reg_reg(A_MOV,S_L,R_ESP,R_EDI);
               if (push_size mod 8)=0 then
               if (push_size mod 8)=0 then
-                emit_const_reg(A_AND,S_L,longint($fffffff8),R_ESP)
+                emit_const_reg(A_AND,S_L,$fffffff8,R_ESP)
               else
               else
                 begin
                 begin
                    emit_const_reg(A_SUB,S_L,push_size,R_ESP);
                    emit_const_reg(A_SUB,S_L,push_size,R_ESP);
-                   emit_const_reg(A_AND,S_L,longint($fffffff8),R_ESP);
+                   emit_const_reg(A_AND,S_L,$fffffff8,R_ESP);
                    emit_const_reg(A_SUB,S_L,push_size,R_ESP);
                    emit_const_reg(A_SUB,S_L,push_size,R_ESP);
                 end;
                 end;
               emit_reg(A_PUSH,S_L,R_EDI);
               emit_reg(A_PUSH,S_L,R_EDI);
            end
            end
          else
          else
-{$endif dummy}
            pop_esp:=false;
            pop_esp:=false;
+{$endif OPTALIGN}
          if (not is_void(resulttype.def)) and
          if (not is_void(resulttype.def)) and
             ret_in_param(resulttype.def) then
             ret_in_param(resulttype.def) then
            begin
            begin
@@ -460,6 +459,13 @@ implementation
                      reset_reference(funcretref);
                      reset_reference(funcretref);
                      funcretref.offset:=gettempofsizepersistant(resulttype.def.size);
                      funcretref.offset:=gettempofsizepersistant(resulttype.def.size);
                      funcretref.base:=procinfo^.framepointer;
                      funcretref.base:=procinfo^.framepointer;
+{$ifdef extdebug}
+                     Comment(V_debug,'function return value is at offset '
+                                     +tostr(funcretref.offset));
+                     exprasmlist.concat(tai_asm_comment.create(
+                                         strpnew('function return value is at offset '
+                                                 +tostr(funcretref.offset))));
+{$endif extdebug}
                   end
                   end
                 else
                 else
                   gettempofsizereference(resulttype.def.size,funcretref);
                   gettempofsizereference(resulttype.def.size,funcretref);
@@ -987,8 +993,6 @@ implementation
               else { inlined proc }
               else { inlined proc }
                 { inlined code is in inlinecode }
                 { inlined code is in inlinecode }
                 begin
                 begin
-                   { set poinline again }
-                   include(procdefinition.proccalloptions,pocall_inline);
                    { process the inlinecode }
                    { process the inlinecode }
                    secondpass(inlinecode);
                    secondpass(inlinecode);
                    { free the args }
                    { free the args }
@@ -1097,8 +1101,10 @@ implementation
                 else if pushedparasize<>0 then
                 else if pushedparasize<>0 then
                   emit_const_reg(A_ADD,S_L,pushedparasize,R_ESP);
                   emit_const_reg(A_ADD,S_L,pushedparasize,R_ESP);
              end;
              end;
+{$ifdef OPTALIGN}
          if pop_esp then
          if pop_esp then
            emit_reg(A_POP,S_L,R_ESP);
            emit_reg(A_POP,S_L,R_ESP);
+{$endif OPTALIGN}
       dont_call:
       dont_call:
          pushedparasize:=oldpushedparasize;
          pushedparasize:=oldpushedparasize;
          unused:=unusedregisters;
          unused:=unusedregisters;
@@ -1348,11 +1354,14 @@ implementation
               pp:=tbinarynode(pp.right);
               pp:=tbinarynode(pp.right);
            end;
            end;
          if inlined then
          if inlined then
-           ungetpersistanttemp(inlinecode.retoffset);
+           begin
+             ungetpersistanttemp(inlinecode.retoffset);
+             tprocdef(procdefinition).parast.address_fixup:=store_parast_fixup;
+             right:=inlinecode;
+           end;
          if assigned(params) then
          if assigned(params) then
            params.free;
            params.free;
 
 
-
          { from now on the result can be freed normally }
          { from now on the result can be freed normally }
          if inlined and ret_in_param(resulttype.def) then
          if inlined and ret_in_param(resulttype.def) then
            persistanttemptonormal(funcretref.offset);
            persistanttemptonormal(funcretref.offset);
@@ -1588,7 +1597,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.33  2001-09-09 08:50:15  jonas
+  Revision 1.34  2001-10-21 12:33:07  peter
+    * array access for properties added
+
+  Revision 1.33  2001/09/09 08:50:15  jonas
     * when calling an inline procedure inside a nested procedure, the
     * when calling an inline procedure inside a nested procedure, the
       framepointer was being pushed on the stack, but this pushed framepointer
       framepointer was being pushed on the stack, but this pushed framepointer
       was never used nor removed from the stack again after the inlining was
       was never used nor removed from the stack again after the inlining was

+ 6 - 2
compiler/msg/errore.msg

@@ -305,7 +305,7 @@ scan_w_appname_not_support=02060_W_APPNAME is only supported for PalmOS
 #
 #
 # Parser
 # Parser
 #
 #
-# 03179 is the last used one
+# 03181 is the last used one
 #
 #
 % \section{Parser messages}
 % \section{Parser messages}
 % This section lists all parser messages. The parser takes care of the
 % This section lists all parser messages. The parser takes care of the
@@ -931,6 +931,10 @@ parser_e_self_call_by_value=03179_E_Self must be a normal (call-by-value) parame
 % You can't declare self as a const or var parameter, it must always be
 % You can't declare self as a const or var parameter, it must always be
 % a call-by-value parameter
 % a call-by-value parameter
 parser_e_interface_has_no_guid=03180_E_Interface "$1" has no interface identification
 parser_e_interface_has_no_guid=03180_E_Interface "$1" has no interface identification
+% When you want to assign an interface to a constant, then the interface
+% must have a GUID value set.
+parser_e_illegal_field_or_method=03181_E_Unknown class field or method identifier "$1"
+% Properties must refer to a field or method in the same class.
 % \end{description}
 % \end{description}
 #
 #
 # Type Checking
 # Type Checking
@@ -1194,7 +1198,7 @@ sym_w_wrong_C_pack=05034_W_Type "$1" is not aligned correctly in current record
 % Arrays with sizes not multiples of 4 will be wrongly aligned
 % Arrays with sizes not multiples of 4 will be wrongly aligned
 % for C structures.
 % for C structures.
 sym_e_illegal_field=05035_E_Unknown record field identifier "$1"
 sym_e_illegal_field=05035_E_Unknown record field identifier "$1"
-% The field doesn't exist in the record definition.
+% The field doesn't exist in the record/object definition.
 sym_n_uninitialized_local_variable=05036_W_Local variable "$1" does not seem to be initialized
 sym_n_uninitialized_local_variable=05036_W_Local variable "$1" does not seem to be initialized
 sym_n_uninitialized_variable=05037_W_Variable "$1" does not seem to be initialized
 sym_n_uninitialized_variable=05037_W_Variable "$1" does not seem to be initialized
 % These messages are displayed if the compiler thinks that a variable will
 % These messages are displayed if the compiler thinks that a variable will

+ 3 - 2
compiler/msgidx.inc

@@ -258,6 +258,7 @@ const
   parser_e_varargs_need_cdecl_and_external=03178;
   parser_e_varargs_need_cdecl_and_external=03178;
   parser_e_self_call_by_value=03179;
   parser_e_self_call_by_value=03179;
   parser_e_interface_has_no_guid=03180;
   parser_e_interface_has_no_guid=03180;
+  parser_e_illegal_field_or_method=03181;
   type_e_mismatch=04000;
   type_e_mismatch=04000;
   type_e_incompatible_types=04001;
   type_e_incompatible_types=04001;
   type_e_not_equal_types=04002;
   type_e_not_equal_types=04002;
@@ -600,9 +601,9 @@ const
   option_info=11024;
   option_info=11024;
   option_help_pages=11025;
   option_help_pages=11025;
 
 
-  MsgTxtSize = 33556;
+  MsgTxtSize = 33610;
 
 
   MsgIdxMax : array[1..20] of longint=(
   MsgIdxMax : array[1..20] of longint=(
-    17,61,181,38,41,41,98,17,35,42,
+    17,61,182,38,41,41,98,17,35,42,
     30,1,1,1,1,1,1,1,1,1
     30,1,1,1,1,1,1,1,1,1
   );
   );

+ 180 - 182
compiler/msgtxt.inc

@@ -1,7 +1,7 @@
 {$ifdef Delphi}
 {$ifdef Delphi}
-const msgtxt : array[0..000139] of string[240]=(
+const msgtxt : array[0..000140] of string[240]=(
 {$else Delphi}
 {$else Delphi}
-const msgtxt : array[0..000139,1..240] of char=(
+const msgtxt : array[0..000140,1..240] of char=(
 {$endif Delphi}
 {$endif Delphi}
   '01000_T_Compiler: $1'#000+
   '01000_T_Compiler: $1'#000+
   '01001_D_Compiler OS: $1'#000+
   '01001_D_Compiler OS: $1'#000+
@@ -292,531 +292,529 @@ const msgtxt : array[0..000139,1..240] of char=(
   '03178_E_VarArgs directive without CDecl and External'#000+
   '03178_E_VarArgs directive without CDecl and External'#000+
   '03179_E_Self must be a normal (call-by-value) parameter'#000+
   '03179_E_Self must be a normal (call-by-value) parameter'#000+
   '03180_E_Interface "$1" has no interface identification'#000+
   '03180_E_Interface "$1" has no interface identification'#000+
+  '03181_E_Unknown class field o','r method identifier "$1"'#000+
   '04000_E_Type mismatch'#000+
   '04000_E_Type mismatch'#000+
-  '04001_E','_Incompatible types: got "$1" expected "$2"'#000+
+  '04001_E_Incompatible types: got "$1" expected "$2"'#000+
   '04002_E_Type mismatch between "$1" and "$2"'#000+
   '04002_E_Type mismatch between "$1" and "$2"'#000+
   '04003_E_Type identifier expected'#000+
   '04003_E_Type identifier expected'#000+
   '04004_E_Variable identifier expected'#000+
   '04004_E_Variable identifier expected'#000+
-  '04005_E_Integer expression expected, but got "$1"'#000+
-  '04006_E_Boolean expression expec','ted, but got "$1"'#000+
+  '04005_E_Integer expression e','xpected, but got "$1"'#000+
+  '04006_E_Boolean expression expected, but got "$1"'#000+
   '04007_E_Ordinal expression expected'#000+
   '04007_E_Ordinal expression expected'#000+
   '04008_E_pointer type expected, but got "$1"'#000+
   '04008_E_pointer type expected, but got "$1"'#000+
   '04009_E_class type expected, but got "$1"'#000+
   '04009_E_class type expected, but got "$1"'#000+
-  '04010_E_Variable or type indentifier expected'#000+
+  '04010_E_Variable or type indentifier expected'#000,
   '04011_E_Can'#039't evaluate constant expression'#000+
   '04011_E_Can'#039't evaluate constant expression'#000+
-  '04012_E_Set',' elements are not compatible'#000+
+  '04012_E_Set elements are not compatible'#000+
   '04013_E_Operation not implemented for sets'#000+
   '04013_E_Operation not implemented for sets'#000+
   '04014_W_Automatic type conversion from floating type to COMP which is '+
   '04014_W_Automatic type conversion from floating type to COMP which is '+
   'an integer type'#000+
   'an integer type'#000+
-  '04015_H_use DIV instead to get an integer result'#000+
-  '04016_E_string types doesn'#039't matc','h, because of $V+ mode'#000+
+  '04015_H_use DIV instead to g','et an integer result'#000+
+  '04016_E_string types doesn'#039't match, because of $V+ mode'#000+
   '04017_E_succ or pred on enums with assignments not possible'#000+
   '04017_E_succ or pred on enums with assignments not possible'#000+
   '04018_E_Can'#039't read or write variables of this type'#000+
   '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+
   '04019_E_Can'#039't use readln or writeln on typed file'#000+
-  '04020_E_Can'#039't use read or write on untyped file.'#000+
-  '04021_E','_Type conflict between set elements'#000+
+  '04','020_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/dword'#000+
   '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
   '04023_E_Integer or real expression expected'#000+
   '04023_E_Integer or real expression expected'#000+
-  '04024_E_Wrong type "$1" in array constructor'#000+
-  '04025_E_Incompatible type for arg no. $1: Got "$2", e','xpected "$3"'#000+
+  '04024_E_Wrong type "$1" in array constructor',#000+
+  '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
   '04026_E_Method (variable) and Procedure (variable) are not compatible'#000+
   '04026_E_Method (variable) and Procedure (variable) are not compatible'#000+
   '04027_E_Illegal constant passed to internal math function'#000+
   '04027_E_Illegal constant passed to internal math function'#000+
   '04028_E_Can'#039't get the address of constants'#000+
   '04028_E_Can'#039't get the address of constants'#000+
-  '04029_E_Argument can'#039't be assigned to'#000+
-  '04030_E_Can'#039't assi','gn local procedure/function to procedure varia'+
-  'ble'#000+
+  '04','029_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+
   '04032_E_Can'#039't assign values to const variable'#000+
   '04033_E_Array type required'#000+
   '04033_E_Array type required'#000+
-  '04034_E_interface type expected, but got "$1"'#000+
-  '04035_W_Mixing signed expres','sions and cardinals gives a 64bit result'+
-  #000+
+  '04034_E_interface ty','pe expected, but got "$1"'#000+
+  '04035_W_Mixing signed expressions and cardinals gives a 64bit result'#000+
   '04036_W_Mixing signed expressions and cardinals here may cause a range'+
   '04036_W_Mixing signed expressions and cardinals here may cause a range'+
   ' check error'#000+
   ' check error'#000+
   '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
   '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
-  '05000_E_Identifier not found "$1"'#000+
-  '05001_F_Internal Erro','r in SymTableStack()'#000+
+  '0','5000_E_Identifier not found "$1"'#000+
+  '05001_F_Internal Error in SymTableStack()'#000+
   '05002_E_Duplicate identifier "$1"'#000+
   '05002_E_Duplicate identifier "$1"'#000+
   '05003_H_Identifier already defined in $1 at line $2'#000+
   '05003_H_Identifier already defined in $1 at line $2'#000+
   '05004_E_Unknown identifier "$1"'#000+
   '05004_E_Unknown identifier "$1"'#000+
   '05005_E_Forward declaration not solved "$1"'#000+
   '05005_E_Forward declaration not solved "$1"'#000+
-  '05006_F_Identifier type already defined as type'#000+
-  '05007_E_E','rror in type definition'#000+
+  '050','06_F_Identifier type already defined as type'#000+
+  '05007_E_Error in type definition'#000+
   '05008_E_Type identifier not defined'#000+
   '05008_E_Type identifier not defined'#000+
   '05009_E_Forward type not resolved "$1"'#000+
   '05009_E_Forward type not resolved "$1"'#000+
   '05010_E_Only static variables can be used in static methods or outside'+
   '05010_E_Only static variables can be used in static methods or outside'+
   ' methods'#000+
   ' methods'#000+
-  '05011_E_Invalid call to tvarsym.mangledname()'#000+
-  '05012_F_record o','r class type expected'#000+
+  '05011_E_','Invalid call to tvarsym.mangledname()'#000+
+  '05012_F_record or class type expected'#000+
   '05013_E_Instances of classes or objects with an abstract method are no'+
   '05013_E_Instances of classes or objects with an abstract method are no'+
   't allowed'#000+
   't allowed'#000+
   '05014_W_Label not defined "$1"'#000+
   '05014_W_Label not defined "$1"'#000+
   '05015_E_Label used but not defined "$1"'#000+
   '05015_E_Label used but not defined "$1"'#000+
-  '05016_E_Illegal label declaration'#000+
-  '05017_E_GOTO and LABEL are not su','pported (use switch -Sg)'#000+
+  '05016_E_Illeg','al label declaration'#000+
+  '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
   '05018_E_Label not found'#000+
   '05018_E_Label not found'#000+
   '05019_E_identifier isn'#039't a label'#000+
   '05019_E_identifier isn'#039't a label'#000+
   '05020_E_label already defined'#000+
   '05020_E_label already defined'#000+
   '05021_E_illegal type declaration of set elements'#000+
   '05021_E_illegal type declaration of set elements'#000+
-  '05022_E_Forward class definition not resolved "$1"'#000+
-  '05023_H_Unit "$1" not used i','n $2'#000+
+  '05022_E_Forward class def','inition not resolved "$1"'#000+
+  '05023_H_Unit "$1" not used in $2'#000+
   '05024_H_Parameter "$1" not used'#000+
   '05024_H_Parameter "$1" not used'#000+
   '05025_N_Local variable "$1" not used'#000+
   '05025_N_Local variable "$1" not used'#000+
   '05026_H_Value parameter "$1" is assigned but never used'#000+
   '05026_H_Value parameter "$1" is assigned but never used'#000+
   '05027_N_Local variable "$1" is assigned but never used'#000+
   '05027_N_Local variable "$1" is assigned but never used'#000+
-  '05028_H_Local $1 "$2" is not used'#000+
-  '05029_N_Private field',' "$1.$2" is never used'#000+
+  '0','5028_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+
   '05031_N_Private method "$1.$2" never used'#000+
   '05032_E_Set type expected'#000+
   '05032_E_Set type expected'#000+
-  '05033_W_Function result does not seem to be set'#000+
-  '05034_W_Type "$1" is not aligned correctly i','n current record for C'#000+
+  '05033_W_Function result does not seem ','to be set'#000+
+  '05034_W_Type "$1" is not aligned correctly in current record for C'#000+
   '05035_E_Unknown record field identifier "$1"'#000+
   '05035_E_Unknown record field identifier "$1"'#000+
   '05036_W_Local variable "$1" does not seem to be initialized'#000+
   '05036_W_Local variable "$1" does 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 initialized'#000+
-  '05038_E_identifier idents no member "$1"'#000+
-  '05039_B_Found dec','laration: $1'#000+
+  '0503','8_E_identifier idents no member "$1"'#000+
+  '05039_B_Found declaration: $1'#000+
   '05040_E_Data segment too large (max. 2GB)'#000+
   '05040_E_Data segment too large (max. 2GB)'#000+
   '06000_E_BREAK not allowed'#000+
   '06000_E_BREAK not allowed'#000+
   '06001_E_CONTINUE not allowed'#000+
   '06001_E_CONTINUE not allowed'#000+
   '06002_E_Expression too complicated - FPU stack overflow'#000+
   '06002_E_Expression too complicated - FPU stack overflow'#000+
-  '06003_E_Illegal expression'#000+
+  '06003_E_Illegal expr','ession'#000+
   '06004_E_Invalid integer expression'#000+
   '06004_E_Invalid integer expression'#000+
-  '06005_E_Ille','gal qualifier'#000+
+  '06005_E_Illegal qualifier'#000+
   '06006_E_High range limit < low range limit'#000+
   '06006_E_High range limit < low range limit'#000+
   '06007_E_Illegal counter variable'#000+
   '06007_E_Illegal counter variable'#000+
   '06008_E_Can'#039't determine which overloaded function to call'#000+
   '06008_E_Can'#039't determine which overloaded function to call'#000+
-  '06009_E_Parameter list size exceeds 65535 bytes'#000+
+  '06009_E_Parameter list size exceeds 65','535 bytes'#000+
   '06010_E_Illegal type conversion'#000+
   '06010_E_Illegal type conversion'#000+
-  '06011_D_Conv','ersion between ordinals and pointers is not portable acr'+
-  'oss platforms'#000+
+  '06011_D_Conversion between ordinals and pointers is not portable acros'+
+  's platforms'#000+
   '06012_E_File types must be var parameters'#000+
   '06012_E_File types must be var parameters'#000+
   '06013_E_The use of a far pointer isn'#039't allowed there'#000+
   '06013_E_The use of a far pointer isn'#039't allowed there'#000+
-  '06014_E_illegal call by reference parameters'#000+
-  '06015_E_EXPORT declared functi','ons can'#039't be called'#000+
+  '06014_E_illegal call ','by reference parameters'#000+
+  '06015_E_EXPORT declared functions can'#039't be called'#000+
   '06016_W_Possible illegal call of constructor or destructor (doesn'#039't'+
   '06016_W_Possible illegal call of constructor or destructor (doesn'#039't'+
   ' match to this context)'#000+
   ' match to this context)'#000+
   '06017_N_Inefficient code'#000+
   '06017_N_Inefficient code'#000+
   '06018_W_unreachable code'#000+
   '06018_W_unreachable code'#000+
-  '06019_E_procedure call with stackframe ESP/SP'#000+
-  '06020_E_Abstract methods can'#039't be',' called directly'#000+
+  '06019_E_procedure call wi','th stackframe ESP/SP'#000+
+  '06020_E_Abstract methods can'#039't be called directly'#000+
   '06021_F_Internal Error in getfloatreg(), allocation failure'#000+
   '06021_F_Internal Error in getfloatreg(), allocation failure'#000+
   '06022_F_Unknown float type'#000+
   '06022_F_Unknown float type'#000+
   '06023_F_SecondVecn() base defined twice'#000+
   '06023_F_SecondVecn() base defined twice'#000+
   '06024_F_Extended cg68k not supported'#000+
   '06024_F_Extended cg68k not supported'#000+
-  '06025_F_32-bit unsigned not supported in MC68000 mode'#000+
-  '06026','_F_Internal Error in secondinline()'#000+
+  '06025','_F_32-bit unsigned not supported in MC68000 mode'#000+
+  '06026_F_Internal Error in secondinline()'#000+
   '06027_D_Register $1 weight $2 $3'#000+
   '06027_D_Register $1 weight $2 $3'#000+
   '06028_E_Stack limit excedeed in local routine'#000+
   '06028_E_Stack limit excedeed in local routine'#000+
   '06029_D_Stack frame is omitted'#000+
   '06029_D_Stack frame is omitted'#000+
-  '06031_E_Object or class methods can'#039't be inline.'#000+
+  '06031_E_Object or class methods can'#039't be',' inline.'#000+
   '06032_E_Procvar calls can'#039't be inline.'#000+
   '06032_E_Procvar calls can'#039't be inline.'#000+
-  '06033_','E_No code for inline procedure stored'#000+
+  '06033_E_No code for inline procedure stored'#000+
   '06034_E_Direct call of interrupt procedure "$1" is not possible'#000+
   '06034_E_Direct call of interrupt procedure "$1" is not possible'#000+
   '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
   '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
-  'sed, use (set)length instead'#000+
-  '06036_E_Include and exclude not implemented',' in this case'#000+
+  'sed, use (set)leng','th instead'#000+
+  '06036_E_Include and exclude not implemented in this case'#000+
   '06037_E_Constructors or destructors can not be called inside a '#039'wi'+
   '06037_E_Constructors or destructors can not be called inside a '#039'wi'+
   'th'#039' clause'#000+
   'th'#039' clause'#000+
   '06038_E_Cannot call message handler method directly'#000+
   '06038_E_Cannot call message handler method directly'#000+
-  '06039_E_Jump in or outside of an exception block'#000+
-  '06040_E_Control flow statements aren'#039't allowed i','n a finally bloc'+
-  'k'#000+
+  '06039_E_Jump in or outside of an exception ','block'#000+
+  '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
   '07000_D_Starting $1 styled assembler parsing'#000+
   '07000_D_Starting $1 styled assembler parsing'#000+
   '07001_D_Finished $1 styled assembler parsing'#000+
   '07001_D_Finished $1 styled assembler parsing'#000+
   '07002_E_Non-label pattern contains @'#000+
   '07002_E_Non-label pattern contains @'#000+
   '07003_W_Override operator not supported'#000+
   '07003_W_Override operator not supported'#000+
-  '07004_E_Error building record offset'#000+
-  '07005_E_OFFSET use','d without identifier'#000+
+  '0','7004_E_Error building record offset'#000+
+  '07005_E_OFFSET used without identifier'#000+
   '07006_E_TYPE used without identifier'#000+
   '07006_E_TYPE used without identifier'#000+
   '07007_E_Cannot use local variable or parameters here'#000+
   '07007_E_Cannot use local variable or parameters here'#000+
   '07008_E_need to use OFFSET here'#000+
   '07008_E_need to use OFFSET here'#000+
   '07009_E_need to use $ here'#000+
   '07009_E_need to use $ here'#000+
-  '07010_E_Cannot use multiple relocatable symbols'#000+
-  '07011_E_Relocatable sy','mbol can only be added'#000+
+  '07010_E_Cannot u','se multiple relocatable symbols'#000+
+  '07011_E_Relocatable symbol can only be added'#000+
   '07012_E_Invalid constant expression'#000+
   '07012_E_Invalid constant expression'#000+
   '07013_E_Relocatable symbol is not allowed'#000+
   '07013_E_Relocatable symbol is not allowed'#000+
   '07014_E_Invalid reference syntax'#000+
   '07014_E_Invalid reference syntax'#000+
   '07015_E_You can not reach $1 from that code'#000+
   '07015_E_You can not reach $1 from that code'#000+
-  '07016_E_Local symbols/labels aren'#039't allowed as references'#000+
-  '0701','7_E_Invalid base and index register usage'#000+
+  '07016_E_','Local symbols/labels aren'#039't allowed as references'#000+
+  '07017_E_Invalid base and index register usage'#000+
   '07018_W_Possible error in object field handling'#000+
   '07018_W_Possible error in object field handling'#000+
   '07019_E_Wrong scale factor specified'#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+
+  '07021_E_Invalid opera','nd type'#000+
   '07022_E_Invalid string as opcode operand: $1'#000+
   '07022_E_Invalid string as opcode operand: $1'#000+
-  '0','7023_W_@CODE and @DATA not supported'#000+
+  '07023_W_@CODE and @DATA not supported'#000+
   '07024_E_Null label references are not allowed'#000+
   '07024_E_Null label references are not allowed'#000+
   '07025_E_Divide by zero in asm evaluator'#000+
   '07025_E_Divide by zero in asm evaluator'#000+
   '07026_E_Illegal expression'#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+
   '07028_E_Invalid symbol reference'#000+
-  '07029_W_Fwait can cau','se emulation problems with emu387'#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+
   '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 assemb','ler'#000+
   '07033_E_Unsupported symbol type for operand'#000+
   '07033_E_Unsupported symbol type for operand'#000+
-  '07034_','E_Constant value out of bounds'#000+
+  '07034_E_Constant value out of bounds'#000+
   '07035_E_Error converting decimal $1'#000+
   '07035_E_Error converting decimal $1'#000+
   '07036_E_Error converting octal $1'#000+
   '07036_E_Error converting octal $1'#000+
   '07037_E_Error converting binary $1'#000+
   '07037_E_Error converting binary $1'#000+
   '07038_E_Error converting hexadecimal $1'#000+
   '07038_E_Error converting hexadecimal $1'#000+
-  '07039_H_$1 translated to $2'#000+
-  '07040_W_$1 is associated to an overl','oaded function'#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 outside a method'#000+
   '07042_E_Cannot use OLDEBP outside a nested procedure'#000+
   '07042_E_Cannot use OLDEBP outside a nested procedure'#000+
   '07043_W_Procedures can'#039't return any value in asm code'#000+
   '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+
+  '07044_E_SEG not support','ed'#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 destination or source size do not match'#000+
   '07047_E_Assembler syntax error'#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 const','ant'#000+
+  '07049_E_Assembler syntax er','ror in operand'#000+
+  '07050_E_Assembler syntax error in constant'#000+
   '07051_E_Invalid String expression'#000+
   '07051_E_Invalid String expression'#000+
   '07052_W_constant with symbol $1 for not 32bit address'#000+
   '07052_W_constant with symbol $1 for not 32bit address'#000+
   '07053_E_Unrecognized opcode $1'#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+
+  '07055_E_Invalid combination o','f prefix and opcode: $1'#000+
+  '07056_E_Invalid combination of override and opcode: $1'#000+
   '07057_E_Too many operands on line'#000+
   '07057_E_Too many operands on line'#000+
   '07058_W_NEAR ignored'#000+
   '07058_W_NEAR ignored'#000+
   '07059_W_FAR ignored'#000+
   '07059_W_FAR ignored'#000+
   '07060_E_Duplicate local symbol $1'#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+
+  '07062_E_Unknown la','bel identifier $1'#000+
   '07063_E_Invalid register name'#000+
   '07063_E_Invalid register name'#000+
-  '07064_','E_Invalid floating point register name'#000+
+  '07064_E_Invalid floating point register name'#000+
   '07065_E_NOR not supported'#000+
   '07065_E_NOR not supported'#000+
   '07066_W_Modulo not supported'#000+
   '07066_W_Modulo not supported'#000+
   '07067_E_Invalid floating point constant $1'#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+
+  '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+
   '07072_W_Identifier $1 supposed external'#000+
   '07073_E_Strings not allowed as constants'#000+
   '07073_E_Strings not allowed as constants'#000+
-  '07074_No type of variable specified'#000+
-  '07075_E_assembler code not returned to text section'#000,
+  '07074_No type of variable specifie','d'#000+
+  '07075_E_assembler code not returned to text section'#000+
   '07076_E_Not a directive or local symbol $1'#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+
   '07078_E_Dollar token is used without an identifier'#000+
   '07079_W_32bit constant created for address'#000+
   '07079_W_32bit constant created for address'#000+
-  '07080_N_.align is target specific, use .balign or .p2alig','n'#000+
+  '070','80_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 parameters'#000+
   '07082_E_Can'#039't access fields of objects/classes directly'#000+
   '07082_E_Can'#039't access fields of objects/classes directly'#000+
   '07083_E_No size specified and unable to determine the size of the oper'+
   '07083_E_No size specified and unable to determine the size of the oper'+
   'ands'#000+
   'ands'#000+
-  '07084_E_Cannot use RESULT in this function'#000+
-  '07085_H_RESU','LT is register $1'#000+
+  '0','7084_E_Cannot use RESULT in this function'#000+
+  '07085_H_RESULT is register $1'#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+
   '07087_W_"$1 %st(n)" translated into "$1 %st,%st(n)"'#000+
   '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
   '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
-  '07089_E_Char < not allowed here'#000+
-  '07090_E_Char > not allowe','d here'#000+
+  '070','89_E_Char < not allowed here'#000+
+  '07090_E_Char > not allowed here'#000+
   '07091_W_XDEF not supported'#000+
   '07091_W_XDEF not supported'#000+
   '07092_E_Invalid XDEF syntax'#000+
   '07092_E_Invalid XDEF syntax'#000+
   '07093_W_ALIGN not supported'#000+
   '07093_W_ALIGN not supported'#000+
   '07094_E_Inc and Dec cannot be together'#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+
+  '07096_E_Reglist invalid',' for opcode'#000+
   '07097_E_68020 mode required'#000+
   '07097_E_68020 mode required'#000+
-  '08000_F_Too ma','ny assembler files'#000+
+  '08000_F_Too many assembler files'#000+
   '08001_F_Selected assembler output not supported'#000+
   '08001_F_Selected assembler output not supported'#000+
   '08002_F_Comp not supported'#000+
   '08002_F_Comp not supported'#000+
   '08003_F_Direct not support for binary writers'#000+
   '08003_F_Direct not support for binary writers'#000+
-  '08004_E_Allocating of data is only allowed in bss section'#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+
+  '08006_E_Asm: Opcode $1 not in table'#000+
   '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08008_E_Asm: 16 Bit references not supported'#000+
   '08008_E_Asm: 16 Bit references not supported'#000+
   '08009_E_Asm: Invalid effective address'#000+
   '08009_E_Asm: Invalid effective address'#000+
-  '08010_E_Asm: Immediate or reference expected'#000+
-  '08011_E_Asm: $1 value ex','ceeds bounds $2'#000+
+  '08010_E_Asm: Im','mediate or reference expected'#000+
+  '08011_E_Asm: $1 value exceeds bounds $2'#000+
   '08012_E_Asm: Short jump is out of range $1'#000+
   '08012_E_Asm: Short jump is out of range $1'#000+
   '08013_E_Asm: Undefined label $1'#000+
   '08013_E_Asm: Undefined label $1'#000+
   '08014_E_Asm: Comp type not supported for this target'#000+
   '08014_E_Asm: Comp type not supported for this target'#000+
-  '08015_E_Asm: Extended type not supported for this target'#000+
+  '08015_E_Asm: Extended type not supported f','or this target'#000+
   '08016_E_Asm: Duplicate label $1'#000+
   '08016_E_Asm: Duplicate label $1'#000+
-  '09000_W','_Source operating system redefined'#000+
+  '09000_W_Source operating system redefined'#000+
   '09001_I_Assembling (pipe) $1'#000+
   '09001_I_Assembling (pipe) $1'#000+
   '09002_E_Can'#039't create assember file: $1'#000+
   '09002_E_Can'#039't create assember file: $1'#000+
   '09003_E_Can'#039't create object file: $1'#000+
   '09003_E_Can'#039't create object file: $1'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
-  '09005_E_Assembler $1 not found, switching to external assembli','ng'#000+
+  '09005_E_','Assembler $1 not found, switching to external assembling'#000+
   '09006_T_Using assembler: $1'#000+
   '09006_T_Using assembler: $1'#000+
   '09007_E_Error while assembling exitcode $1'#000+
   '09007_E_Error while assembling exitcode $1'#000+
   '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
   '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
   'ssembling'#000+
   'ssembling'#000+
   '09009_I_Assembling $1'#000+
   '09009_I_Assembling $1'#000+
-  '09010_I_Assembling smartlink $1'#000+
-  '09011_W_Object $1 not found, Linking',' may fail !'#000+
+  '09010_I_Assemb','ling smartlink $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+
   '09013_E_Error while linking'#000+
   '09014_E_Can'#039't call the linker, switching to external linking'#000+
   '09014_E_Can'#039't call the linker, switching to external linking'#000+
   '09015_I_Linking $1'#000+
   '09015_I_Linking $1'#000+
-  '09016_E_Util $1 not found, switching to external linking'#000+
-  '09017_T_Using ','util $1'#000+
+  '09016_E_Util $1 n','ot found, switching to external linking'#000+
+  '09017_T_Using util $1'#000+
   '09018_E_Creation of Executables not supported'#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+
   '09020_I_Closing script $1'#000+
-  '09021_E_resource compiler not found, switching to external mode'#000+
+  '09021_E_resource compiler not found, switching ','to external mode'#000+
   '09022_I_Compiling resource $1'#000+
   '09022_I_Compiling resource $1'#000+
-  '09023_T','_unit $1 can'#039't be static linked, switching to smart linki'+
-  'ng'#000+
+  '09023_T_unit $1 can'#039't be static linked, switching to smart linking'+
+  #000+
   '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
   '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
   #000+
   #000+
-  '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
-  'g'#000+
-  '09026_E_unit $1 can'#039't be smart or static link','ed'#000+
+  '09025_T_unit $1 can'#039't be shared linked, switching 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 linked'#000+
   '09027_E_unit $1 can'#039't be shared or static linked'#000+
   '09028_F_Can'#039't post process executable $1'#000+
   '09028_F_Can'#039't post process executable $1'#000+
   '09029_F_Can'#039't open executable $1'#000+
   '09029_F_Can'#039't open executable $1'#000+
   '09030_X_Size of Code: $1 bytes'#000+
   '09030_X_Size of Code: $1 bytes'#000+
-  '09031_X_Size of initialized data: $1 bytes'#000+
-  '09032_X_Size of uninitialized data: $1 b','ytes'#000+
+  '09031_X_Size of initialized d','ata: $1 bytes'#000+
+  '09032_X_Size of uninitialized data: $1 bytes'#000+
   '09033_X_Stack space reserved: $1 bytes'#000+
   '09033_X_Stack space reserved: $1 bytes'#000+
   '09034_X_Stack space commited: $1 bytes'#000+
   '09034_X_Stack space commited: $1 bytes'#000+
   '10000_T_Unitsearch: $1'#000+
   '10000_T_Unitsearch: $1'#000+
   '10001_T_PPU Loading $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+
   '10003_U_PPU Flags: $1'#000+
-  '10004_U_PPU Crc: $1'#000+
+  '10004_U_PPU Cr','c: $1'#000+
   '10005_U_PPU Time: $1'#000+
   '10005_U_PPU Time: $1'#000+
-  '10006_U_PPU File too short'#000,
+  '10006_U_PPU File too short'#000+
   '10007_U_PPU Invalid 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+
   '10008_U_PPU Invalid Version $1'#000+
   '10009_U_PPU is compiled for an other processor'#000+
   '10009_U_PPU is compiled for an other processor'#000+
   '10010_U_PPU is compiled for an other target'#000+
   '10010_U_PPU is compiled for an other target'#000+
-  '10011_U_PPU Source: $1'#000+
+  '10011_U_PPU Sou','rce: $1'#000+
   '10012_U_Writing $1'#000+
   '10012_U_Writing $1'#000+
-  '10013_F_Can'#039't Write PPU-Fil','e'#000+
+  '10013_F_Can'#039't Write PPU-File'#000+
   '10014_F_Error reading PPU-File'#000+
   '10014_F_Error reading PPU-File'#000+
   '10015_F_unexpected end of PPU-File'#000+
   '10015_F_unexpected end of PPU-File'#000+
   '10016_F_Invalid PPU-File entry: $1'#000+
   '10016_F_Invalid PPU-File entry: $1'#000+
   '10017_F_PPU Dbx count problem'#000+
   '10017_F_PPU Dbx count problem'#000+
   '10018_E_Illegal unit name: $1'#000+
   '10018_E_Illegal unit name: $1'#000+
-  '10019_F_Too much units'#000+
+  '10019_F_Too much units'#000,
   '10020_F_Circular unit reference between $1 and $2'#000+
   '10020_F_Circular unit reference between $1 and $2'#000+
-  '1002','1_F_Can'#039't compile unit $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'#000+
   '10022_F_Can'#039't find unit $1'#000+
   '10023_W_Unit $1 was not found but $2 exists'#000+
   '10023_W_Unit $1 was not found but $2 exists'#000+
   '10024_F_Unit $1 searched but $2 found'#000+
   '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 err','ors compiling module, stopping'#000+
+  '10025_W_Compiling the system ','unit requires the -Us switch'#000+
+  '10026_F_There were $1 errors compiling module, stopping'#000+
   '10027_U_Load from $1 ($2) unit $3'#000+
   '10027_U_Load from $1 ($2) unit $3'#000+
   '10028_U_Recompiling $1, checksum changed for $2'#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 lib is older than ppufile'#000+
+  '10030_U_Recompiling unit, stati','c lib is older than ppufile'#000+
+  '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
   '10033_U_Recompiling unit, obj is older than asm'#000+
   '10033_U_Recompiling unit, obj is older than asm'#000+
   '10034_U_Parsing interface of $1'#000+
   '10034_U_Parsing interface of $1'#000+
-  '10035_U_Parsing implementation of $1'#000+
-  '10036_U_Second load for unit ','$1'#000+
+  '10035_U_Pars','ing 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+
   '10038_H_Conditional $1 was not set at startup in last compilation of $'+
   '10038_H_Conditional $1 was not set at startup in last compilation of $'+
   '2'#000+
   '2'#000+
   '10039_H_Conditional $1 was set at startup in last compilation of $2'#000+
   '10039_H_Conditional $1 was set at startup in last compilation of $2'#000+
-  '10040_W_Can'#039't recompile unit $1, but found modifed include file','s'+
+  '10040_W_C','an'#039't recompile unit $1, but found modifed include files'+
   #000+
   #000+
   '10041_H_File $1 is newer than Release PPU file $2'#000+
   '10041_H_File $1 is newer than Release PPU file $2'#000+
   '11000_$1 [options] <inputfile> [options]'#000+
   '11000_$1 [options] <inputfile> [options]'#000+
   '11001_W_Only one source file supported'#000+
   '11001_W_Only one source file supported'#000+
   '11002_W_DEF file can be created only for OS/2'#000+
   '11002_W_DEF file can be created only for OS/2'#000+
-  '11003_E_nested response files are not supported'#000+
-  '11004_F_No sou','rce file name in command line'#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 config file'#000+
   '11006_E_Illegal parameter: $1'#000+
   '11006_E_Illegal parameter: $1'#000+
   '11007_H_-? writes help pages'#000+
   '11007_H_-? writes help pages'#000+
   '11008_F_Too many config files nested'#000+
   '11008_F_Too many config files nested'#000+
-  '11009_F_Unable to open file $1'#000+
+  '11009_F_Unable to op','en file $1'#000+
   '11010_D_Reading further options from $1'#000+
   '11010_D_Reading further options from $1'#000+
-  '110','11_W_Target is already set to: $1'#000+
+  '11011_W_Target is already set to: $1'#000+
   '11012_W_Shared libs not supported on DOS platform, reverting to static'+
   '11012_W_Shared libs not supported on DOS platform, reverting to static'+
   #000+
   #000+
   '11013_F_too many IF(N)DEFs'#000+
   '11013_F_too many IF(N)DEFs'#000+
   '11014_F_too many ENDIFs'#000+
   '11014_F_too many ENDIFs'#000+
-  '11015_F_open conditional at the end of the file'#000+
-  '11016_W_Debug information generation',' is not supported by this execut'+
-  'able'#000+
+  '11015_F_open conditional at th','e end of the file'#000+
+  '11016_W_Debug information generation is not supported by this executab'+
+  'le'#000+
   '11017_H_Try recompiling with -dGDB'#000+
   '11017_H_Try recompiling with -dGDB'#000+
   '11018_E_You are using the obsolete switch $1'#000+
   '11018_E_You are using the obsolete switch $1'#000+
   '11019_E_You are using the obsolete switch $1, please use $2'#000+
   '11019_E_You are using the obsolete switch $1, please use $2'#000+
-  '11020_N_Switching assembler to default source writing assembler',#000+
+  '11020_N_S','witching assembler to default source writing assembler'#000+
   '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
   '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
   '11022_W_"$1" assembler use forced'#000+
   '11022_W_"$1" assembler use forced'#000+
   '11026_T_Reading options from file $1'#000+
   '11026_T_Reading options from file $1'#000+
   '11027_T_Reading options from environment $1'#000+
   '11027_T_Reading options from environment $1'#000+
-  '11028_D_Handling option "$1"'#000+
+  '110','28_D_Handling option "$1"'#000+
   '11029__*** press enter ***'#000+
   '11029__*** press enter ***'#000+
-  '1','1023_Free Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'+
-  #010+
+  '11023_Free Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'#010+
   'Copyright (c) 1993-2000 by Florian Klaempfl'#000+
   'Copyright (c) 1993-2000 by Florian Klaempfl'#000+
   '11024_Free Pascal Compiler version $FPCVER'#010+
   '11024_Free Pascal Compiler version $FPCVER'#010+
   #010+
   #010+
   'Compiler Date  : $FPCDATE'#010+
   'Compiler Date  : $FPCDATE'#010+
-  'Compiler Target: $FPCTARGET'#010+
+  'Comp','iler Target: $FPCTARGET'#010+
   #010+
   #010+
   'Supported targets:'#010+
   'Supported targets:'#010+
-  '  $OSTARGE','TS'#010+
+  '  $OSTARGETS'#010+
   #010+
   #010+
   'This program comes under the GNU General Public Licence'#010+
   'This program comes under the GNU General Public Licence'#010+
   'For more information read COPYING.FPC'#010+
   'For more information read COPYING.FPC'#010+
   #010+
   #010+
   'Report bugs,suggestions etc to:'#010+
   'Report bugs,suggestions etc to:'#010+
   '                 [email protected]'#000+
   '                 [email protected]'#000+
-  '11025_**0*_put + after a boolean switch option to enable it, - to disa',
-  'ble it'#010+
+  '11025_**0*_put +',' after a boolean switch option to enable it, - to di'+
+  'sable 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+
   '**2al_list sourcecode lines in assembler file'#010+
   '**2ar_list register allocation/release info in assembler file'#010+
   '**2ar_list register allocation/release info in assembler file'#010+
-  '**2at_list temp allocation/release info in assembler file'#010+
-  '**1b_','generate browser info'#010+
+  '**2at_lis','t temp allocation/release info in assembler file'#010+
+  '**1b_generate browser info'#010+
   '**2bl_generate local symbol info'#010+
   '**2bl_generate local symbol info'#010+
   '**1B_build all modules'#010+
   '**1B_build all modules'#010+
   '**1C<x>_code generation options:'#010+
   '**1C<x>_code generation options:'#010+
   '**2CD_create also dynamic library (not supported)'#010+
   '**2CD_create also dynamic library (not supported)'#010+
-  '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
+  '**2Ch<n>_<n> bytes heap (','between 1023 and 67107840)'#010+
   '**2Ci_IO-checking'#010+
   '**2Ci_IO-checking'#010+
-  '**2Cn_omi','t linking stage'#010+
+  '**2Cn_omit linking stage'#010+
   '**2Co_check overflow of integer operations'#010+
   '**2Co_check overflow of integer operations'#010+
   '**2Cr_range checking'#010+
   '**2Cr_range checking'#010+
   '**2Cs<n>_set stack size to <n>'#010+
   '**2Cs<n>_set stack size to <n>'#010+
   '**2Ct_stack checking'#010+
   '**2Ct_stack checking'#010+
   '**2CX_create also smartlinked library'#010+
   '**2CX_create also smartlinked library'#010+
-  '**1d<x>_defines the symbol <x>'#010+
+  '**1d<x>_defines ','the symbol <x>'#010+
   '*O1D_generate a DEF file'#010+
   '*O1D_generate a DEF file'#010+
-  '*O2Dd<x>_set d','escription to <x>'#010+
+  '*O2Dd<x>_set description to <x>'#010+
   '*O2Dw_PM application'#010+
   '*O2Dw_PM application'#010+
   '**1e<x>_set path to executable'#010+
   '**1e<x>_set path to executable'#010+
   '**1E_same as -Cn'#010+
   '**1E_same as -Cn'#010+
   '**1F<x>_set file names and paths:'#010+
   '**1F<x>_set file names and paths:'#010+
-  '**2FD<x>_sets the directory where to search for compiler utilities'#010+
+  '**2FD<x>_sets the directory where to search for compiler utilitie','s'#010+
   '**2Fe<x>_redirect error output to <x>'#010+
   '**2Fe<x>_redirect error output to <x>'#010+
-  '**2FE<x>_set e','xe/unit output path to <x>'#010+
+  '**2FE<x>_set exe/unit output path to <x>'#010+
   '**2Fi<x>_adds <x> to include path'#010+
   '**2Fi<x>_adds <x> to include path'#010+
   '**2Fl<x>_adds <x> to library path'#010+
   '**2Fl<x>_adds <x> to library path'#010+
   '*L2FL<x>_uses <x> as dynamic linker'#010+
   '*L2FL<x>_uses <x> as dynamic linker'#010+
   '**2Fo<x>_adds <x> to object path'#010+
   '**2Fo<x>_adds <x> to object path'#010+
-  '**2Fr<x>_load error message file <x>'#010+
+  '**2Fr<x>_load error me','ssage file <x>'#010+
   '**2Fu<x>_adds <x> to unit path'#010+
   '**2Fu<x>_adds <x> to unit path'#010+
-  '**2FU<x>','_set unit output path to <x>, overrides -FE'#010+
+  '**2FU<x>_set unit output path to <x>, overrides -FE'#010+
   '*g1g_generate debugger information:'#010+
   '*g1g_generate debugger information:'#010+
   '*g2gg_use gsym'#010+
   '*g2gg_use gsym'#010+
   '*g2gd_use dbx'#010+
   '*g2gd_use dbx'#010+
   '*g2gh_use heap trace unit (for memory leak debugging)'#010+
   '*g2gh_use heap trace unit (for memory leak debugging)'#010+
-  '*g2gl_use line info unit to show more info for backtraces'#010+
-  '*g2gc_generate chec','ks for pointers'#010+
+  '*g2gl_use line info uni','t to show more info for backtraces'#010+
+  '*g2gc_generate checks for pointers'#010+
   '**1i_information'#010+
   '**1i_information'#010+
   '**2iD_return compiler date'#010+
   '**2iD_return compiler date'#010+
   '**2iV_return compiler version'#010+
   '**2iV_return compiler version'#010+
   '**2iSO_return compiler OS'#010+
   '**2iSO_return compiler OS'#010+
   '**2iSP_return compiler processor'#010+
   '**2iSP_return compiler processor'#010+
   '**2iTO_return target OS'#010+
   '**2iTO_return target OS'#010+
-  '**2iTP_return target processor'#010+
+  '**2iTP_return',' target processor'#010+
   '**1I<x>_adds <x> to include path'#010+
   '**1I<x>_adds <x> to include path'#010+
-  '**1','k<x>_Pass <x> to the linker'#010+
+  '**1k<x>_Pass <x> to the linker'#010+
   '**1l_write logo'#010+
   '**1l_write logo'#010+
   '**1n_don'#039't read the default config file'#010+
   '**1n_don'#039't read the default config file'#010+
   '**1o<x>_change the name of the executable produced to <x>'#010+
   '**1o<x>_change the name of the executable produced to <x>'#010+
-  '**1pg_generate profile code for gprof (defines FPC_PROFILE)'#010+
-  '*L1P_use pipes instead of creating tem','porary assembler files'#010+
+  '**1pg_generate profile code for gprof (defin','es FPC_PROFILE)'#010+
+  '*L1P_use pipes instead of creating temporary assembler files'#010+
   '**1S<x>_syntax options:'#010+
   '**1S<x>_syntax options:'#010+
   '**2S2_switch some Delphi 2 extensions on'#010+
   '**2S2_switch some Delphi 2 extensions on'#010+
   '**2Sc_supports operators like C (*=,+=,/= and -=)'#010+
   '**2Sc_supports operators like C (*=,+=,/= and -=)'#010+
   '**2Sa_include assertion code.'#010+
   '**2Sa_include assertion code.'#010+
-  '**2Sd_tries to be Delphi compatible'#010+
-  '**2Se<x>_compiler stops after the <x','> errors (default is 1)'#010+
+  '**2Sd_tries to be ','Delphi compatible'#010+
+  '**2Se<x>_compiler stops after the <x> errors (default is 1)'#010+
   '**2Sg_allow LABEL and GOTO'#010+
   '**2Sg_allow LABEL and GOTO'#010+
   '**2Sh_Use ansistrings'#010+
   '**2Sh_Use ansistrings'#010+
   '**2Si_support C++ styled INLINE'#010+
   '**2Si_support C++ styled INLINE'#010+
   '**2Sm_support macros like C (global)'#010+
   '**2Sm_support macros like C (global)'#010+
   '**2So_tries to be TP/BP 7.0 compatible'#010+
   '**2So_tries to be TP/BP 7.0 compatible'#010+
-  '**2Sp_tries to be gpc compatible'#010+
-  '**2Ss_constructor name mus','t be init (destructor must be done)'#010+
+  '**2Sp','_tries to be gpc compatible'#010+
+  '**2Ss_constructor name must be init (destructor must be done)'#010+
   '**2St_allow static keyword in objects'#010+
   '**2St_allow static keyword in objects'#010+
   '**1s_don'#039't call assembler and linker (only with -a)'#010+
   '**1s_don'#039't call assembler and linker (only with -a)'#010+
   '**1u<x>_undefines the symbol <x>'#010+
   '**1u<x>_undefines the symbol <x>'#010+
   '**1U_unit options:'#010+
   '**1U_unit options:'#010+
-  '**2Un_don'#039't check the unit name'#010+
-  '**2Ur_generate release unit fi','les'#010+
+  '**2Un_do','n'#039't check the unit name'#010+
+  '**2Ur_generate release unit files'#010+
   '**2Us_compile a system unit'#010+
   '**2Us_compile a system unit'#010+
   '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
   '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
   '**2*_e : Show errors (default)       d : Show debug info'#010+
   '**2*_e : Show errors (default)       d : Show debug info'#010+
-  '**2*_w : Show warnings               u : Show unit info'#010+
-  '**2*_n : Show notes         ','         t : Show tried/used files'#010+
+  '**2*_w : Show warnings        ','       u : Show unit info'#010+
+  '**2*_n : Show notes                  t : Show tried/used files'#010+
   '**2*_h : Show hints                  m : Show defined macros'#010+
   '**2*_h : Show hints                  m : Show defined macros'#010+
   '**2*_i : Show general info           p : Show compiled procedures'#010+
   '**2*_i : Show general info           p : Show compiled procedures'#010+
-  '**2*_l : Show linenumbers            c : Show conditionals'#010+
-  '**2*_a : Show every','thing             0 : Show nothing (except errors'+
-  ')'#010+
+  '**2*_l : Show linenumber','s            c : Show conditionals'#010+
+  '**2*_a : Show everything             0 : Show nothing (except errors)'#010+
   '**2*_b : Show all procedure          r : Rhide/GCC compatibility mode'#010+
   '**2*_b : Show all procedure          r : Rhide/GCC compatibility mode'#010+
-  '**2*_    declarations if an error    x : Executable info (Win32 only)'#010+
+  '**2*_    declarations if an error    x : Executable info (Win32 o','nly'+
+  ')'#010+
   '**2*_    occurs'#010+
   '**2*_    occurs'#010+
   '**1X_executable options:'#010+
   '**1X_executable options:'#010+
-  '*L2Xc_li','nk with the c library'#010+
+  '*L2Xc_link with the c library'#010+
   '**2Xs_strip all symbols from executable'#010+
   '**2Xs_strip all symbols from executable'#010+
   '**2XD_try to link dynamic          (defines FPC_LINK_DYNAMIC)'#010+
   '**2XD_try to link dynamic          (defines FPC_LINK_DYNAMIC)'#010+
   '**2XS_try to link static (default) (defines FPC_LINK_STATIC)'#010+
   '**2XS_try to link static (default) (defines FPC_LINK_STATIC)'#010+
-  '**2XX_try to link smart            (defines FPC_LINK_SM','ART)'#010+
+  '*','*2XX_try to link smart            (defines FPC_LINK_SMART)'#010+
   '**0*_Processor specific options:'#010+
   '**0*_Processor specific options:'#010+
   '3*1A<x>_output format:'#010+
   '3*1A<x>_output format:'#010+
   '3*2Aas_assemble using GNU AS'#010+
   '3*2Aas_assemble using GNU AS'#010+
   '3*2Aasaout_assemble using GNU AS for aout (Go32v1)'#010+
   '3*2Aasaout_assemble using GNU AS for aout (Go32v1)'#010+
   '3*2Anasmcoff_coff (Go32v2) file using Nasm'#010+
   '3*2Anasmcoff_coff (Go32v2) file using Nasm'#010+
-  '3*2Anasmelf_elf32 (Linux) file using Nasm'#010+
-  '3*2Anasmobj_ob','j file using Nasm'#010+
+  '3*','2Anasmelf_elf32 (Linux) file using Nasm'#010+
+  '3*2Anasmobj_obj file using Nasm'#010+
   '3*2Amasm_obj file using Masm (Microsoft)'#010+
   '3*2Amasm_obj file using Masm (Microsoft)'#010+
   '3*2Atasm_obj file using Tasm (Borland)'#010+
   '3*2Atasm_obj file using Tasm (Borland)'#010+
   '3*2Acoff_coff (Go32v2) using internal writer'#010+
   '3*2Acoff_coff (Go32v2) using internal writer'#010+
-  '3*2Apecoff_pecoff (Win32) using internal writer'#010+
+  '3*2Apecoff_pecoff (Win32) using internal wr','iter'#010+
   '3*1R<x>_assembler reading style:'#010+
   '3*1R<x>_assembler reading style:'#010+
-  '3*2Ratt_read AT&','T style assembler'#010+
+  '3*2Ratt_read AT&T style assembler'#010+
   '3*2Rintel_read Intel style assembler'#010+
   '3*2Rintel_read Intel style assembler'#010+
   '3*2Rdirect_copy assembler text directly to assembler file'#010+
   '3*2Rdirect_copy assembler text directly to assembler file'#010+
   '3*1O<x>_optimizations:'#010+
   '3*1O<x>_optimizations:'#010+
   '3*2Og_generate smaller code'#010+
   '3*2Og_generate smaller code'#010+
-  '3*2OG_generate faster code (default)'#010+
-  '3*2Or_keep certain variables in registe','rs'#010+
+  '3*2OG_generate faster ','code (default)'#010+
+  '3*2Or_keep certain variables in registers'#010+
   '3*2Ou_enable uncertain optimizations (see docs)'#010+
   '3*2Ou_enable uncertain optimizations (see docs)'#010+
   '3*2O1_level 1 optimizations (quick optimizations)'#010+
   '3*2O1_level 1 optimizations (quick optimizations)'#010+
   '3*2O2_level 2 optimizations (-O1 + slower optimizations)'#010+
   '3*2O2_level 2 optimizations (-O1 + slower optimizations)'#010+
-  '3*2O3_level 3 optimizations (-O2 repeatedly, max 5 times)'#010+
-  '3*2Op<x>_target processo','r:'#010+
+  '3*2O3_level 3 optimizations ','(-O2 repeatedly, max 5 times)'#010+
+  '3*2Op<x>_target processor:'#010+
   '3*3Op1_set target processor to 386/486'#010+
   '3*3Op1_set target processor to 386/486'#010+
   '3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#010+
   '3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#010+
   '3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#010+
   '3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#010+
   '3*1T<x>_Target operating system:'#010+
   '3*1T<x>_Target operating system:'#010+
-  '3*2TGO32V1_version 1 of DJ Delorie DOS extender'#010+
-  '3*2TGO32','V2_version 2 of DJ Delorie DOS extender'#010+
+  '3*','2TGO32V1_version 1 of DJ Delorie DOS extender'#010+
+  '3*2TGO32V2_version 2 of DJ Delorie DOS extender'#010+
   '3*2TLINUX_Linux'#010+
   '3*2TLINUX_Linux'#010+
   '3*2Tnetware_Novell Netware Module (experimental)'#010+
   '3*2Tnetware_Novell Netware Module (experimental)'#010+
   '3*2TOS2_OS/2 2.x'#010+
   '3*2TOS2_OS/2 2.x'#010+
   '3*2TSUNOS_SunOS/Solaris'#010+
   '3*2TSUNOS_SunOS/Solaris'#010+
   '3*2TWin32_Windows 32 Bit'#010+
   '3*2TWin32_Windows 32 Bit'#010+
-  '3*1W<x>_Win32 target options'#010+
-  '3*2WB<x>_Set Image base to Hexadecimal <','x> value'#010+
+  '3*1W<x>_Win32 t','arget options'#010+
+  '3*2WB<x>_Set Image base to Hexadecimal <x> value'#010+
   '3*2WC_Specify console type application'#010+
   '3*2WC_Specify console type application'#010+
   '3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
   '3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
   '3*2WF_Specify full-screen type application (OS/2 only)'#010+
   '3*2WF_Specify full-screen type application (OS/2 only)'#010+
-  '3*2WG_Specify graphic type application'#010+
-  '3*2WN_Do not generate relocation code (necessa','ry for debugging)'#010+
+  '3*2WG_Specify graphic type appl','ication'#010+
+  '3*2WN_Do not generate relocation code (necessary for debugging)'#010+
   '3*2WR_Generate relocation code'#010+
   '3*2WR_Generate relocation code'#010+
   '6*1A<x>_output format'#010+
   '6*1A<x>_output format'#010+
   '6*2Aas_Unix o-file using GNU AS'#010+
   '6*2Aas_Unix o-file using GNU AS'#010+
   '6*2Agas_GNU Motorola assembler'#010+
   '6*2Agas_GNU Motorola assembler'#010+
   '6*2Amit_MIT Syntax (old GAS)'#010+
   '6*2Amit_MIT Syntax (old GAS)'#010+
-  '6*2Amot_Standard Motorola assembler'#010+
+  '6*2Amot_Standard Motoro','la assembler'#010+
   '6*1O_optimizations:'#010+
   '6*1O_optimizations:'#010+
-  '6*2Oa_turn on the opt','imizer'#010+
+  '6*2Oa_turn on the optimizer'#010+
   '6*2Og_generate smaller code'#010+
   '6*2Og_generate smaller code'#010+
   '6*2OG_generate faster code (default)'#010+
   '6*2OG_generate faster code (default)'#010+
   '6*2Ox_optimize maximum (still BUGGY!!!)'#010+
   '6*2Ox_optimize maximum (still BUGGY!!!)'#010+
   '6*2O2_set target processor to a MC68020+'#010+
   '6*2O2_set target processor to a MC68020+'#010+
-  '6*1R<x>_assembler reading style:'#010+
+  '6*1R<x>_assembler reading style:'#010,
   '6*2RMOT_read motorola style assembler'#010+
   '6*2RMOT_read motorola style assembler'#010+
-  '6*1T<x>_Target o','perating system:'#010+
+  '6*1T<x>_Target operating system:'#010+
   '6*2TAMIGA_Commodore Amiga'#010+
   '6*2TAMIGA_Commodore Amiga'#010+
   '6*2TATARI_Atari ST/STe/TT'#010+
   '6*2TATARI_Atari ST/STe/TT'#010+
   '6*2TMACOS_Macintosh m68k'#010+
   '6*2TMACOS_Macintosh m68k'#010+
@@ -824,5 +822,5 @@ const msgtxt : array[0..000139,1..240] of char=(
   '6*2TPALMOS_PalmOS'#010+
   '6*2TPALMOS_PalmOS'#010+
   '**1*_'#010+
   '**1*_'#010+
   '**1?_shows this help'#010+
   '**1?_shows this help'#010+
-  '**1h_shows this help without waiting'#000
+  '**1h_shows this help withou','t waiting'#000
 );
 );

+ 224 - 180
compiler/pdecobj.pas

@@ -39,7 +39,7 @@ implementation
       globals,verbose,systems,tokens,
       globals,verbose,systems,tokens,
       aasm,symconst,symbase,symsym,symtable,types,
       aasm,symconst,symbase,symsym,symtable,types,
       cgbase,
       cgbase,
-      node,nld,ncon,ncnv,pass_1,
+      node,nld,nmem,ncon,ncnv,ncal,pass_1,
       scanner,
       scanner,
       pbase,pexpr,pdecsub,pdecvar,ptype;
       pbase,pexpr,pdecsub,pdecvar,ptype;
 
 
@@ -83,22 +83,133 @@ implementation
 
 
       procedure property_dec;
       procedure property_dec;
 
 
+        { convert a node tree to symlist and return the last
+          symbol }
+        function parse_symlist(pl:tsymlist):boolean;
+          var
+            idx : longint;
+            sym : tsym;
+            def : tdef;
+            st  : tsymtable;
+          begin
+            parse_symlist:=true;
+            def:=nil;
+            if token=_ID then
+             begin
+               sym:=search_class_member(aktclass,pattern);
+               if assigned(sym) then
+                begin
+                  case sym.typ of
+                    varsym :
+                      begin
+                        pl.addsym(sl_load,sym);
+                        def:=tvarsym(sym).vartype.def;
+                      end;
+                    procsym :
+                      begin
+                        pl.addsym(sl_call,sym);
+                      end;
+                  end;
+                end
+               else
+                begin
+                  Message1(parser_e_illegal_field_or_method,pattern);
+                  parse_symlist:=false;
+                end;
+               consume(_ID);
+               repeat
+                 case token of
+                   _ID,
+                   _SEMICOLON :
+                     begin
+                       break;
+                     end;
+                   _POINT :
+                     begin
+                       consume(_POINT);
+                       if assigned(def) then
+                        begin
+                          st:=def.getsymtable(gs_record);
+                          if assigned(st) then
+                           begin
+                             sym:=searchsymonlyin(st,pattern);
+                             if assigned(sym) then
+                              begin
+                                pl.addsym(sl_subscript,sym);
+                                case sym.typ of
+                                  varsym :
+                                    def:=tvarsym(sym).vartype.def;
+                                  else
+                                    begin
+                                      Message1(sym_e_illegal_field,pattern);
+                                      parse_symlist:=false;
+                                    end;
+                                end;
+                              end
+                             else
+                              begin
+                                Message1(sym_e_illegal_field,pattern);
+                                parse_symlist:=false;
+                              end;
+                           end
+                          else
+                           begin
+                             Message(cg_e_invalid_qualifier);
+                             parse_symlist:=false;
+                           end;
+                        end;
+                       consume(_ID);
+                     end;
+                   _LECKKLAMMER :
+                     begin
+                       consume(_LECKKLAMMER);
+                       repeat
+                         if def.deftype=arraydef then
+                          begin
+                            idx:=get_intconst;
+                            pl.addconst(sl_vec,idx);
+                            def:=tarraydef(def).elementtype.def;
+                          end
+                         else
+                          begin
+                            Message(cg_e_invalid_qualifier);
+                            parse_symlist:=false;
+                          end;
+                       until not try_to_consume(_COMMA);
+                       consume(_RECKKLAMMER);
+                     end;
+                   else
+                     begin
+                       Message(parser_e_ill_property_access_sym);
+                       parse_symlist:=false;
+                       break;
+                     end;
+                 end;
+               until false;
+             end
+            else
+             begin
+               Message(parser_e_ill_property_access_sym);
+               parse_symlist:=false;
+             end;
+            pl.def:=def;
+          end;
+
         var
         var
            sym : tsym;
            sym : tsym;
            propertyparas : tlinkedlist;
            propertyparas : tlinkedlist;
 
 
         { returns the matching procedure to access a property }
         { returns the matching procedure to access a property }
         function get_procdef : tprocdef;
         function get_procdef : tprocdef;
-
           var
           var
              p : tprocdef;
              p : tprocdef;
-
           begin
           begin
              p:=tprocsym(sym).definition;
              p:=tprocsym(sym).definition;
              get_procdef:=nil;
              get_procdef:=nil;
              while assigned(p) do
              while assigned(p) do
                begin
                begin
-                  if equal_paras(p.para,propertyparas,cp_value_equal_const) or convertable_paras(p.para,propertyparas,cp_value_equal_const) then {MvdV: Ozerski 14.03.01}
+                  if equal_paras(p.para,propertyparas,cp_value_equal_const) or
+                     convertable_paras(p.para,propertyparas,cp_value_equal_const) then
                     break;
                     break;
                   p:=p.nextoverloaded;
                   p:=p.nextoverloaded;
                end;
                end;
@@ -118,9 +229,9 @@ implementation
            pp : tprocdef;
            pp : tprocdef;
            pt : tnode;
            pt : tnode;
            propname : stringid;
            propname : stringid;
-
         begin
         begin
            { check for a class }
            { check for a class }
+           aktprocsym:=nil;
            if not((is_class_or_interface(aktclass)) or
            if not((is_class_or_interface(aktclass)) or
               ((m_delphi in aktmodeswitches) and (is_object(aktclass)))) then
               ((m_delphi in aktmodeswitches) and (is_object(aktclass)))) then
              Message(parser_e_syntax_error);
              Message(parser_e_syntax_error);
@@ -260,188 +371,117 @@ implementation
                 datacoll.paratyp:=vs_value;
                 datacoll.paratyp:=vs_value;
                 datacoll.paratype:=p.proptype;
                 datacoll.paratype:=p.proptype;
 
 
-                if (idtoken=_READ) then
-                  begin
-                     p.readaccess.clear;
-                     consume(_READ);
-                     sym:=search_class_member(aktclass,pattern);
-                     if not(assigned(sym)) then
-                       begin
-                         Message1(sym_e_unknown_id,pattern);
-                         consume(_ID);
-                       end
-                     else
-                       begin
-                          consume(_ID);
-                          while (token=_POINT) and
-                                ((sym.typ=varsym) and
-                                 (tvarsym(sym).vartype.def.deftype=recorddef)) do
-                           begin
-                             p.readaccess.addsym(sym);
-                             consume(_POINT);
-                             sym:=searchsymonlyin(trecorddef(tvarsym(sym).vartype.def).symtable,pattern);
-                             if not assigned(sym) then
-                               Message1(sym_e_illegal_field,pattern);
-                             consume(_ID);
-                           end;
-                       end;
-
-                     if assigned(sym) then
-                       begin
-                          { search the matching definition }
-                          case sym.typ of
-                            procsym :
-                              begin
-                                 pp:=get_procdef;
-                                 if not(assigned(pp)) or
-                                    not(is_equal(pp.rettype.def,p.proptype.def)) then
-                                   Message(parser_e_ill_property_access_sym);
-                                 p.readaccess.setdef(pp);
-                              end;
-                            varsym :
-                              begin
-                                if not(propertyparas.empty) or
-                                   not(is_equal(tvarsym(sym).vartype.def,p.proptype.def)) then
-                                  Message(parser_e_ill_property_access_sym);
-                              end;
-                            else
+                if try_to_consume(_READ) then
+                 begin
+                   p.readaccess.clear;
+                   if parse_symlist(p.readaccess) then
+                    begin
+                      sym:=p.readaccess.firstsym^.sym;
+                      case sym.typ of
+                        procsym :
+                          begin
+                            pp:=get_procdef;
+                            if not(assigned(pp)) or
+                               not(is_equal(pp.rettype.def,p.proptype.def)) then
                               Message(parser_e_ill_property_access_sym);
                               Message(parser_e_ill_property_access_sym);
+                            p.readaccess.setdef(pp);
                           end;
                           end;
-                          p.readaccess.addsym(sym);
-                       end;
-                  end;
-                if (idtoken=_WRITE) then
-                  begin
-                     p.writeaccess.clear;
-                     consume(_WRITE);
-                     sym:=search_class_member(aktclass,pattern);
-                     if not(assigned(sym)) then
-                       begin
-                         Message1(sym_e_unknown_id,pattern);
-                         consume(_ID);
-                       end
-                     else
-                       begin
-                          consume(_ID);
-                          while (token=_POINT) and
-                                ((sym.typ=varsym) and
-                                 (tvarsym(sym).vartype.def.deftype=recorddef)) do
-                           begin
-                             p.writeaccess.addsym(sym);
-                             consume(_POINT);
-                             sym:=searchsymonlyin(trecorddef(tvarsym(sym).vartype.def).symtable,pattern);
-                             if not assigned(sym) then
-                               Message1(sym_e_illegal_field,pattern);
-                             consume(_ID);
-                           end;
-                       end;
-
-                     if assigned(sym) then
-                       begin
-                          { search the matching definition }
-                          case sym.typ of
-                            procsym :
-                              begin
-                                 { insert data entry to check access method }
-                                 propertyparas.insert(datacoll);
-                                 pp:=get_procdef;
-                                 { ... and remove it }
-                                 propertyparas.remove(datacoll);
-                                 if not(assigned(pp)) then
-                                   Message(parser_e_ill_property_access_sym);
-                                 p.writeaccess.setdef(pp);
-                              end;
-                            varsym :
-                              begin
-                                 if not(propertyparas.empty) or
-                                    not(is_equal(tvarsym(sym).vartype.def,p.proptype.def)) then
-                                   Message(parser_e_ill_property_access_sym);
-                              end
-                            else
+                        varsym :
+                          begin
+                            if not(propertyparas.empty) or
+                               not(is_equal(p.readaccess.def,p.proptype.def)) then
                               Message(parser_e_ill_property_access_sym);
                               Message(parser_e_ill_property_access_sym);
                           end;
                           end;
-                          p.writeaccess.addsym(sym);
-                       end;
-                  end;
+                        else
+                          Message(parser_e_ill_property_access_sym);
+                      end;
+                    end;
+                 end;
+                if try_to_consume(_WRITE) then
+                 begin
+                   p.writeaccess.clear;
+                   if parse_symlist(p.writeaccess) then
+                    begin
+                      sym:=p.writeaccess.firstsym^.sym;
+                      case sym.typ of
+                        procsym :
+                          begin
+                            { insert data entry to check access method }
+                            propertyparas.insert(datacoll);
+                            pp:=get_procdef;
+                            { ... and remove it }
+                            propertyparas.remove(datacoll);
+                            if not(assigned(pp)) then
+                              Message(parser_e_ill_property_access_sym);
+                            p.writeaccess.setdef(pp);
+                          end;
+                        varsym :
+                          begin
+                            if not(propertyparas.empty) or
+                               not(is_equal(p.writeaccess.def,p.proptype.def)) then
+                              Message(parser_e_ill_property_access_sym);
+                          end;
+                        else
+                          Message(parser_e_ill_property_access_sym);
+                      end;
+                    end;
+                 end;
                 include(p.propoptions,ppo_stored);
                 include(p.propoptions,ppo_stored);
-                if (idtoken=_STORED) then
-                  begin
-                     consume(_STORED);
-                     p.storedaccess.clear;
-                     case token of
-                        _ID:
-                           { in the case that idtoken=_DEFAULT }
-                           { we have to do nothing except      }
-                           { setting ppo_stored, it's the same }
-                           { as stored true                    }
-                           if idtoken<>_DEFAULT then
+                if try_to_consume(_STORED) then
+                 begin
+                   p.storedaccess.clear;
+                   case token of
+                     _ID:
+                       begin
+                         { in the case that idtoken=_DEFAULT }
+                         { we have to do nothing except      }
+                         { setting ppo_stored, it's the same }
+                         { as stored true                    }
+                         if idtoken<>_DEFAULT then
+                          begin
+                            if parse_symlist(p.storedaccess) then
                              begin
                              begin
-                                sym:=search_class_member(aktclass,pattern);
-                                if not(assigned(sym)) then
-                                  begin
-                                    Message1(sym_e_unknown_id,pattern);
-                                    consume(_ID);
-                                  end
-                                else
-                                  begin
-                                     consume(_ID);
-                                     while (token=_POINT) and
-                                           ((sym.typ=varsym) and
-                                            (tvarsym(sym).vartype.def.deftype=recorddef)) do
+                               sym:=p.storedaccess.firstsym^.sym;
+                               case sym.typ of
+                                 procsym :
+                                   begin
+                                     pp:=tprocsym(sym).definition;
+                                     while assigned(pp) do
                                       begin
                                       begin
-                                        p.storedaccess.addsym(sym);
-                                        consume(_POINT);
-                                        sym:=searchsymonlyin(trecorddef(tvarsym(sym).vartype.def).symtable,pattern);
-                                        if not assigned(sym) then
-                                          Message1(sym_e_illegal_field,pattern);
-                                        consume(_ID);
+                                        { the stored function shouldn't have any parameters }
+                                        if pp.Para.empty then
+                                         break;
+                                        pp:=pp.nextoverloaded;
                                       end;
                                       end;
-                                  end;
-
-                                if assigned(sym) then
-                                  begin
-                                     { only non array properties can be stored }
-                                     case sym.typ of
-                                       procsym :
-                                         begin
-                                           pp:=tprocsym(sym).definition;
-                                           while assigned(pp) do
-                                             begin
-                                                { the stored function shouldn't have any parameters }
-                                                if pp.Para.empty then
-                                                  break;
-                                                 pp:=pp.nextoverloaded;
-                                             end;
-                                           { found we a procedure and does it really return a bool? }
-                                           if not(assigned(pp)) or
-                                              not(is_boolean(pp.rettype.def)) then
-                                             Message(parser_e_ill_property_storage_sym);
-                                           p.storedaccess.setdef(pp);
-                                         end;
-                                       varsym :
-                                         begin
-                                           if not(propertyparas.empty) or
-                                              not(is_boolean(tvarsym(sym).vartype.def)) then
-                                             Message(parser_e_stored_property_must_be_boolean);
-                                         end;
-                                       else
-                                         Message(parser_e_ill_property_storage_sym);
-                                     end;
-                                     p.storedaccess.addsym(sym);
-                                  end;
+                                     { found we a procedure and does it really return a bool? }
+                                     if not(assigned(pp)) or
+                                        not(is_boolean(pp.rettype.def)) then
+                                       Message(parser_e_ill_property_storage_sym);
+                                     p.storedaccess.setdef(pp);
+                                   end;
+                                 varsym :
+                                   begin
+                                     if not(propertyparas.empty) or
+                                        not(is_boolean(p.storedaccess.def)) then
+                                      Message(parser_e_stored_property_must_be_boolean);
+                                   end;
+                                 else
+                                   Message(parser_e_ill_property_access_sym);
+                               end;
                              end;
                              end;
-                        _FALSE:
-                          begin
-                             consume(_FALSE);
-                             exclude(p.propoptions,ppo_stored);
                           end;
                           end;
-                        _TRUE:
-                          consume(_TRUE);
-                     end;
-                  end;
-                if (idtoken=_DEFAULT) then
+                       end;
+                     _FALSE:
+                       begin
+                         consume(_FALSE);
+                         exclude(p.propoptions,ppo_stored);
+                       end;
+                     _TRUE:
+                       consume(_TRUE);
+                   end;
+                 end;
+                if try_to_consume(_DEFAULT) then
                   begin
                   begin
-                     consume(_DEFAULT);
                      if not(is_ordinal(p.proptype.def) or
                      if not(is_ordinal(p.proptype.def) or
                             is_64bitint(p.proptype.def) or
                             is_64bitint(p.proptype.def) or
                             ((p.proptype.def.deftype=setdef) and
                             ((p.proptype.def.deftype=setdef) and
@@ -467,9 +507,8 @@ implementation
                        p.default:=tordconstnode(pt).value;
                        p.default:=tordconstnode(pt).value;
                      pt.free;
                      pt.free;
                   end
                   end
-                else if (idtoken=_NODEFAULT) then
+                else if try_to_consume(_NODEFAULT) then
                   begin
                   begin
-                     consume(_NODEFAULT);
                      p.default:=0;
                      p.default:=0;
                   end;
                   end;
                 symtablestack.insert(p);
                 symtablestack.insert(p);
@@ -927,7 +966,9 @@ implementation
                         read_var_decs(false,true,false);
                         read_var_decs(false,true,false);
                       end;
                       end;
                     end;
                     end;
-        _PROPERTY : property_dec;
+        _PROPERTY : begin
+                      property_dec;
+                    end;
        _PROCEDURE,
        _PROCEDURE,
         _FUNCTION,
         _FUNCTION,
            _CLASS : begin
            _CLASS : begin
@@ -1037,7 +1078,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.29  2001-08-30 20:13:53  peter
+  Revision 1.30  2001-10-21 12:33:06  peter
+    * array access for properties added
+
+  Revision 1.29  2001/08/30 20:13:53  peter
     * rtti/init table updates
     * rtti/init table updates
     * rttisym for reusable global rtti/init info
     * rttisym for reusable global rtti/init info
     * support published for interfaces
     * support published for interfaces

+ 43 - 37
compiler/pexpr.pas

@@ -607,13 +607,12 @@ implementation
               end
               end
              else
              else
               begin
               begin
-                 if token=_LKLAMMER then
-                  begin
-                    consume(_LKLAMMER);
-                    para:=parse_paras(false,false);
-                    consume(_RKLAMMER);
-                  end
-                 else
+                if token=_LKLAMMER then
+                 begin
+                   consume(_LKLAMMER);
+                   para:=parse_paras(false,false);
+                   consume(_RKLAMMER);
+                 end;
               end;
               end;
              p1:=ccallnode.create(para,tprocsym(sym),st,p1);
              p1:=ccallnode.create(para,tprocsym(sym),st,p1);
            end
            end
@@ -684,10 +683,40 @@ implementation
     { the following procedure handles the access to a property symbol }
     { the following procedure handles the access to a property symbol }
     procedure handle_propertysym(sym : tsym;st : tsymtable;var p1 : tnode; getaddr: boolean);
     procedure handle_propertysym(sym : tsym;st : tsymtable;var p1 : tnode; getaddr: boolean);
 
 
+        procedure symlist_to_node(var p1:tnode;pl:tsymlist);
+        var
+          plist : psymlistitem;
+        begin
+          plist:=pl.firstsym;
+          while assigned(plist) do
+           begin
+             case plist^.sltype of
+               sl_load :
+                 begin
+                   { p1 can already contain the loadnode of
+                     the class variable. Then we need to use a
+                     subscriptn. If no tree is found (with block), then
+                     generate a loadn }
+                   if assigned(p1) then
+                    p1:=csubscriptnode.create(tvarsym(plist^.sym),p1)
+                   else
+                    p1:=cloadnode.create(tvarsym(plist^.sym),st);
+                 end;
+               sl_subscript :
+                 p1:=csubscriptnode.create(tvarsym(plist^.sym),p1);
+               sl_vec :
+                 p1:=cvecnode.create(p1,cordconstnode.create(plist^.value,s32bittype));
+               else
+                 internalerror(200110205);
+             end;
+             plist:=plist^.next;
+           end;
+          include(p1.flags,nf_isproperty);
+        end;
+
       var
       var
          paras : tnode;
          paras : tnode;
          p2    : tnode;
          p2    : tnode;
-         plist : psymlistitem;
       begin
       begin
          paras:=nil;
          paras:=nil;
          { property parameters? read them only if the property really }
          { property parameters? read them only if the property really }
@@ -720,9 +749,6 @@ implementation
                          { generate the method call }
                          { generate the method call }
                          p1:=ccallnode.create(paras,
                          p1:=ccallnode.create(paras,
                                               tprocsym(tpropertysym(sym).writeaccess.firstsym^.sym),st,p1);
                                               tprocsym(tpropertysym(sym).writeaccess.firstsym^.sym),st,p1);
-                         { we know the procedure to call, so
-                           force the usage of that procedure }
-                         tcallnode(p1).procdefinition:=tprocdef(tpropertysym(sym).writeaccess.def);
                          consume(_ASSIGNMENT);
                          consume(_ASSIGNMENT);
                          { read the expression }
                          { read the expression }
                          getprocvar:=(tpropertysym(sym).proptype.def.deftype=procvardef);
                          getprocvar:=(tpropertysym(sym).proptype.def.deftype=procvardef);
@@ -738,16 +764,7 @@ implementation
                          if assigned(paras) then
                          if assigned(paras) then
                            message(parser_e_no_paras_allowed);
                            message(parser_e_no_paras_allowed);
                          { subscribed access? }
                          { subscribed access? }
-                         plist:=tpropertysym(sym).writeaccess.firstsym;
-                         while assigned(plist) do
-                          begin
-                            if p1=nil then
-                              p1:=cloadnode.create(tvarsym(plist^.sym),st)
-                            else
-                              p1:=csubscriptnode.create(tvarsym(plist^.sym),p1);
-                            plist:=plist^.next;
-                          end;
-                         include(tcallnode(p1).flags,nf_isproperty);
+                         symlist_to_node(p1,tpropertysym(sym).writeaccess);
                          consume(_ASSIGNMENT);
                          consume(_ASSIGNMENT);
                          { read the expression }
                          { read the expression }
                          p2:=comp_expr(true);
                          p2:=comp_expr(true);
@@ -777,26 +794,12 @@ implementation
                           if assigned(paras) then
                           if assigned(paras) then
                             message(parser_e_no_paras_allowed);
                             message(parser_e_no_paras_allowed);
                           { subscribed access? }
                           { subscribed access? }
-                          plist:=tpropertysym(sym).readaccess.firstsym;
-                          while assigned(plist) do
-                           begin
-                             if p1=nil then
-                               p1:=cloadnode.create(tvarsym(plist^.sym),st)
-                             else
-                               p1:=csubscriptnode.create(tvarsym(plist^.sym),p1);
-                             plist:=plist^.next;
-                           end;
-                          include(p1.flags,nf_isproperty);
+                          symlist_to_node(p1,tpropertysym(sym).readaccess);
                        end;
                        end;
                      procsym :
                      procsym :
                        begin
                        begin
                           { generate the method call }
                           { generate the method call }
                           p1:=ccallnode.create(paras,tprocsym(tpropertysym(sym).readaccess.firstsym^.sym),st,p1);
                           p1:=ccallnode.create(paras,tprocsym(tpropertysym(sym).readaccess.firstsym^.sym),st,p1);
-                          { we know the procedure to call, so
-                            force the usage of that procedure }
-{                           no, because then the amount and the validity of the paras
-                            is not checked (JM)
-                          tcallnode(p1).procdefinition:=tprocdef(tpropertysym(sym).readaccess.def); }
                           include(p1.flags,nf_isproperty);
                           include(p1.flags,nf_isproperty);
                        end
                        end
                      else
                      else
@@ -2329,7 +2332,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.44  2001-10-20 19:28:39  peter
+  Revision 1.45  2001-10-21 12:33:07  peter
+    * array access for properties added
+
+  Revision 1.44  2001/10/20 19:28:39  peter
     * interface 2 guid support
     * interface 2 guid support
     * guid constants support
     * guid constants support
 
 

+ 12 - 1
compiler/symconst.pas

@@ -159,6 +159,14 @@ type
   );
   );
   tdefoptions=set of tdefoption;
   tdefoptions=set of tdefoption;
 
 
+  { tsymlist entry types }
+  tsltype = (sl_none,
+    sl_load,
+    sl_call,
+    sl_subscript,
+    sl_vec
+  );
+
   { base types for orddef }
   { base types for orddef }
   tbasetype = (
   tbasetype = (
     uauto,uvoid,uchar,
     uauto,uvoid,uchar,
@@ -453,7 +461,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.24  2001-10-20 20:30:21  peter
+  Revision 1.25  2001-10-21 12:33:07  peter
+    * array access for properties added
+
+  Revision 1.24  2001/10/20 20:30:21  peter
     * read only typed const support, switch $J-
     * read only typed const support, switch $J-
 
 
   Revision 1.23  2001/08/30 20:13:54  peter
   Revision 1.23  2001/08/30 20:13:54  peter

+ 37 - 7
compiler/symppu.pas

@@ -115,15 +115,32 @@ implementation
     function tcompilerppufile.getsymlist:tsymlist;
     function tcompilerppufile.getsymlist:tsymlist;
       var
       var
         sym : tsym;
         sym : tsym;
+        slt : tsltype;
+        idx : longint;
         p   : tsymlist;
         p   : tsymlist;
       begin
       begin
         p:=tsymlist.create;
         p:=tsymlist.create;
         p.def:=tdef(getderef);
         p.def:=tdef(getderef);
         repeat
         repeat
-          sym:=tsym(getderef);
-          if sym=nil then
-           break;
-          p.addsym(sym);
+          slt:=tsltype(getbyte);
+          case slt of
+            sl_none :
+              break;
+            sl_call,
+            sl_load,
+            sl_subscript :
+              begin
+                sym:=tsym(getderef);
+                p.addsym(slt,sym);
+              end;
+            sl_vec :
+              begin
+                idx:=getlongint;
+                p.addconst(slt,idx);
+              end;
+            else
+             internalerror(200110204);
+          end;
         until false;
         until false;
         getsymlist:=tsymlist(p);
         getsymlist:=tsymlist(p);
       end;
       end;
@@ -244,10 +261,20 @@ implementation
         hp:=p.firstsym;
         hp:=p.firstsym;
         while assigned(hp) do
         while assigned(hp) do
          begin
          begin
-           putderef(hp^.sym);
+           putbyte(byte(hp^.sltype));
+           case hp^.sltype of
+             sl_call,
+             sl_load,
+             sl_subscript :
+               putderef(hp^.sym);
+             sl_vec :
+               putlongint(hp^.value);
+             else
+              internalerror(200110205);
+           end;
            hp:=hp^.next;
            hp:=hp^.next;
          end;
          end;
-        putderef(nil);
+        putbyte(byte(sl_none));
       end;
       end;
 
 
 
 
@@ -272,7 +299,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.6  2001-05-06 14:49:17  peter
+  Revision 1.7  2001-10-21 12:33:07  peter
+    * array access for properties added
+
+  Revision 1.6  2001/05/06 14:49:17  peter
     * ppu object to class rewrite
     * ppu object to class rewrite
     * move ppu read and write stuff to fppu
     * move ppu read and write stuff to fppu
 
 

+ 42 - 8
compiler/symtype.pas

@@ -113,8 +113,10 @@ interface
 
 
       psymlistitem = ^tsymlistitem;
       psymlistitem = ^tsymlistitem;
       tsymlistitem = record
       tsymlistitem = record
-        sym  : tsym;
-        next : psymlistitem;
+        sltype : tsltype;
+        sym    : tsym;
+        value  : longint;
+        next   : psymlistitem;
       end;
       end;
 
 
       tsymlist = class
       tsymlist = class
@@ -125,7 +127,8 @@ interface
         destructor  destroy;override;
         destructor  destroy;override;
         function  empty:boolean;
         function  empty:boolean;
         procedure setdef(p:tdef);
         procedure setdef(p:tdef);
-        procedure addsym(p:tsym);
+        procedure addsym(slt:tsltype;p:tsym);
+        procedure addconst(slt:tsltype;v:longint);
         procedure clear;
         procedure clear;
         function  getcopy:tsymlist;
         function  getcopy:tsymlist;
         procedure resolve;
         procedure resolve;
@@ -339,14 +342,33 @@ implementation
       end;
       end;
 
 
 
 
-    procedure tsymlist.addsym(p:tsym);
+    procedure tsymlist.addsym(slt:tsltype;p:tsym);
       var
       var
         hp : psymlistitem;
         hp : psymlistitem;
       begin
       begin
         if not assigned(p) then
         if not assigned(p) then
-         exit;
+         internalerror(200110203);
         new(hp);
         new(hp);
+        hp^.sltype:=slt;
         hp^.sym:=p;
         hp^.sym:=p;
+        hp^.value:=0;
+        hp^.next:=nil;
+        if assigned(lastsym) then
+         lastsym^.next:=hp
+        else
+         firstsym:=hp;
+        lastsym:=hp;
+      end;
+
+
+    procedure tsymlist.addconst(slt:tsltype;v:longint);
+      var
+        hp : psymlistitem;
+      begin
+        new(hp);
+        hp^.sltype:=slt;
+        hp^.sym:=nil;
+        hp^.value:=v;
         hp^.next:=nil;
         hp^.next:=nil;
         if assigned(lastsym) then
         if assigned(lastsym) then
          lastsym^.next:=hp
          lastsym^.next:=hp
@@ -360,13 +382,21 @@ implementation
       var
       var
         hp  : tsymlist;
         hp  : tsymlist;
         hp2 : psymlistitem;
         hp2 : psymlistitem;
+        hpn : psymlistitem;
       begin
       begin
         hp:=tsymlist.create;
         hp:=tsymlist.create;
         hp.def:=def;
         hp.def:=def;
         hp2:=firstsym;
         hp2:=firstsym;
         while assigned(hp2) do
         while assigned(hp2) do
          begin
          begin
-           hp.addsym(hp2^.sym);
+           new(hpn);
+           hpn^:=hp2^;
+           hpn^.next:=nil;
+           if assigned(hp.lastsym) then
+            hp.lastsym^.next:=hpn
+           else
+            hp.firstsym:=hpn;
+           hp.lastsym:=hpn;
            hp2:=hp2^.next;
            hp2:=hp2^.next;
          end;
          end;
         getcopy:=hp;
         getcopy:=hp;
@@ -381,7 +411,8 @@ implementation
         hp:=firstsym;
         hp:=firstsym;
         while assigned(hp) do
         while assigned(hp) do
          begin
          begin
-           resolvesym(hp^.sym);
+           if assigned(hp^.sym) then
+            resolvesym(hp^.sym);
            hp:=hp^.next;
            hp:=hp^.next;
          end;
          end;
       end;
       end;
@@ -487,7 +518,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.9  2001-08-30 20:13:57  peter
+  Revision 1.10  2001-10-21 12:33:07  peter
+    * array access for properties added
+
+  Revision 1.9  2001/08/30 20:13:57  peter
     * rtti/init table updates
     * rtti/init table updates
     * rttisym for reusable global rtti/init info
     * rttisym for reusable global rtti/init info
     * support published for interfaces
     * support published for interfaces