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

Классы

struct  s4g_Data
 значение Подробнее...
 
struct  s4g_Variable
 переменная Подробнее...
 
class  s4g_Table
 таблица, наиболее распространенный тип в скриптах Подробнее...
 
class  s4g_Array
 массив переменной длины Подробнее...
 
class  s4g_Class
 мета класс Подробнее...
 
class  s4g_ClassObject
 объект класса Подробнее...
 
struct  s4g_Sfunction
 тип скриптовая функция Подробнее...
 
struct  s4g_Context
 контекст содержащий в себе все переменные текущего исполнения Подробнее...
 
struct  s4g_Command
 сформированная команда, готовая к выполнению, возможно содерижит аргумент и дополнительную переменную Подробнее...
 

Перечисления

enum  S4G_CONTEXT_TYPE_WORK { S4G_CONTEXT_TYPE_WORK_OFFLINE, S4G_CONTEXT_TYPE_WORK_ONLINE, S4G_CONTEXT_TYPE_WORK_ONLINE_EVER }
 типы контекстов Подробнее...
 
enum  S4G_VM_COMMAND {
  S4G_VM_COMMAND_HALT = 0, S4G_VM_COMMAND_DOUBLE_TOP, S4G_VM_COMMAND_OBJECT_NEW, S4G_VM_COMMAND_VAR_NEW,
  S4G_VM_COMMAND_ARRAY_NEW, S4G_VM_COMMAND_TABLE_NEW, S4G_VM_COMMAND_TABLE_INSERT, S4G_VM_COMMAND_TABLE_APPEND,
  S4G_VM_COMMAND_CLASS_NEW, S4G_VM_COMMAND_CLASS_PARENT_ADD, S4G_VM_COMMAND_CLASS_VAR_ADD, S4G_VM_COMMAND_CLASS_METHOD_ADD,
  S4G_VM_COMMAND_FETCH, S4G_VM_COMMAND_FETCH_IDX, S4G_VM_COMMAND_ACCESS, S4G_VM_COMMAND_STORE,
  S4G_VM_COMMAND_PUSH, S4G_VM_COMMAND_POP, S4G_VM_COMMAND_ARITHMETIC_ADD, S4G_VM_COMMAND_ARITHMETIC_SUB,
  S4G_VM_COMMAND_ARITHMETIC_MUL, S4G_VM_COMMAND_ARITHMETIC_DIV , S4G_VM_COMMAND_PREINCR, S4G_VM_COMMAND_PREDECR,
  S4G_VM_COMMAND_POSTINCR, S4G_VM_COMMAND_POSTDECR, S4G_VM_COMMAND_PRECALL, S4G_VM_COMMAND_CALL,
  S4G_VM_COMMAND_BLOCK_NEW, S4G_VM_COMMAND_BLOCK_DEL, S4G_VM_COMMAND_TOPCONTEXT_CLEAR, S4G_VM_COMMAND_JUMP,
  S4G_VM_COMMAND_JZ, S4G_VM_COMMAND_JNZ, S4G_VM_COMMAND_LOGIC_NEQT, S4G_VM_COMMAND_LOGIC_EQ,
  S4G_VM_COMMAND_LOGIC_NEQ, S4G_VM_COMMAND_LOGIC_GE, S4G_VM_COMMAND_LOGIC_LE, S4G_VM_COMMAND_LOGIC_GT,
  S4G_VM_COMMAND_LOGIC_LT, S4G_VM_COMMAND_LOGIC_NOT, S4G_VM_COMMAND_LOGIC_EQT , S4G_VM_COMMAND_LAST
}
 команды виртуальной машины Подробнее...
 

Типы значений, по необходимости (ненужности)

#define S4G_GC_TYPE_DATA_FREE   0
 простое публичное значение, когда счетчик ссылок обнулится можно удалять
 
#define S4G_GC_TYPE_DATA_PRIVATE   1
 приватное значение, доступно только одной переменной
 
#define S4G_GC_TYPE_DATA_SYS   2
 системное публичное значение (созданные при парсинге и компиляции), удалению не подлежат
 

Типы переменных, по необходимости (ненужности)

#define S4G_GC_TYPE_VAR_FREE   0
 переменная подлежит удалению Подробнее...
 
#define S4G_GC_TYPE_VAR_SYS   1
 системная перменная (созданна при парсинге и компиляции), удалению не подлежит
 

Возможные значения #s4g_Command::m_iExtraData

#define S4G_COMMAND_EXTRADATA_FETCH_GET_STRING   0
 обращение к элементу таблицы по строке
 
#define S4G_COMMAND_EXTRADATA_FETCH_GET_NUMERIC   1
 обращение к элементу таблицы по номеру (ключу)
 

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

Макросы

◆ S4G_GC_TYPE_VAR_FREE

#define S4G_GC_TYPE_VAR_FREE   0

#include <s4g_types.h>

переменная подлежит удалению

простая переменная, когда счетчик ссылок обнулится можно удалять

Перечисления

◆ S4G_CONTEXT_TYPE_WORK

#include <s4g_types.h>

типы контекстов

Элементы перечислений
S4G_CONTEXT_TYPE_WORK_OFFLINE 

не рабочий

S4G_CONTEXT_TYPE_WORK_ONLINE 

рабочий

S4G_CONTEXT_TYPE_WORK_ONLINE_EVER 

рабочий всегда

◆ S4G_VM_COMMAND

#include <s4g_types.h>

команды виртуальной машины

Необходимо сделать:
додокументировать!
Элементы перечислений
S4G_VM_COMMAND_HALT 

остановить текущее выполнение

S4G_VM_COMMAND_DOUBLE_TOP 

поместить вершину стека на вершину, то есть -2 и -1 идентичны (не копирует!)

S4G_VM_COMMAND_OBJECT_NEW 

создать объект класса, класс берет -1 из стека и выталкивает, на стек ложит объект класса

S4G_VM_COMMAND_VAR_NEW 

создать и положить на вершину стека значение переменной, имя берет из аргумента

S4G_VM_COMMAND_ARRAY_NEW 

создать массив, поместить в него все элементы со стека (после этого все элементы будут вытолкнуты со стека), количество передает в аргументе, и оставить его на стеке

S4G_VM_COMMAND_TABLE_NEW 

создать таблицу и положить на вершину стека

S4G_VM_COMMAND_TABLE_INSERT 

добавить в таблицу, которая -2, -1 элемент со стека, если есть аргумент то значит это имя для этого поля, -1 выталкивает

S4G_VM_COMMAND_TABLE_APPEND 

добавить новый (null) элемент в конец таблицы, которая -1, выталкивает таблицу, ложит новый элемент на вершину

S4G_VM_COMMAND_CLASS_NEW 

создать пустой класс и положить его на стек, имя в аргументе

S4G_VM_COMMAND_CLASS_PARENT_ADD 

добавить родителя (-1) к к классу (-2), после pop(1)

S4G_VM_COMMAND_CLASS_VAR_ADD 

создать переменную класса, имя в аргументе, -1 сам класс

S4G_VM_COMMAND_CLASS_METHOD_ADD 

создать метод, имя в аргументе, -1 - функция-аргумент, -2 сам класс

S4G_VM_COMMAND_FETCH 

положить на вершину стека значение переменной, имя переменной берется из аргумента, поиск осуществляется во всех доступных контекстах

S4G_VM_COMMAND_FETCH_IDX 

ложит на вершину стека переменную из контекста, из аргумента извлеваются: номер контекста относительно верха ((UINT)arg) & 0xFFFF, порядковый номер переменной в контексте (((UINT)arg) & 0xFFFF) >> 16.

S4G_VM_COMMAND_ACCESS 

получить значение из объекта (таблица, массив, объект класса, строка), который должен содержать другие переменные

S4G_VM_COMMAND_STORE 

сохранить в переменной -2 значение из -1, затем -1 выталкивает

S4G_VM_COMMAND_PUSH 

положить на вершину стека

S4G_VM_COMMAND_POP 

удалить значение с вершины стека

S4G_VM_COMMAND_ARITHMETIC_ADD 

(-2) + (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_ARITHMETIC_SUB 

(-2) - (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_ARITHMETIC_MUL 

(-2) * (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_ARITHMETIC_DIV 

(-2) / (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_PREINCR 

преинкремент ++val (-1 элемент стека)

S4G_VM_COMMAND_PREDECR 

предекремент – val (-1 элемент стека)

S4G_VM_COMMAND_POSTINCR 

постинкремент val++ (-1 элемент стека)

S4G_VM_COMMAND_POSTDECR 

постдекремент val++ (-1 элемент стека)

S4G_VM_COMMAND_PRECALL 

сообщение о том что вскоре будет вызвана функция, записать в стек вызовов размер стека исполнения

S4G_VM_COMMAND_CALL 

вызов функции, из precall бере количество аргументов (count_arg), забирает их со стека, берет переменную функции (count_arg-1) со стека и выталкивает ее

Предупреждения
Вызов функции все-равно возвращает значение (GCgetVarNull), эта обработка должна быть как в пустой функции, так и в той которая ничего не возвращает
S4G_VM_COMMAND_BLOCK_NEW 

создание нового окружения для блока выражений (выделяется новый контекст куда сохраняются все созданные данные)

S4G_VM_COMMAND_BLOCK_DEL 

удаление окружения блока выражений

S4G_VM_COMMAND_TOPCONTEXT_CLEAR 

очистить верхний контекст

S4G_VM_COMMAND_JUMP 

переход без условный

S4G_VM_COMMAND_JZ 

переход условный, на вершине стека исполнения должно быть Zero (выталкивается со стека)

S4G_VM_COMMAND_JNZ 

переход условный, на вершине стека исполнения должно быть Non-Zero (выталкивается со стека)

S4G_VM_COMMAND_LOGIC_NEQT 

(-2) !== (неравенство без приведения типов) (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LOGIC_EQ 

(-2) == (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LOGIC_NEQ 

(-2) != (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LOGIC_GE 

(-2) >= (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LOGIC_LE 

(-2) <= (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LOGIC_GT 

(-2) > (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LOGIC_LT 

(-2) < (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LOGIC_NOT 

!(-1), выталкивается, на стек ложится результат (если значение было что-то похожее на true - значит false, иначе true)

S4G_VM_COMMAND_LOGIC_EQT 

(-2) === (равенство без приведения типов) (-1), оба выталкиваются, на стек ложится результат

S4G_VM_COMMAND_LAST 

размер всего массива команд