Browse Source

* internal error 10 together with array access fixed. I hope
that's the final fix.

florian 27 years ago
parent
commit
9b4225f26f
8 changed files with 251 additions and 142 deletions
  1. 34 1
      compiler/cg386cal.pas
  2. 7 3
      compiler/cg386flw.pas
  3. 18 11
      compiler/cg386ld.pas
  4. 106 102
      compiler/cg386mem.pas
  5. 6 1
      compiler/innr.inc
  6. 68 20
      compiler/pass_1.pas
  7. 6 2
      compiler/switches.pas
  8. 6 2
      compiler/tree.pas

+ 34 - 1
compiler/cg386cal.pas

@@ -1796,9 +1796,38 @@ implementation
          l : longint;
          l : longint;
          ispushed : boolean;
          ispushed : boolean;
          hregister : tregister;
          hregister : tregister;
+         otlabel,oflabel,filenamestring : plabel;
 
 
       begin
       begin
          case p^.inlinenumber of
          case p^.inlinenumber of
+            in_assert_x:
+              begin
+                 otlabel:=truelabel;
+                 oflabel:=falselabel;
+                 getlabel(truelabel);
+                 getlabel(falselabel);
+                 getlabel(filenamestring);
+                 secondpass(p^.left);
+                 if codegenerror then
+                   exit;
+                 if cs_do_assertion in aktswitches then
+                   begin
+                      maketojumpbool(p^.left);
+                      emitl(A_LABEL,falselabel);
+                      exprasmlist^.concat(new(pai386,op_const(A_PUSH,S_L,
+                        p^.fileinfo.line)));
+                      { generate string }
+                      { push string
+                      exprasmlist^.concat(new(pai386,op_const(A_PUSH,S_L,
+                        p^.fileinfo.line)));
+                      }
+                      emitcall('FPC_DO_ASSERT',true);
+                      emitl(A_LABEL,truelabel);
+
+                   end;
+                 truelabel:=otlabel;
+                 falselabel:=oflabel;
+              end;
             in_lo_word,
             in_lo_word,
             in_hi_word :
             in_hi_word :
               begin
               begin
@@ -2261,7 +2290,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.10  1998-07-18 22:54:23  florian
+  Revision 1.11  1998-07-24 22:16:52  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.10  1998/07/18 22:54:23  florian
     * some ansi/wide/longstring support fixed:
     * some ansi/wide/longstring support fixed:
        o parameter passing
        o parameter passing
        o returning as result from functions
        o returning as result from functions

+ 7 - 3
compiler/cg386flw.pas

@@ -136,9 +136,9 @@ implementation
               secondpass(p^.right);
               secondpass(p^.right);
            end;
            end;
          if assigned(p^.t1) then
          if assigned(p^.t1) then
-               begin
+           begin
               if assigned(p^.right) then
               if assigned(p^.right) then
-                        begin
+                begin
                    getlabel(hl);
                    getlabel(hl);
                    emitl(A_JMP,hl);
                    emitl(A_JMP,hl);
                 end;
                 end;
@@ -590,7 +590,11 @@ do_jmp:
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.3  1998-06-25 08:48:08  florian
+  Revision 1.4  1998-07-24 22:16:53  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.3  1998/06/25 08:48:08  florian
     * first version of rtti support
     * first version of rtti support
 
 
   Revision 1.2  1998/06/08 13:13:33  pierre
   Revision 1.2  1998/06/08 13:13:33  pierre

+ 18 - 11
compiler/cg386ld.pas

@@ -184,17 +184,20 @@ implementation
                                    simple_loadn:=false;
                                    simple_loadn:=false;
                                    if hregister=R_NO then
                                    if hregister=R_NO then
                                      hregister:=getregister32;
                                      hregister:=getregister32;
-                                   if (p^.location.reference.base=procinfo.framepointer) then
+                                   if is_open_array(pvarsym(p^.symtableentry)^.definition) then
                                      begin
                                      begin
