{ $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.2 2000-07-13 11:32:55 michael + removed logs }