s4g  0.9.2
высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++.

виртуальная машина Подробнее...

#include <s4g_vm.h>

Открытые типы

typedef void(s4g_VM::* opfunc) ()
 тип функции исполняющей байт код
 

Открытые члены

void clear ()
 очистка рабочих данных Подробнее...
 
int run (s4g_Stack< s4g_Command > *pCommands, s4g_Table *pCurrTable)
 запуск работы машины с установкой стека команд и окружения, нулевые параметры установят предыдущие значения
 
void returnPrevState ()
 возвращаем предыдущее состояние машины, в случае когда функция отработала все свои команды
 
bool precondStackExe (int iCountExpected, const char *szFuncName)
 проверка на наличие необходимого количества элементов в стеке исполнения iCountExpected, если нет тогда выдаем ошибку
 
const char * getCurrExeFile (char *szStr=0)
 возвращает текущий файл код которого выполняется
 
int getCurrExeStr (char *szStr=0)
 возвращает текущий номер строки в файле код которого выполняется
 
const char * getCurrExeFunc (char *szStr=0)
 возвращает текущию функцию которая выполняется
 
const char * stackTrace ()
 возвращает строку с трассировкой стека
 
void setError (const char *szStr)
 установка текста ошибки, прекращение работы машины
 
const char * getError ()
 возвращает текст ошибки
 
bool hasError ()
 установлена ли ошибка машине?
 
int getStackArgsSize ()
 возвращает количество аргументов вызываемой С++ функции
 
s4g_VariablegetArgFromStackArgs (int iNum)
 возвращает аргумент из стека аргументов для вызываемой C++ функции, по номеру (1 ... N)
 
void pushStackExecute (s4g_Variable *pVar)
 запихнуть в стек исполнения значение
 
void popStackExecute (int iCount=1)
 вытолкнуть со стека исполнения данные
 
s4g_VariablegetStackExecute (int iNum)
 возвращает переменную со стека исполнения
 
int getSizeStackExecute ()
 возвращает размер стека исполнения
 
S4G_TYPE getTypeLastCall ()
 возвращает тип последней исполняемой/исполненной функции
 
Функции для исполнения байт кода
void comObjectNew ()
 S4G_VM_COMMAND_OBJECT_NEW
 
void comVarNew ()
 S4G_VM_COMMAND_VAR_NEW
 
void comFetch ()
 S4G_VM_COMMAND_FETCH
 
void comFetchIdx ()
 S4G_VM_COMMAND_FETCH_IDX
 
void comAccess ()
 S4G_VM_COMMAND_ACCESS
 
void comStore ()
 S4G_VM_COMMAND_STORE
 
void comArrayNew ()
 S4G_VM_COMMAND_ARRAY_NEW
 
void comClassNew ()
 S4G_VM_COMMAND_CLASS_NEW
 
void comClassParentAdd ()
 S4G_VM_COMMAND_CLASS_PARENT_ADD
 
void comClassVarAdd ()
 S4G_VM_COMMAND_CLASS_VAR_ADD
 
void comClassMethodAdd ()
 S4G_VM_COMMAND_CLASS_METHOD_ADD
 
void comTableNew ()
 S4G_VM_COMMAND_TABLE_NEW
 
void comTableInsert ()
 S4G_VM_COMMAND_TABLE_INSERT
 
void comTableAppend ()
 S4G_VM_COMMAND_TABLE_APPEND
 
void comHalt ()
 S4G_VM_COMMAND_HALT
 
void comDoubleTop ()
 S4G_VM_COMMAND_DOUBLE_TOP
 
void comPush ()
 S4G_VM_COMMAND_PUSH
 
void comPop ()
 S4G_VM_COMMAND_POP
 
void comPrecall ()
 S4G_VM_COMMAND_PRECALL
 
void comCall ()
 S4G_VM_COMMAND_CALL
 
void comArithmeticAdd ()
 S4G_VM_COMMAND_ARITHMETIC_ADD
 
void comArithmeticSub ()
 S4G_VM_COMMAND_ARITHMETIC_SUB
 
void comArithmeticMul ()
 S4G_VM_COMMAND_ARITHMETIC_MUL
 
void comArithmeticDiv ()
 S4G_VM_COMMAND_ARITHMETIC_DIV
 
void comArithmeticMod ()
 #S4G_VM_COMMAND_ARITHMETIC_MOD
 
void comJump ()
 S4G_VM_COMMAND_JUMP
 
void comJumpZero ()
 S4G_VM_COMMAND_JZ
 
void comJumpNonZero ()
 S4G_VM_COMMAND_JNZ
 
void comLogicNeqt ()
 S4G_VM_COMMAND_LOGIC_NEQT
 
void comLogicEq ()
 S4G_VM_COMMAND_LOGIC_EQ
 
