fpc/compiler/import.pas
daniel fb1a842118 * Current work of symtable integration committed. The symtable can be
activated by defining 'newst', but doesn't compile yet. Changes in type
  checking and oop are completed. What is left is to write a new
  symtablestack and adapt the parser to use it.
2000-02-28 17:23:56 +00:00

287 lines
6.3 KiB
ObjectPascal

{
$Id$
Copyright (c) 1998-2000 by Peter Vreman
This unit implements an uniform import object
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
****************************************************************************}
unit import;
interface
uses
cobjects{$IFDEF NEWST},objects{$ENDIF NEWST};
type
pimported_item = ^timported_item;
timported_item = object(tlinkedlist_item)
ordnr : word;
name,
func : pstring;
lab : pointer; { should be plabel, but this gaves problems with circular units }
is_var : boolean;
constructor init(const n,s : string;o : word);
constructor init_var(const n,s : string);
destructor done;virtual;
end;
pimportlist = ^timportlist;
timportlist = object(tlinkedlist_item)
dllname : pstring;
imported_items : plinkedlist;
constructor init(const n : string);
destructor done;virtual;
end;
pimportlib=^timportlib;
timportlib=object
private
notsupmsg : boolean;
procedure NotSupported;
public
constructor Init;
destructor Done;
procedure preparelib(const s:string);virtual;
procedure importprocedure(const func,module:string;index:longint;const name:string);virtual;
procedure importvariable(const varname,module:string;const name:string);virtual;
procedure generatelib;virtual;
procedure generatesmartlib;virtual;
end;
var
importlib : pimportlib;
procedure InitImport;
procedure DoneImport;
implementation
uses
systems,verbose,globals
{$ifdef i386}
{$ifndef NOTARGETLINUX}
,t_linux
{$endif}
{$ifndef NOTARGETOS2}
,t_os2
{$endif}
{$ifndef NOTARGETWIN32}
,t_win32
{$endif}
{$ifndef NOTARGETGO32V2}
,t_go32v2
{$endif}
{$endif}
{$ifdef m68k}
{$ifndef NOTARGETLINUX}
,t_linux
{$endif}
{$endif}
{$ifdef powerpc}
{$ifndef NOTARGETLINUX}
,t_linux
{$endif}
{$endif}
{$ifdef alpha}
{$ifndef NOTARGETLINUX}
,t_linux
{$endif}
{$endif}
;
{****************************************************************************
Timported_item
****************************************************************************}
constructor timported_item.init(const n,s : string;o : word);
begin
inherited init;
func:=stringdup(n);
name:=stringdup(s);
ordnr:=o;
lab:=nil;
is_var:=false;
end;
constructor timported_item.init_var(const n,s : string);
begin
inherited init;
func:=stringdup(n);
name:=stringdup(s);
ordnr:=0;
lab:=nil;
is_var:=true;
end;
destructor timported_item.done;
begin
stringdispose(name);
stringdispose(func);
inherited done;
end;
{****************************************************************************
TImportlist
****************************************************************************}
constructor timportlist.init(const n : string);
begin
inherited init;
dllname:=stringdup(n);
imported_items:=new(plinkedlist,init);
end;
destructor timportlist.done;
begin
dispose(imported_items,done);
stringdispose(dllname);
end;
{****************************************************************************
TImportLib
****************************************************************************}
constructor timportlib.Init;
begin
notsupmsg:=false;
end;
destructor timportlib.Done;
begin
end;
procedure timportlib.NotSupported;
begin
{ show the message only once }
if not notsupmsg then
begin
Message(exec_e_dll_not_supported);
notsupmsg:=true;
end;
end;
procedure timportlib.preparelib(const s:string);
begin
NotSupported;
end;
procedure timportlib.importprocedure(const func,module:string;index:longint;const name:string);
begin
NotSupported;
end;
procedure timportlib.importvariable(const varname,module:string;const name:string);
begin
NotSupported;
end;
procedure timportlib.generatelib;
begin
NotSupported;
end;
procedure timportlib.generatesmartlib;
begin
NotSupported;
end;
procedure DoneImport;
begin
if assigned(importlib) then
dispose(importlib,done);
end;
procedure InitImport;
begin
case target_info.target of
{$ifdef i386}
target_i386_Linux :
importlib:=new(pimportliblinux,Init);
target_i386_Win32 :
importlib:=new(pimportlibwin32,Init);
target_i386_OS2 :
importlib:=new(pimportlibos2,Init);
{$endif i386}
{$ifdef m68k}
target_m68k_Linux :
importlib:=new(pimportliblinux,Init);
{$endif m68k}
{$ifdef alpha}
target_alpha_Linux :
importlib:=new(pimportliblinux,Init);
{$endif alpha}
{$ifdef powerpc}
target_alpha_Linux :
importlib:=new(pimportliblinux,Init);
{$endif powerpc}
else
importlib:=new(pimportlib,Init);
end;
end;
end.
{
$Log$
Revision 1.19 2000-02-28 17:23:57 daniel
* Current work of symtable integration committed. The symtable can be
activated by defining 'newst', but doesn't compile yet. Changes in type
checking and oop are completed. What is left is to write a new
symtablestack and adapt the parser to use it.
Revision 1.18 2000/02/09 13:22:54 peter
* log truncated
Revision 1.17 2000/01/12 10:34:29 peter
* only give unsupported error once
Revision 1.16 2000/01/07 01:14:27 peter
* updated copyright to 2000
Revision 1.15 1999/11/06 14:34:21 peter
* truncated log to 20 revs
Revision 1.14 1999/11/02 15:06:57 peter
* import library fixes for win32
* alignment works again
Revision 1.13 1999/10/21 14:29:34 peter
* redesigned linker object
+ library support for linux (only procedures can be exported)
Revision 1.12 1999/08/04 13:02:44 jonas
* all tokens now start with an underscore
* PowerPC compiles!!
Revision 1.11 1999/08/03 13:50:16 michael
+ Changes for alpha
}