Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

194 lines
4.8 KiB
C++

//***************************************************************************
//
// EXECUTOR.H
//
//***************************************************************************
#ifndef ABLEXEC_H
#define ABLEXEC_H
#include "ablgen.h"
#include "ablsymt.h"
#include "ablparse.h"
namespace ABL
{
//***************************************************************************
#define STATEMENT_MARKER 0x70
#define ADDRESS_MARKER 0x71
//***************************************************************************
//--------------
// ABL Parameter
#define ABL_PARAM_VOID 0
#define ABL_PARAM_INTEGER 1
#define ABL_PARAM_REAL 2
typedef struct {
char type;
long integer;
float real;
} ABLParam;
typedef ABLParam* ABLParamPtr;
//---------------
// RUN-TIME STACK
typedef union {
long integer;
float real;
unsigned char byte;
Address address;
} StackItem;
typedef StackItem* StackItemPtr;
typedef struct {
StackItem functionValue;
StackItem staticLink;
StackItem dynamicLink;
StackItem returnAddress;
} StackFrameHeader;
typedef StackFrameHeader* StackFrameHeaderPtr;
//***************************************************************************
#if 0
//class ABLmodule {
// public:
// SymTableNodePtr moduleIdPtr;
// public:
//};
#endif
//***************************************************************************
extern char* codeBuffer;
extern char* codeBufferPtr;
extern char* codeSegmentPtr;
extern char* codeSegmentLimit;
extern char* statementStartPtr;
extern TokenCodeType codeToken;
extern long execLineNumber;
extern long execStatementCount;
extern StackItem* stack;
extern StackItemPtr tos;
extern StackItemPtr stackFrameBasePtr;
//***************************************************************************
//----------
// FUNCTIONS
SymTableNodePtr getSymTableCodePtr (void);
TypePtr execRoutineCall (void);
TypePtr execExpression (void);
TypePtr execVariable (void);
//*************************
// CRUNCH/DECRUNCH routines
//*************************
void crunchToken (void);
void uncrunchToken (void);
void crunchSymTableNodePtr (SymTableNodePtr nodePtr);
void uncrunchSymTableNodePtr (void);
void crunchStatementMarker (void);
void uncrunchStatementMarker (void);
char* crunchAddressMarker (Address address);
char* fixupAddressMarker (Address address);
void crunchInteger (long value);
void crunchOffset (Address address);
char* createCodeSegment (long& codeSegmentSize);
SymTableNodePtr getCodeSymTableNodePtr (void);
long getCodeStatementMarker (void);
char* getCodeAddressMarker (void);
long getCodeInteger (void);
char* getCodeAddress (void);
//***************
// STACK routines
//***************
void pop (void);
void getCodeToken (void);
void pushInteger (long value);
void pushReal (float value);
void pushByte (char value);
void pushAddress (Address address);
void pushBoolean (bool value);
void pushStackFrameHeader (long oldLevel, long newLevel);
void allocLocal (TypePtr typePtr);
void freeData (SymTableNodePtr idPtr);
//*****************************
// FUNCTION ENTRY/EXIT routines
//*****************************
void routineEntry (SymTableNodePtr routineIdPtr);
void routineExit (SymTableNodePtr routineIdPtr);
void execute (SymTableNodePtr routineIdPtr);
void executeChild (SymTableNodePtr routineIdPtr, SymTableNodePtr childRoutineIdPtr);
//******************
// EXECSTMT routines
//******************
void execStatement (void);
void execAssignmentStatement (SymTableNodePtr idPtr);
TypePtr execRoutineCall (SymTableNodePtr routineIdPtr);
TypePtr execDeclaredRoutineCall (SymTableNodePtr routineIdPtr);
TypePtr execExternRoutineCall (SymTableNodePtr routineIdPtr);
void execActualParams (SymTableNodePtr routineIdPtr);
void execExternParams (SymTableNodePtr routineIdPtr);
void execCompoundStatement (void);
void execCaseStatement (void);
void execForStatement (void);
void execIfStatement (void);
void execRepeatStatement (void);
void execWhileStatement (void);
void execSwitchStatement (void);
//******************
// EXECEXPR routines
//******************
TypePtr execField (void);
TypePtr execSubscripts (TypePtr typePtr);
TypePtr execConstant (SymTableNodePtr idPtr);
TypePtr execVariable (SymTableNodePtr idPtr, UseType use);
TypePtr execFactor (void);
TypePtr execTerm (void);
TypePtr execSimpleExpression (void);
TypePtr execExpression (void);
//*****************
// EXECSTD routines
//*****************
//TypePtr execStandardRoutineCall (SymTableNodePtr routineIdPtr);
typedef TypePtr (* ABLExecFunctionType) (SymTableNodePtr);
extern ABLExecFunctionType routineExecFunction;
//***************************************************************************
}
#include "ablexec.inl"
#endif