DoInstruction.hpp
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4 /* Copyright (c) 2005-2009 Rexx Language Association. All rights reserved. */
5 /* */
6 /* This program and the accompanying materials are made available under */
7 /* the terms of the Common Public License v1.0 which accompanies this */
8 /* distribution. A copy is also available at the following address: */
9 /* http://www.oorexx.org/license.html */
10 /* */
11 /* Redistribution and use in source and binary forms, with or */
12 /* without modification, are permitted provided that the following */
13 /* conditions are met: */
14 /* */
15 /* Redistributions of source code must retain the above copyright */
16 /* notice, this list of conditions and the following disclaimer. */
17 /* Redistributions in binary form must reproduce the above copyright */
18 /* notice, this list of conditions and the following disclaimer in */
19 /* the documentation and/or other materials provided with the distribution. */
20 /* */
21 /* Neither the name of Rexx Language Association nor the names */
22 /* of its contributors may be used to endorse or promote products */
23 /* derived from this software without specific prior written permission. */
24 /* */
25 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
26 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
27 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
28 /* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
29 /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
30 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
31 /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
32 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
33 /* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
34 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
35 /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
36 /* */
37 /*----------------------------------------------------------------------------*/
38 /******************************************************************************/
39 /* REXX Kernel DoInstruction.hpp */
40 /* */
41 /* Primitive DO instruction Class Definitions */
42 /* */
43 /******************************************************************************/
44 #ifndef Included_RexxInstructionDo
45 #define Included_RexxInstructionDo
46 
47 #include "RexxInstruction.hpp"
48 
49 #define SIMPLE_DO 1
50 #define DO_COUNT 2
51 #define DO_FOREVER 3
52 #define DO_WHILE 4
53 #define DO_UNTIL 5
54 #define CONTROLLED_DO 6
55 #define CONTROLLED_WHILE 7
56 #define CONTROLLED_UNTIL 8
57 #define DO_OVER 9
58 #define DO_OVER_WHILE 10
59 #define DO_OVER_UNTIL 11
60 #define DO_COUNT_WHILE 12
61 #define DO_COUNT_UNTIL 13
62 
63 #define EXP_TO 1 /* TO expression */
64 #define EXP_BY 2 /* BY expression */
65 #define EXP_FOR 3 /* FOR expression */
66 
68 {
69  public:
70 
71  inline void *operator new(size_t size, void *ptr) {return ptr;}
72  inline void operator delete(void *) { }
73  inline void operator delete(void *, void *) { }
74 
75 
76  inline RexxInstructionDo(void) { ; }
77  inline RexxInstructionDo(RESTORETYPE restoreType) { ; };
78 
80  bool isLabel(RexxString *name);
82  bool isLoop();
84 
85  void live(size_t);
86  void liveGeneral(int reason);
87  void flatten(RexxEnvelope *);
97 
98  RexxObject *initial; /* initial control expression */
99  RexxObject *to; /* final target value */
100  RexxObject *by; /* control increment value */
101  RexxVariableBase *control; /* control variable retriever */
102  RexxString *label; /* control variable name */
103  RexxObject *conditional; /* while/until expression */
104  RexxInstruction *end; /* matching END instruction */
105  RexxObject *forcount; /* number of iterations */
106  uint8_t type; /* type of loop */
107  uint8_t expressions[3]; /* controlled loop expression order */
108 };
109 #endif
RESTORETYPE
Definition: ObjectClass.hpp:80
void flatten(RexxEnvelope *)
bool checkOver(RexxActivation *, RexxExpressionStack *, RexxDoBlock *)
RexxInstruction * getEnd()
void reExecute(RexxActivation *, RexxExpressionStack *, RexxDoBlock *)
void matchEnd(RexxInstructionEnd *, RexxSource *)
void matchLabel(RexxInstructionEnd *end, RexxSource *source)
RexxVariableBase * control
RexxInstruction * end
void terminate(RexxActivation *, RexxDoBlock *)
bool isLabel(RexxString *name)
RexxString * label
bool whileCondition(RexxActivation *, RexxExpressionStack *)
RexxObject * forcount
void liveGeneral(int reason)
void execute(RexxActivation *, RexxExpressionStack *)
RexxObject * initial
uint8_t expressions[3]
RexxObject * conditional
bool checkControl(RexxActivation *, RexxExpressionStack *, RexxDoBlock *, bool)
RexxInstructionDo(RESTORETYPE restoreType)
bool untilCondition(RexxActivation *, RexxExpressionStack *)
RexxString * getLabel()
void controlSetup(RexxActivation *, RexxExpressionStack *, RexxDoBlock *)
unsigned char uint8_t