فهرست منبع

* Propagate AS_NEEDED flag down the expression tree an assign it to TStaticLibrary objects.

git-svn-id: trunk@23116 -
sergei 12 سال پیش
والد
کامیت
7d19a6d551
1فایلهای تغییر یافته به همراه7 افزوده شده و 5 حذف شده
  1. 7 5
      compiler/link.pas

+ 7 - 5
compiler/link.pas

@@ -98,7 +98,7 @@ interface
          FImportLibraryList : TFPHashObjectList;
          FGroupStack : TFPObjectList;
          procedure Load_ReadObject(const para:TCmdStr);
-         procedure Load_ReadStaticLibrary(const para:TCmdStr);
+         procedure Load_ReadStaticLibrary(const para:TCmdStr;asneededflag:boolean=false);
          procedure Load_Group;
          procedure Load_EndGroup;
          procedure ParseScript_Handle;
@@ -954,7 +954,7 @@ Implementation
               end
             else if src.token in [tkIDENT,tkLITERAL] then
               begin
-                Load_ReadStaticLibrary(src.tokenstr);
+                Load_ReadStaticLibrary(src.tokenstr,asneeded);
                 src.nextToken;
               end
             else if src.CheckFor('-') then
@@ -1017,12 +1017,13 @@ Implementation
       end;
 
 
-    procedure TInternalLinker.Load_ReadStaticLibrary(const para:TCmdStr);
+    procedure TInternalLinker.Load_ReadStaticLibrary(const para:TCmdStr;asneededflag:boolean);
       var
         objreader : TArObjectReader;
         objinput: TObjInput;
         objdata: TObjData;
         ScriptLexer: TScriptLexer;
+        stmt:TStaticLibrary;
       begin
 { TODO: Cleanup ignoring of   FPC generated libimp*.a files}
         { Don't load import libraries }
@@ -1040,8 +1041,9 @@ Implementation
               objdata:=objinput.newObjData(para);
               if objinput.ReadObjData(objreader,objdata) then
                 begin
-                  TFPObjectList(FGroupStack.Last).Add(TStaticLibrary.create_object(objdata));
-                  //exeoutput.addobjdata(objdata);
+                  stmt:=TStaticLibrary.create_object(objdata);
+                  stmt.AsNeeded:=asneededflag;
+                  TFPObjectList(FGroupStack.Last).Add(stmt);
                 end;
               objinput.Free;
               objreader.Free;