123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- {
- $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,export;
- const
- { export options }
- eo_resident = $1;
- procedure read_exports;
- var
- hp : pexported_procedure;
- code : word;
- begin
- consume(_EXPORTS);
- while true do
- begin
- hp:=new(pexported_procedure,init);
- 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 (idtoken=_INDEX) then
- begin
- consume(_INDEX);
- val(pattern,hp^.index,code);
- consume(INTCONST);
- end;
- if (idtoken=_NAME) then
- begin
- consume(_NAME);
- hp^.name:=stringdup(pattern);
- consume(ID);
- end;
- if (idtoken=_RESIDENT) then
- begin
- consume(_RESIDENT);
- hp^.options:=hp^.options or eo_resident;
- end;
- end;
- exportlib^.exportprocedure(hp);
- end
- else
- consume(ID);
- if token=COMMA then
- consume(COMMA)
- else
- break;
- end;
- consume(SEMICOLON);
- end;
- end.
- {
- $Log$
- Revision 1.3 1998-10-29 11:35:51 florian
- * some dll support for win32
- * fixed assembler writing for PalmOS
- Revision 1.2 1998/09/26 17:45:35 peter
- + idtoken and only one token table
- }
|