ooRexx  4.2.0-source
About: ooRexx (Open Object Rexx) is a free implementation of Object Rexx. Object Rexx is an enhancement of the classic Rexx interpreter; a full-featured programming language with a human-oriented syntax.
  Fossies Dox: ooRexx-4.2.0-source.tar.gz  ("inofficial" and yet experimental doxygen-generated source code documentation)  

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
RexxExpressionStack
Definition: ExpressionStack.hpp:53
RexxInstructionDo::getEnd
RexxInstruction * getEnd()
RexxInstructionDo::by
RexxObject * by
Definition: DoInstruction.hpp:100
RexxInstructionDo::checkOver
bool checkOver(RexxActivation *, RexxExpressionStack *, RexxDoBlock *)
Definition: DoInstruction.cpp:566
RexxInstructionDo::matchLabel
void matchLabel(RexxInstructionEnd *end, RexxSource *source)
Definition: DoInstruction.cpp:57
RexxInstructionDo::isLabel
bool isLabel(RexxString *name)
Definition: DoInstruction.cpp:118
RexxInstructionDo::live
void live(size_t)
Definition: DoInstruction.cpp:144
RexxInstructionDo::forcount
RexxObject * forcount
Definition: DoInstruction.hpp:105
RexxInstructionDo::to
RexxObject * to
Definition: DoInstruction.hpp:99
RexxInstructionDo::untilCondition
bool untilCondition(RexxActivation *, RexxExpressionStack *)
Definition: DoInstruction.cpp:759
RexxInstructionDo::controlSetup
void controlSetup(RexxActivation *, RexxExpressionStack *, RexxDoBlock *)
Definition: DoInstruction.cpp:454
RexxInstructionDo::matchEnd
void matchEnd(RexxInstructionEnd *, RexxSource *)
Definition: DoInstruction.cpp:83
RexxInstruction
Definition: RexxInstruction.hpp:54
RexxVariableBase
Definition: ExpressionBaseVariable.hpp:47
RexxInstructionDo
Definition: DoInstruction.hpp:67
RexxInstructionDo::flatten
void flatten(RexxEnvelope *)
Definition: DoInstruction.cpp:177
RexxInstruction.hpp
RexxInstructionDo::type
uint8_t type
Definition: DoInstruction.hpp:106
RexxInstructionDo::expressions
uint8_t expressions[3]
Definition: DoInstruction.hpp:107
RexxInstructionDo::RexxInstructionDo
RexxInstructionDo(void)
Definition: DoInstruction.hpp:76
RexxInstructionDo::execute
void execute(RexxActivation *, RexxExpressionStack *)
Definition: DoInstruction.cpp:210
RexxEnvelope
Definition: RexxEnvelope.hpp:53
RexxInstructionDo::reExecute
void reExecute(RexxActivation *, RexxExpressionStack *, RexxDoBlock *)
Definition: DoInstruction.cpp:641
RexxInstructionDo::initial
RexxObject * initial
Definition: DoInstruction.hpp:98
RexxInstructionDo::label
RexxString * label
Definition: DoInstruction.hpp:102
RexxSource
Definition: SourceFile.hpp:131
RexxInstructionDo::getLabel
RexxString * getLabel()
Definition: DoInstruction.cpp:128
RexxInstructionDo::RexxInstructionDo
RexxInstructionDo(RESTORETYPE restoreType)
Definition: DoInstruction.hpp:77
RexxInstructionDo::control
RexxVariableBase * control
Definition: DoInstruction.hpp:101
RexxActivation
Definition: RexxActivation.hpp:156
RexxInstructionDo::terminate
void terminate(RexxActivation *, RexxDoBlock *)
Definition: DoInstruction.cpp:197
RexxInstructionDo::conditional
RexxObject * conditional
Definition: DoInstruction.hpp:103
RexxInstructionDo::whileCondition
bool whileCondition(RexxActivation *, RexxExpressionStack *)
Definition: DoInstruction.cpp:786
RexxInstructionDo::end
RexxInstruction * end
Definition: DoInstruction.hpp:104
RexxInstructionDo::checkControl
bool checkControl(RexxActivation *, RexxExpressionStack *, RexxDoBlock *, bool)
Definition: DoInstruction.cpp:599
RESTORETYPE
RESTORETYPE
Definition: ObjectClass.hpp:80
RexxInstructionDo::liveGeneral
void liveGeneral(int reason)
Definition: DoInstruction.cpp:160
RexxBlockInstruction
Definition: RexxInstruction.hpp:91
RexxDoBlock
Definition: DoBlock.hpp:49
RexxInstructionEnd
Definition: EndInstruction.hpp:57
RexxInstructionDo::isLoop
bool isLoop()
Definition: DoInstruction.cpp:138
RexxObject
Definition: ObjectClass.hpp:311
RexxString
Definition: StringClass.hpp:119