Browse Source

* support @labelsym

peter 21 years ago
parent
commit
f02ebed09e
4 changed files with 37 additions and 9 deletions
  1. 8 1
      compiler/ncgld.pas
  2. 8 1
      compiler/nld.pas
  3. 15 6
      compiler/pexpr.pas
  4. 6 1
      compiler/ptconst.pas

+ 8 - 1
compiler/ncgld.pas

@@ -360,6 +360,10 @@ implementation
                begin
                   location.reference.symbol:=objectlibrary.newasmsymbol(ttypedconstsym(symtableentry).mangledname,AB_EXTERNAL,AT_DATA);
                end;
+            labelsym :
+               begin
+                  location.reference.symbol:=objectlibrary.newasmsymbol(ttypedconstsym(symtableentry).mangledname,AB_EXTERNAL,AT_FUNCTION);
+               end;
             else internalerror(4);
          end;
       end;
@@ -951,7 +955,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.129  2004-10-31 21:45:03  peter
+  Revision 1.130  2004-11-01 15:32:12  peter
+    * support @labelsym
+
+  Revision 1.129  2004/10/31 21:45:03  peter
     * generic tlocation
     * move tlocation to cgutils
 

+ 8 - 1
compiler/nld.pas

@@ -330,6 +330,8 @@ implementation
                if assigned(left) then
                  resulttypepass(left);
              end;
+           labelsym:
+             resulttype:=voidtype;
            else
              internalerror(200104141);
          end;
@@ -414,6 +416,8 @@ implementation
  {$endif SUPPORT_MMX}
                      end;
                 end;
+           labelsym :
+             ;
            else
              internalerror(200104143);
          end;
@@ -1164,7 +1168,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.136  2004-10-31 21:45:03  peter
+  Revision 1.137  2004-11-01 15:32:12  peter
+    * support @labelsym
+
+  Revision 1.136  2004/10/31 21:45:03  peter
     * generic tlocation
     * move tlocation to cgutils
 

+ 15 - 6
compiler/pexpr.pas

@@ -1443,11 +1443,17 @@ implementation
 
                 labelsym :
                   begin
-                    consume(_COLON);
-                    if tlabelsym(srsym).defined then
-                     Message(sym_e_label_already_defined);
-                    tlabelsym(srsym).defined:=true;
-                    p1:=clabelnode.create(tlabelsym(srsym),nil);
+                    { Support @label }
+                    if getaddr then
+                      p1:=cloadnode.create(srsym,srsym.owner)
+                    else
+                      begin
+                        consume(_COLON);
+                        if tlabelsym(srsym).defined then
+                          Message(sym_e_label_already_defined);
+                        tlabelsym(srsym).defined:=true;
+                        p1:=clabelnode.create(tlabelsym(srsym),nil);
+                      end;
                   end;
 
                 errorsym :
@@ -2486,7 +2492,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.168  2004-11-01 10:33:01  peter
+  Revision 1.169  2004-11-01 15:32:12  peter
+    * support @labelsym
+
+  Revision 1.168  2004/11/01 10:33:01  peter
     * symlist typeconv for absolute fixed
 
   Revision 1.167  2004/10/25 15:38:41  peter

+ 6 - 1
compiler/ptconst.pas

@@ -444,6 +444,8 @@ implementation
                             curconstSegment.concat(Tai_const.Createname(tvarsym(srsym).mangledname,AT_DATA,offset));
                           typedconstsym :
                             curconstSegment.concat(Tai_const.Createname(ttypedconstsym(srsym).mangledname,AT_DATA,offset));
+                          labelsym :
+                            curconstSegment.concat(Tai_const.Createname(tlabelsym(srsym).mangledname,AT_FUNCTION,offset));
                           else
                             Message(type_e_variable_id_expected);
                         end;
@@ -1087,7 +1089,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.92  2004-10-15 09:14:17  mazen
+  Revision 1.93  2004-11-01 15:32:12  peter
+    * support @labelsym
+
+  Revision 1.92  2004/10/15 09:14:17  mazen
   - remove $IFDEF DELPHI and related code
   - remove $IFDEF FPCPROCVAR and related code