-                                        highframepointer:=p^.location.reference.base;
-                                        highoffset:=p^.location.reference.offset;
-                                     end
-                                   else
-                                     begin
-                                        highframepointer:=R_EDI;
-                                        highoffset:=p^.location.reference.offset;
-                                        exprasmlist^.concat(new(pai386,op_reg_reg(A_MOV,S_L,
-                                          p^.location.reference.base,R_EDI)));
+                                        if (p^.location.reference.base=procinfo.framepointer) then
+                                          begin
+                                             highframepointer:=p^.location.reference.base;
+                                             highoffset:=p^.location.reference.offset;
+                                          end
+                                        else
+                                          begin
+                                             highframepointer:=R_EDI;
+                                             highoffset:=p^.location.reference.offset;
+                                             exprasmlist^.concat(new(pai386,op_reg_reg(A_MOV,S_L,
+                                               p^.location.reference.base,R_EDI)));
+                                          end;
                                      end;
                                      end;
                                    exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,newreference(p^.location.reference),
                                    exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,newreference(p^.location.reference),
                                      hregister)));
                                      hregister)));
@@ -521,7 +524,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.4  1998-06-11 13:58:45  peter
+  Revision 1.5  1998-07-24 22:16:54  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.4  1998/06/11 13:58:45  peter
     * fixed too long line
     * fixed too long line
 
 
   Revision 1.3  1998/06/09 16:01:35  pierre
   Revision 1.3  1998/06/09 16:01:35  pierre

+ 106 - 102
compiler/cg386mem.pas

@@ -384,14 +384,14 @@ implementation
                           begin
                           begin
                              extraoffset:=p^.right^.left^.value;
                              extraoffset:=p^.right^.left^.value;
                              t:=p^.right^.right;
                              t:=p^.right^.right;
-                                           putnode(p^.right);
+                             putnode(p^.right);
                              putnode(p^.right^.left);
                              putnode(p^.right^.left);
                              p^.right:=t
                              p^.right:=t
                           end;
                           end;
                      end
                      end
                    else if (p^.right^.treetype=subn) then
                    else if (p^.right^.treetype=subn) then
                      begin
                      begin
-                                    if p^.right^.right^.treetype=ordconstn then
+                        if p^.right^.right^.treetype=ordconstn then
                           begin
                           begin
                              extraoffset:=p^.right^.right^.value;
                              extraoffset:=p^.right^.right^.value;
                              t:=p^.right^.left;
                              t:=p^.right^.left;
@@ -402,7 +402,7 @@ implementation
                         else if p^.right^.left^.treetype=ordconstn then
                         else if p^.right^.left^.treetype=ordconstn then
                           begin
                           begin
                              extraoffset:=p^.right^.left^.value;
                              extraoffset:=p^.right^.left^.value;
-                                           t:=p^.right^.right;
+                             t:=p^.right^.right;
                              putnode(p^.right);
                              putnode(p^.right);
                              putnode(p^.right^.left);
                              putnode(p^.right^.left);
                              p^.right:=t
                              p^.right:=t
@@ -418,105 +418,105 @@ implementation
               pushed:=maybe_push(p^.right^.registers32,p);
               pushed:=maybe_push(p^.right^.registers32,p);
               secondpass(p^.right);
               secondpass(p^.right);
               if pushed then restore(p);
               if pushed then restore(p);
