Browse Source

* fix for bug0182

pierre 27 years ago
parent
commit
c921c95996
1 changed files with 25 additions and 6 deletions
  1. 25 6
      compiler/ptconst.pas

+ 25 - 6
compiler/ptconst.pas

@@ -201,12 +201,28 @@ unit ptconst;
               else
                 if p^.treetype=addrn then
                   begin
+                    hp:=p^.left;
+                    while assigned(hp) and (hp^.treetype=subscriptn) do
+                      hp:=hp^.left;
                     if (is_equal(ppointerdef(p^.resulttype)^.definition,ppointerdef(def)^.definition) or
                        (is_equal(ppointerdef(p^.resulttype)^.definition,voiddef)) or
                        (is_equal(ppointerdef(def)^.definition,voiddef))) and
-                       (p^.left^.treetype = loadn) then
+                       (hp^.treetype = loadn) then
                       begin
-                        if token=POINT then
+                        firstpass(p^.left);
+                        hp:=p^.left;
+                        offset:=0;
+                        while assigned(hp) and (hp^.treetype<>loadn) do
+                          begin
+                             if hp^.treetype=subscriptn then
+                               inc(offset,hp^.vs^.address)
+                             else
+                               Message(cg_e_illegal_expression);
+                             hp:=hp^.left;
+                          end;
+                        datasegment^.concat(new(pai_const_symbol_offset,init(
+                               strpnew(hp^.symtableentry^.mangledname),offset)));
+                        (*if token=POINT then
                           begin
                              offset:=0;
                              while token=POINT do
@@ -229,9 +245,9 @@ unit ptconst;
                           begin
                              datasegment^.concat(new(pai_const,init_symbol(
                                strpnew(p^.left^.symtableentry^.mangledname))));
-                          end;
-                        maybe_concat_external(p^.left^.symtableentry^.owner,
-                          p^.left^.symtableentry^.mangledname);
+                          end;   *)
+                        maybe_concat_external(hp^.symtableentry^.owner,
+                          hp^.symtableentry^.mangledname);
                       end
                     else
                       Message(cg_e_illegal_expression);
@@ -631,7 +647,10 @@ unit ptconst;
 end.
 {
   $Log$
-  Revision 1.28  1998-11-17 10:40:16  peter
+  Revision 1.29  1998-11-23 18:26:44  pierre
+   * fix for bug0182
+
+  Revision 1.28  1998/11/17 10:40:16  peter
     * H+ fixes
 
   Revision 1.27  1998/11/16 12:12:23  peter