aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/parse.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gob/parse.h')
-rw-r--r--engines/gob/parse.h33
1 files changed, 25 insertions, 8 deletions
diff --git a/engines/gob/parse.h b/engines/gob/parse.h
index de6eb6b425..e26d2e05cf 100644
--- a/engines/gob/parse.h
+++ b/engines/gob/parse.h
@@ -122,6 +122,26 @@ public:
int32 _resultInt;
private:
+ class Stack {
+ public:
+ byte *opers;
+ int32 *values;
+
+ Stack(size_t size = 20);
+ ~Stack();
+ };
+ class StackFrame {
+ public:
+ byte *opers;
+ int32 *values;
+ int16 pos;
+
+ StackFrame(const Stack &stack);
+
+ void push(int count = 1);
+ void pop(int count = 1);
+ };
+
enum PointerType {
kExecPtr = 0,
kInterVar = 1,
@@ -137,15 +157,12 @@ private:
bool getVarBase(uint32 &varBase, bool mindStop = false,
uint16 *size = 0, uint16 *type = 0);
- int cmpHelper(byte *operPtr, int32 *valPtr);
-
- void stackPop(byte *&operPtr, int32 *&valPtr, int16 &stkPos, int count = 1);
+ int cmpHelper(const StackFrame &stackFrame);
+ void loadValue(byte operation, uint32 varBase, const StackFrame &stackFrame);
- void loadValue(byte operation, uint32 varBase, byte *operPtr, int32 *valPtr);
- void simpleArithmetic1(byte *&operPtr, int32 *&valPtr, int16 &stkPos);
- void simpleArithmetic2(byte *&operPtr, int32 *&valPtr, int16 &stkPos);
- bool complexArithmetic(byte *&operPtr, int32 *&valPtr, int16 &stkPos,
- byte *operStack, int32 *values, int16 brackStart);
+ void simpleArithmetic1(StackFrame &stackFrame);
+ void simpleArithmetic2(StackFrame &stackFrame);
+ bool complexArithmetic(Stack &stack, StackFrame &stackFrame, int16 brackStart);
void getResult(byte operation, int32 value, byte *type);
};