-                case p^.right^.location.loc of
-                   LOC_REGISTER:
-                     begin
-                        ind:=p^.right^.location.register;
-                        case p^.right^.resulttype^.size of
-                           1:
-                             begin
-                                hr:=reg8toreg32(ind);
-                                emit_reg_reg(A_MOVZX,S_BL,ind,hr);
-                                ind:=hr;
-                             end;
-                           2:
-                             begin
-                                hr:=reg16toreg32(ind);
-                                emit_reg_reg(A_MOVZX,S_WL,ind,hr);
-                                 ind:=hr;
-                             end;
-                        end;
-                     end;
-                   LOC_CREGISTER:
-                     begin
-                        ind:=getregister32;
-                        case p^.right^.resulttype^.size of
-                           1:
-                             emit_reg_reg(A_MOVZX,S_BL,p^.right^.location.register,ind);
-                           2:
-                             emit_reg_reg(A_MOVZX,S_WL,p^.right^.location.register,ind);
-                           4:
-                             emit_reg_reg(A_MOV,S_L,p^.right^.location.register,ind);
-                        end;
-                     end;
-                   LOC_FLAGS:
-                     begin
-                        ind:=getregister32;
-                        exprasmlist^.concat(new(pai386,op_reg(flag_2_set[p^.right^.location.resflags],S_B,reg32toreg8(ind))));
-                        emit_reg_reg(A_MOVZX,S_BL,reg32toreg8(ind),ind);
-                     end
-                   else
-                      begin
-                         del_reference(p^.right^.location.reference);
-                         ind:=getregister32;
-                         { Booleans are stored in an 8 bit memory location, so
-                           the use of MOVL is not correct }
-                         case p^.right^.resulttype^.size of
-                           1:
-                             tai:=new(pai386,op_ref_reg(A_MOVZX,S_BL,newreference(p^.right^.location.reference),ind));
-                           2:
-                             tai:=new(Pai386,op_ref_reg(A_MOVZX,S_WL,newreference(p^.right^.location.reference),ind));
-                           4:
-                             tai:=new(Pai386,op_ref_reg(A_MOV,S_L,newreference(p^.right^.location.reference),ind));
-                         end;
-                         exprasmlist^.concat(tai);
+              case p^.right^.location.loc of
+                 LOC_REGISTER:
+                   begin
+                      ind:=p^.right^.location.register;
+                      case p^.right^.resulttype^.size of
+                         1:
+                           begin
+                              hr:=reg8toreg32(ind);
+                              emit_reg_reg(A_MOVZX,S_BL,ind,hr);
+                              ind:=hr;
+                           end;
+                         2:
+                           begin
+                              hr:=reg16toreg32(ind);
+                              emit_reg_reg(A_MOVZX,S_WL,ind,hr);
+                              ind:=hr;
+                           end;
                       end;
                       end;
