123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- {
- $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
-
- }
|