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

160 lines
3.6 KiB
C++

// should only be included by ablexec.h
//--------------------------------------------------------------------
namespace ABL
{
extern bool IncludeDebugInfo;
extern long FileNumber;
inline SymTableNodePtr getCodeSymTableNodePtr (void)
{
SymTableNodePtr* nodePtrPtr = (SymTableNodePtr*)codeSegmentPtr;
SymTableNodePtr nodePtr = *nodePtrPtr;
codeSegmentPtr += sizeof(SymTableNodePtr);
return(nodePtr);
}
//***************************************************************************
inline long getCodeStatementMarker (void)
{
//------------------------------------------
// NOTE: If there's a problem, we return -1.
long lineNum = -1;
if (codeToken == TKN_STATEMENT_MARKER)
{
if (IncludeDebugInfo)
{
FileNumber = *((unsigned char*)codeSegmentPtr);
codeSegmentPtr += sizeof(unsigned char);
lineNum = *((long*)codeSegmentPtr);
codeSegmentPtr += sizeof(long);
}
}
return(lineNum);
}
//***************************************************************************
inline char* getCodeAddressMarker (void)
{
Address address = NULL;
if (codeToken == TKN_ADDRESS_MARKER)
{
address = *((long*)codeSegmentPtr) + codeSegmentPtr - 1;
codeSegmentPtr += sizeof(Address);
}
return(address);
}
//***************************************************************************
inline long getCodeInteger (void)
{
long value = *((long*)codeSegmentPtr);
codeSegmentPtr += sizeof(long);
return(value);
}
//***************************************************************************
inline char* getCodeAddress (void)
{
Address address = *((long*)codeSegmentPtr) + codeSegmentPtr - 1;
codeSegmentPtr += sizeof(long);
return(address);
}
//***************************************************************************
// STACK routines
//***************************************************************************
inline void pop (void)
{
--tos;
}
//***************************************************************************
inline void getCodeToken (void)
{
codeToken = (TokenCodeType)*codeSegmentPtr;
codeSegmentPtr++;
}
//***************************************************************************
inline void pushInteger (long value)
{
StackItemPtr valuePtr = ++tos;
if (valuePtr >= &stack[MAXSIZE_STACK])
runtimeError(ABL_ERR_RUNTIME_STACK_OVERFLOW);
valuePtr->integer = value;
}
//***************************************************************************
inline void pushReal (float value)
{
StackItemPtr valuePtr = ++tos;
if (valuePtr >= &stack[MAXSIZE_STACK])
runtimeError(ABL_ERR_RUNTIME_STACK_OVERFLOW);
valuePtr->real = value;
}
//***************************************************************************
inline void pushByte (char value)
{
StackItemPtr valuePtr = ++tos;
if (valuePtr >= &stack[MAXSIZE_STACK])
runtimeError(ABL_ERR_RUNTIME_STACK_OVERFLOW);
valuePtr->byte = value;
}
//***************************************************************************
inline void pushAddress (Address address)
{
StackItemPtr valuePtr = ++tos;
if (valuePtr >= &stack[MAXSIZE_STACK])
runtimeError(ABL_ERR_RUNTIME_STACK_OVERFLOW);
valuePtr->address = address;
}
//***************************************************************************
inline void pushBoolean (bool value)
{
StackItemPtr valuePtr = ++tos;
if (valuePtr >= &stack[MAXSIZE_STACK])
runtimeError(ABL_ERR_RUNTIME_STACK_OVERFLOW);
valuePtr->integer = (value ? 1 : 0);
}
};