void comLogicNeq ()
 S4G_VM_COMMAND_LOGIC_NEQ
 
void comLogicGe ()
 S4G_VM_COMMAND_LOGIC_GE
 
void comLogicLe ()
 S4G_VM_COMMAND_LOGIC_LE
 
void comLogicGt ()
 S4G_VM_COMMAND_LOGIC_GT
 
void comLogicLt ()
 S4G_VM_COMMAND_LOGIC_LT
 
void comLogicNot ()
 S4G_VM_COMMAND_LOGIC_NOT
 
void comLogicEqt ()
 S4G_VM_COMMAND_LOGIC_EQT
 
void comBitXor ()
 #S4G_VM_COMMAND_BIT_XOR
 
void comBitNot ()
 #S4G_VM_COMMAND_BIT_NOT
 
void comBitShiftR ()
 #S4G_VM_COMMAND_BIT_SHIFTR
 
void comBitShiftL ()
 #S4G_VM_COMMAND_BIT_SHIFTL
 
void comBitAnd ()
 #S4G_VM_COMMAND_BIT_AND
 
void comBitOr ()
 #S4G_VM_COMMAND_BIT_OR
 
void comBlockNew ()
 S4G_VM_COMMAND_BLOCK_NEW
 
void comBlockDel ()
 S4G_VM_COMMAND_BLOCK_DEL
 
void comTopContextClear ()
 S4G_VM_COMMAND_TOPCONTEXT_CLEAR
 
void comPreincr ()
 S4G_VM_COMMAND_PREINCR
 
void comPostincr ()
 S4G_VM_COMMAND_POSTINCR
 
void comPredecr ()
 S4G_VM_COMMAND_PREDECR
 
void comPostdecr ()
 S4G_VM_COMMAND_POSTDECR
 

Открытые атрибуты

opfunc m_aOpFunc [S4G_VM_COMMAND_LAST]
 массив функций исполняющих байт код (сделано для быстрого доступа)
 

Защищенные данные

bool m_canExecute
 можно ли выполнять код ( run при удачном запуске установит ее в true)
 
S4G_TYPE typeLastCallFunc
 тип последней исполняемой/исполненной функции
 
s4g_Stack< s4g_Command > * m_pCurrArrCommand
 текущий указатель на стэк команд в исполнении
 
ID m_idCurrPos2ArrCommand
 текущее положение в текущем стеке исполнения m_pCurrArrCommand.
 
s4g_Tablem_pGtable
 глобальное пространство имен _g.
 
s4g_Variablem_pGvar
 переменная хранящая в себе глобальное пространство имен
 
s4g_Tablem_pCurrTable
 текущее установленное пространство имен, если выполняется функция то пространство имен функции
 
s4g_Stack< s4g_Variable *, S4G_VM_MAX_SIZE_STACK_EXEm_oStackExecute
 стек выполнения
 
String m_sStackTrace
 строка для трассировки стека
 
int m_iError
 есть ли ошибка? -1 есть, остальное все в норме
 
char m_szError [1024]
 строка ошибки
 
s4g_Commandm_pCurrCommand
 текущая команда с данными
 
S4G_VM_COMMAND m_vm_command
 текущая команда машины
 
s4g_VariablepVarCurrArg
 аргумент текущей команды
 
s4g_Stack< s4g_CallData * > m_aStackBloks
 стэк блоков с сохраненным предыдущим состоянием
 
int m_iCountCurrOpenBlocks
 количество текущих открытых блоков, именно текущих, потому что нужно их котролировать и внутри функции
 
s4g_Stack< s4g_Variable *, 64 > m_aStackArgs
 стек аргументов вызванной в даннй момент Си функции
 
s4g_Stack< s4g_CallData * > m_aStackCall
 стэк вызовов с сохраненным предыдущим состоянием
 
s4g_Stack< s4g_PrecallData *, S4G_MAX_CALL+1 > m_aStackSizesStackExe
 хранит размер стека исполнения на момент добавления значения Подробнее...
 
MemAlloc< s4g_CallData, S4G_RESERVE_BLOCKS_MEMm_oMemCallData
 резерваци памяти для s4g_CallData.
 

Подробное описание

виртуальная машина

Методы

◆ clear()

void s4g_VM::clear ( )

очистка рабочих данных

Заметки
Так можно реанимировать машину в случае ошибки, все внутренние данные обнулятся

Данные класса

◆ m_aStackSizesStackExe

s4g_Stack<s4g_PrecallData*, S4G_MAX_CALL + 1> s4g_VM::m_aStackSizesStackExe
protected

хранит размер стека исполнения на момент добавления значения

Заметки
Используется для фиксации размеров стека исполнения на момент вызова функций

Объявления и описания членов классов находятся в файлах: