123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- {
- $Id$
- Copyright (c) 1998 by Florian Klaempfl
- This unit handles the exports parsing
- 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 pexports;
- interface
- { reads an exports statement in a library }
- procedure read_exports;
- implementation
- uses
- cobjects,globals,scanner,symtable,pbase,verbose;
- const
- { export options }
- eo_resident = $1;
- type
- pexportsitem = ^texportsitem;
- texportsitem = object(tlinkedlist_item)
- sym : psym;
- index : longint;
- name : pstring;
- options : word;
- constructor init;
- end;
- var
- exportslist : tlinkedlist;
- constructor texportsitem.init;
- begin
- sym:=nil;
- index:=-1;
- name:=nil;
- options:=0;
- end;
- procedure read_exports;
- var
- hp : pexportsitem;
- code : word;
- begin
- hp:=new(pexportsitem,init);
- consume(_EXPORTS);
- while true do
- begin
- if token=ID then
- begin
- getsym(pattern,true);
- if srsym^.typ=unitsym then
- begin
- consume(ID);
- consume(POINT);
- getsymonlyin(punitsym(srsym)^.unitsymtable,pattern);
- end;
- consume(ID);
- if assigned(srsym) then
- begin
- hp^.sym:=srsym;
- if (srsym^.typ<>procsym) or
- ((pprocdef(pprocsym(srsym)^.definition)^.options and poexports)=0) then
- Message(parser_e_illegal_symbol_exported);
- if (token=ID) and (pattern='INDEX') then
- begin
- consume(ID);
- val(pattern,hp^.index,code);
- consume(INTCONST);
- end;
- if (token=ID) and (pattern='NAME') then
- begin
- consume(ID);
- hp^.name:=stringdup(pattern);
- consume(ID);
- end;
- if (token=ID) and (pattern='RESIDENT') then
- begin
- consume(ID);
- hp^.options:=hp^.options or eo_resident;
- end;
- end;
- end
- else
- consume(ID);
- if token=COMMA then
- consume(COMMA)
- else
- break;
- end;
- consume(SEMICOLON);
- end;
- begin
- { a library is a root of sources, e.g. it can't be used
- twice in one compiler run }
- exportslist.init;
- end.
- {
- $Log$
- Revision 1.1 1998-03-25 11:18:15 root
- Initial revision
- Revision 1.7 1998/03/10 01:17:24 peter
- * all files have the same header
- * messages are fully implemented, EXTDEBUG uses Comment()
- + AG... files for the Assembler generation
- Revision 1.6 1998/03/06 00:52:42 peter
- * replaced all old messages from errore.msg, only ExtDebug and some
- Comment() calls are left
- * fixed options.pas
- Revision 1.5 1998/03/02 01:49:01 peter
- * renamed target_DOS to target_GO32V1
- + new verbose system, merged old errors and verbose units into one new
- verbose.pas, so errors.pas is obsolete
- Revision 1.4 1998/02/13 10:35:24 daniel
- * Made Motorola version compilable.
- * Fixed optimizer
- Revision 1.3 1998/01/12 13:02:41 florian
- + items of exports are now seperated by ,
- Revision 1.2 1998/01/12 12:11:35 florian
- + unit qualifier is now allowed to specify exported symbols
- + exports starts now a list of symbols to export
- Revision 1.1 1998/01/11 10:58:07 florian
- + pexports in lowercase commited
- Revision 1.1 1998/01/11 10:54:19 florian
- + generic library support
- }
|