-                end;
-              { produce possible range check code: }
-              if cs_rangechecking in aktswitches  then
-                begin
-                   if p^.left^.resulttype^.deftype=arraydef then
-                     begin
-                        hp:=new_reference(R_NO,0);
-                        parraydef(p^.left^.resulttype)^.genrangecheck;
-                        hp^.symbol:=stringdup('R_'+tostr(parraydef(p^.left^.resulttype)^.rangenr));
-                        exprasmlist^.concat(new(pai386,op_reg_ref(A_BOUND,S_L,ind,hp)));
-                     end;
-                end;
-              if p^.location.reference.index=R_NO then
-                begin
-                   p^.location.reference.index:=ind;
-                   calc_emit_mul;
-                end
-              else
-                begin
-                   if p^.location.reference.base=R_NO then
-                     begin
-                        case p^.location.reference.scalefactor of
-                           2 : exprasmlist^.concat(new(pai386,op_const_reg(A_SHL,S_L,1,p^.location.reference.index)));
-                           4 : exprasmlist^.concat(new(pai386,op_const_reg(A_SHL,S_L,2,p^.location.reference.index)));
-                           8 : exprasmlist^.concat(new(pai386,op_const_reg(A_SHL,S_L,3,p^.location.reference.index)));
-                        end;
-                        calc_emit_mul;
-                        p^.location.reference.base:=p^.location.reference.index;
-                        p^.location.reference.index:=ind;
-                     end
-                   else
-                     begin
-                        exprasmlist^.concat(new(pai386,op_ref_reg(
-                          A_LEA,S_L,newreference(p^.location.reference),
-                          p^.location.reference.index)));
-                        ungetregister32(p^.location.reference.base);
-                        { the symbol offset is loaded,               }
-                        { so release the symbol name and set symbol  }
-                        { to nil                                     }
-                        stringdispose(p^.location.reference.symbol);
-                        p^.location.reference.offset:=0;
-                        calc_emit_mul;
-                        p^.location.reference.base:=p^.location.reference.index;
-                        p^.location.reference.index:=ind;
-                     end;
-                end;
+                   end;
+                 LOC_CREGISTER:
+                   begin
+                      ind:=getregister32;
+                      case p^.right^.resulttype^.size of
+                         1:
+                           emit_reg_reg(A_MOVZX,S_BL,p^.right^.location.register,ind);
+                         2:
+                           emit_reg_reg(A_MOVZX,S_WL,p^.right^.location.register,ind);
+                         4:
+                           emit_reg_reg(A_MOV,S_L,p^.right^.location.register,ind);
+                      end;
+                   end;
+                 LOC_FLAGS:
+                   begin
+                      ind:=getregister32;
+                      exprasmlist^.concat(new(pai386,op_reg(flag_2_set[p^.right^.location.resflags],S_B,reg32toreg8(ind))));
+                      emit_reg_reg(A_MOVZX,S_BL,reg32toreg8(ind),ind);
+                   end
+                 else
+                    begin
+                       del_reference(p^.right^.location.reference);
+                       ind:=getregister32;
+                       { Booleans are stored in an 8 bit memory location, so
+                         the use of MOVL is not correct }
+                       case p^.right^.resulttype^.size of
+                         1:
+                           tai:=new(pai386,op_ref_reg(A_MOVZX,S_BL,newreference(p^.right^.location.reference),ind));
+                         2:
+                           tai:=new(Pai386,op_ref_reg(A_MOVZX,S_WL,newreference(p^.right^.location.reference),ind));
+                         4:
+                           tai:=new(Pai386,op_ref_reg(A_MOV,S_L,newreference(p^.right^.location.reference),ind));
+                       end;
+                       exprasmlist^.concat(tai);
+                    end;
+              end;
+            { produce possible range check code: }
+            if cs_rangechecking in aktswitches  then
+              begin
+                 if p^.left^.resulttype^.deftype=arraydef then
+                   begin
+                      hp:=new_reference(R_NO,0);
+                      parraydef(p^.left^.resulttype)^.genrangecheck;
+                      hp^.symbol:=stringdup('R_'+tostr(parraydef(p^.left^.resulttype)^.rangenr));
+                      exprasmlist^.concat(new(pai386,op_reg_ref(A_BOUND,S_L,ind,hp)));
+                   end;
+              end;
+            if p^.location.reference.index=R_NO then
+              begin
+                 p^.location.reference.index:=ind;
+                 calc_emit_mul;
+              end
+            else
+              begin
+                 if p^.location.reference.base=R_NO then
+                   begin
+                      case p^.location.reference.scalefactor of
+                         2 : exprasmlist^.concat(new(pai386,op_const_reg(A_SHL,S_L,1,p^.location.reference.index)));
+                         4 : exprasmlist^.concat(new(pai386,op_const_reg(A_SHL,S_L,2,p^.location.reference.index)));
+                         8 : exprasmlist^.concat(new(pai386,op_const_reg(A_SHL,S_L,3,p^.location.reference.index)));
+                      end;
+                      calc_emit_mul;
+                      p^.location.reference.base:=p^.location.reference.index;
+                      p^.location.reference.index:=ind;
+                   end
+                 else
+                   begin
+                      exprasmlist^.concat(new(pai386,op_ref_reg(
+                        A_LEA,S_L,newreference(p^.location.reference),
+                        p^.location.reference.index)));
+                      ungetregister32(p^.location.reference.base);
+                      { the symbol offset is loaded,               }
+                      { so release the symbol name and set symbol  }
+                      { to nil                                     }
+                      stringdispose(p^.location.reference.symbol);
+                      p^.location.reference.offset:=0;
+                      calc_emit_mul;
+                      p^.location.reference.base:=p^.location.reference.index;
+                      p^.location.reference.index:=ind;
+                   end;
+              end;
              if p^.memseg then
              if p^.memseg then
                p^.location.reference.segment:=R_FS;
                p^.location.reference.segment:=R_FS;
            end;
            end;
@@ -579,7 +579,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.3  1998-06-25 08:48:09  florian
+  Revision 1.4  1998-07-24 22:16:55  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.3  1998/06/25 08:48:09  florian
     * first version of rtti support
     * first version of rtti support
 
 
   Revision 1.2  1998/06/08 13:13:35  pierre
   Revision 1.2  1998/06/08 13:13:35  pierre

+ 6 - 1
compiler/innr.inc

@@ -55,10 +55,15 @@ const
    in_exclude_x_y = 38;
    in_exclude_x_y = 38;
    in_break = 39;
    in_break = 39;
    in_continue = 40;
    in_continue = 40;
+   in_assert_x = 41;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.4  1998-05-01 16:38:44  florian
+  Revision 1.5  1998-07-24 22:16:57  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.4  1998/05/01 16:38:44  florian
     * handling of private and protected fixed
     * handling of private and protected fixed
     + change_keywords_to_tp implemented to remove
     + change_keywords_to_tp implemented to remove
       keywords which aren't supported by tp
       keywords which aren't supported by tp

+ 68 - 20
compiler/pass_1.pas

