fpc/compiler/pgentype.pas
svenbarth c81eda7a42 Fully enable generic functions, procedures and methods by allowing inline specializations in procedure bodies as well.
Please note that this now also includes inline specializations of types in non-Delphi modes, thus removing a difference between modes Delphi and non-Delphi

pgentype.pas, inline_specialization_block_types:
  + add bt_body as valid block type

git-svn-id: trunk@32439 -
2015-11-21 16:52:09 +00:00

78 lines
1.9 KiB
ObjectPascal

{
Copyright (c) 2015 by Sven Barth
Contains different types that are used in the context of parsing generics.
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 pgentype;
{$i fpcdefs.inc}
interface
uses
cclasses,
globtype,
symtype,symbase;
const
inline_specialization_block_types = [bt_type,bt_var_type,bt_const_type,bt_body];
type
tspecializationstate = record
oldsymtablestack : tsymtablestack;
oldextendeddefs : tfphashobjectlist;
oldgenericdummysyms: tfphashobjectlist;
end;
tspecializationcontext=class
public
genericdeflist : tfpobjectlist;
poslist : tfplist;
prettyname : ansistring;
specializename : ansistring;
genname : string;
sym : tsym;
symtable : tsymtable;
constructor create;
destructor destroy;override;
end;
implementation
constructor tspecializationcontext.create;
begin
genericdeflist:=tfpobjectlist.create(false);
poslist:=tfplist.create;
end;
destructor tspecializationcontext.destroy;
var
i : longint;
begin
genericdeflist.free;
for i:=0 to poslist.count-1 do
dispose(pfileposinfo(poslist[i]));
poslist.free;
inherited destroy;
end;
end.