mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-04 00:23:46 +02:00
119 lines
4.2 KiB
PHP
119 lines
4.2 KiB
PHP
{
|
|
$Id$
|
|
Copyright (c) 1999-2000 by Florian Klaempfl
|
|
|
|
The declarations of the nodes for the new code generator
|
|
|
|
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.
|
|
|
|
****************************************************************************
|
|
}
|
|
type
|
|
tnodeflags = (nf_needs_truefalselabel,tf_callunique);
|
|
|
|
tnodeflagset = set of tnodeflags;
|
|
|
|
pnode = ^tnode;
|
|
tnode = object(tlinkedlist_item)
|
|
treetype : ttreetyp;
|
|
{ the location of the result of this node }
|
|
location : tlocation;
|
|
{ do we need to parse childs to set var state }
|
|
varstateset : boolean;
|
|
{ the parent node of this is node }
|
|
{ this field is set by concattolist }
|
|
parent : pnode;
|
|
{ there are some properties about the node stored }
|
|
flags : tnodeflagset;
|
|
{ the number of registers needed to evalute the node }
|
|
registersint,registersfpu : longint; { must be longint !!!! }
|
|
{$ifdef SUPPORT_MMX}
|
|
registersmmx,registerskni : longint;
|
|
{$endif SUPPORT_MMX}
|
|
resulttype : pdef;
|
|
fileinfo : tfileposinfo;
|
|
localswitches : tlocalswitches;
|
|
{$ifdef extdebug}
|
|
firstpasscount : longint;
|
|
{$endif extdebug}
|
|
error : boolean;
|
|
list : paasmoutput;
|
|
constructor init;
|
|
destructor done;virtual;
|
|
{ runs det_resulttype and det_temp }
|
|
procedure pass_1;
|
|
{ dermines the resulttype of the node }
|
|
procedure det_resulttype;virtual;
|
|
{ dermines the number of necessary temp. locations to evaluate
|
|
the node }
|
|
procedure det_temp;virtual;
|
|
procedure secondpass;virtual;
|
|
{$ifdef EXTDEBUG}
|
|
{ writes a node for debugging purpose, shouldn't be called }
|
|
{ direct, because there is no test for nil, use writenode }
|
|
{ to write a complete tree }
|
|
procedure dowrite;virtual;
|
|
{$endif EXTDEBUG}
|
|
procedure concattolist(l : plinkedlist);virtual;
|
|
function ischild(p : pnode) : boolean;virtual;
|
|
end;
|
|
|
|
{ this node is the anchestor for all classes with at least }
|
|
{ one child, you have to use it if you want to use }
|
|
{ true- and falselabel }
|
|
punarynode = ^tunarynode;
|
|
tunarynode = object(tnode)
|
|
left : pnode;
|
|
truelabel,falselabel : pasmlabel;
|
|
{$ifdef extdebug}
|
|
procedure dowrite;virtual;
|
|
{$endif extdebug}
|
|
constructor init(l : pnode);
|
|
procedure concattolist(l : plinkedlist);virtual;
|
|
function ischild(p : pnode) : boolean;virtual;
|
|
procedure det_resulttype;virtual;
|
|
procedure det_temp;virtual;
|
|
end;
|
|
|
|
pbinarynode = ^tbinarynode;
|
|
tbinarynode = object(tunarynode)
|
|
right : pnode;
|
|
constructor init(l,r : pnode);
|
|
procedure concattolist(l : plinkedlist);virtual;
|
|
function ischild(p : pnode) : boolean;virtual;
|
|
procedure det_resulttype;virtual;
|
|
procedure det_temp;virtual;
|
|
end;
|
|
|
|
pvecnode = ^tvecnode;
|
|
tvecnode = object(tbinarynode)
|
|
end;
|
|
|
|
|
|
pbinopnode = ^tbinopnode;
|
|
tbinopnode = object(tbinarynode)
|
|
{ is true, if the right and left operand are swaped }
|
|
{ against the original order }
|
|
swaped : boolean;
|
|
constructor init(l,r : pnode);
|
|
end;
|
|
|
|
{
|
|
$Log$
|
|
Revision 1.1 2000-02-20 20:49:45 florian
|
|
* newcg is compiling
|
|
* fixed the dup id problem reported by Paul Y.
|
|
|
|
} |