@@ -1944,7 +1944,7 @@ unit pass_1;
          if not((p^.left^.treetype=ordconstn) and
          if not((p^.left^.treetype=ordconstn) and
             (p^.right^.treetype=ordconstn)) then
             (p^.right^.treetype=ordconstn)) then
            Message(cg_e_illegal_expression);
            Message(cg_e_illegal_expression);
-         { upper limit must be greater or equalt than lower limit }
+         { upper limit must be greater or equal than lower limit }
          { not if u32bit }
          { not if u32bit }
          if (p^.left^.value>p^.right^.value) and
          if (p^.left^.value>p^.right^.value) and
             (( p^.left^.value<0) or (p^.right^.value>=0)) then
             (( p^.left^.value<0) or (p^.right^.value>=0)) then
@@ -1956,6 +1956,19 @@ unit pass_1;
            Message(sym_e_type_mismatch);
            Message(sym_e_type_mismatch);
       end;
       end;
 
 
+      {
+      begin
+         p^.registers32:=max(p^.left^.registers32,p^.right^.registers32);
+         if p^.right^.treetype<>ordconstn then
+           begin
+              case p^.right^.location.loc of
+                 LOC_MEM,LOC_REFERENCE,
+                 LOC_CREGISTER,LOC_FLAGS:
+                   inc(p^.registers32);
+              end;
+           end;
+      end;
+      }
     procedure firstvecn(var p : ptree);
     procedure firstvecn(var p : ptree);
 
 
       var
       var
@@ -1980,17 +1993,17 @@ unit pass_1;
                 Message(sym_e_type_mismatch);
                 Message(sym_e_type_mismatch);
            end;
            end;
          { Never convert a boolean or a char !}
          { Never convert a boolean or a char !}
-                 { maybe type conversion }
-                 if (p^.right^.resulttype^.deftype<>enumdef) and
-                  not ((p^.right^.resulttype^.deftype=orddef) and
-                  (Porddef(p^.right^.resulttype)^.typ in [bool8bit,bool16bit,bool32bit,uchar])) then
-                        begin
-                                p^.right:=gentypeconvnode(p^.right,s32bitdef);
-                                { once more firstpass }
-                                {?? It's better to only firstpass when the tree has
-                                 changed, isn't it ?}
-                                firstpass(p^.right);
-                        end;
+         { maybe type conversion }
+         if (p^.right^.resulttype^.deftype<>enumdef) and
+          not ((p^.right^.resulttype^.deftype=orddef) and
+          (Porddef(p^.right^.resulttype)^.typ in [bool8bit,bool16bit,bool32bit,uchar])) then
+                begin
+                        p^.right:=gentypeconvnode(p^.right,s32bitdef);
+                        { once more firstpass }
+                        {?? It's better to only firstpass when the tree has
+                         changed, isn't it ?}
+                        firstpass(p^.right);
+                end;
          if codegenerror then
          if codegenerror then
            exit;
            exit;
 
 
@@ -2010,23 +2023,54 @@ unit pass_1;
                   exit;
                   exit;
                 p^.resulttype:=parraydef(harr)^.definition
                 p^.resulttype:=parraydef(harr)^.definition
              end
              end
+           else if p^.left^.resulttype^.deftype=stringdef then
+             begin
+                { indexed access to strings }
+                case pstringdef(p^.left^.resulttype)^.string_typ of
+                   {
+                   st_widestring : p^.resulttype:=cwchardef;
+                   }
+                   st_ansistring : p^.resulttype:=cchardef;
+                   st_longstring : p^.resulttype:=cchardef;
+                   st_shortstring : p^.resulttype:=cchardef;
+                end;
+             end
            else
            else
-           { indexed access to arrays }
-             p^.resulttype:=cchardef;
-
+             Message(sym_e_type_mismatch);
          { the register calculation is easy if a const index is used }
          { the register calculation is easy if a const index is used }
          if p^.right^.treetype=ordconstn then
          if p^.right^.treetype=ordconstn then
-           p^.registers32:=p^.left^.registers32
+           begin
+              p^.registers32:=p^.left^.registers32
+              {
+              if is_ansistring(p^.left^.
+              }
+           end
          else
          else
            begin
            begin
+              { this rules are suboptimal, but they should give }
+              { good results                                    }
               p^.registers32:=max(p^.left^.registers32,p^.right^.registers32);
               p^.registers32:=max(p^.left^.registers32,p^.right^.registers32);
-
-              { not correct, but what works better ? }
+              { need we an extra register when doing the restore ? }
+              if (p^.left^.registers32<=p^.right^.registers32) and
+              { only if the node needs less than 3 registers }
+              { two for the right node and one for the       }
+              { left address                                 }
+                (p^.registers32<3) then
+                inc(p^.registers32);
+
+              { need we an extra register for the index ? }
+              if (p^.right^.location.loc<>LOC_REGISTER)
+              { only if the right node doesn't need a register }
+                and (p^.right^.registers32<1) then
+                inc(p^.registers32);
+
+              { not correct, but what works better ?
               if p^.left^.registers32>0 then
               if p^.left^.registers32>0 then
                 p^.registers32:=max(p^.registers32,2)
                 p^.registers32:=max(p^.registers32,2)
               else
               else
-              { min. one register }
+                 min. one register
                 p^.registers32:=max(p^.registers32,1);
                 p^.registers32:=max(p^.registers32,1);
+              }
            end;
            end;
          p^.registersfpu:=max(p^.left^.registersfpu,p^.right^.registersfpu);
          p^.registersfpu:=max(p^.left^.registersfpu,p^.right^.registersfpu);
 {$ifdef SUPPORT_MMX}
 {$ifdef SUPPORT_MMX}
@@ -5048,7 +5092,11 @@ unit pass_1;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.43  1998-07-20 18:40:14  florian
+  Revision 1.44  1998-07-24 22:16:59  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.43  1998/07/20 18:40:14  florian
     * handling of ansi string constants should now work
     * handling of ansi string constants should now work
 
 
   Revision 1.42  1998/07/20 10:23:01  florian
   Revision 1.42  1998/07/20 10:23:01  florian

+ 6 - 2
compiler/switches.pas

@@ -66,7 +66,7 @@ const
   SwitchTable:array['A'..'Z'] of SwitchRec=(
   SwitchTable:array['A'..'Z'] of SwitchRec=(
    {A} (typesw:unsupported; setsw:cs_none; proc:nil),
    {A} (typesw:unsupported; setsw:cs_none; proc:nil),
    {B} (typesw:unsupported; setsw:cs_none; proc:nil),
    {B} (typesw:unsupported; setsw:cs_none; proc:nil),
-   {C} (typesw:illegal; setsw:cs_none; proc:nil),
+   {C} (typesw:local; setsw:cs_do_assertion; proc:nil),
    {D} (typesw:unitglobal; setsw:cs_debuginfo; proc:nil),
    {D} (typesw:unitglobal; setsw:cs_debuginfo; proc:nil),
    {E} (typesw:programglobal; setsw:cs_fp_emulation; proc:nil),
    {E} (typesw:programglobal; setsw:cs_fp_emulation; proc:nil),
    {F} (typesw:unsupported; setsw:cs_none; proc:nil),
    {F} (typesw:unsupported; setsw:cs_none; proc:nil),
@@ -161,7 +161,11 @@ end;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.6  1998-07-18 17:11:13  florian
+  Revision 1.7  1998-07-24 22:17:00  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.6  1998/07/18 17:11:13  florian
     + ansi string constants fixed
     + ansi string constants fixed
     + switch $H partial implemented
     + switch $H partial implemented
 
 

+ 6 - 2
compiler/tree.pas

@@ -195,7 +195,7 @@ unit tree;
           fileinfo : tfileposinfo;
           fileinfo : tfileposinfo;
           pragmas : Tcswitches;
           pragmas : Tcswitches;
 {$ifdef extdebug}
 {$ifdef extdebug}
-        firstpasscount : longint;
+          firstpasscount : longint;
 {$endif extdebug}
 {$endif extdebug}
           case treetype : ttreetyp of
           case treetype : ttreetyp of
              addn : (use_strconcat : boolean;string_typ : tstringtype);
              addn : (use_strconcat : boolean;string_typ : tstringtype);
@@ -1596,7 +1596,11 @@ unit tree;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.22  1998-07-20 10:23:05  florian
+  Revision 1.23  1998-07-24 22:17:01  florian
+    * internal error 10 together with array access fixed. I hope
+      that's the final fix.
+
+  Revision 1.22  1998/07/20 10:23:05  florian
     * better ansi string assignement
     * better ansi string assignement
 
 
   Revision 1.21  1998/07/14 21:46:56  peter
   Revision 1.21  1998/07/14 21:46:56  peter