Документация
Здесь описаны функции и структуры для использования языка программирования Gentee в проектах на Golang.

Типы

type Custom

Тип Custom служит для дополнительной настройки компилятора и виртуальной машины. Передается при вызове функции Customize.
    Embedded []EmbedItem - массив дополнительных функций для стандартной библиотеки.

type EmbedItem

Тип EmbedItem описывает функцию, подключаемую к стандартной библиотеки. Используется в типе Custom.
    Prototype string - описание функции на языке Gentee. Например, myfunc(str,int) int.
    Object interface{} - соответствующая golang функция.

type Settings

Тип Settings служит для указания дополнительных параметров при запуске байт-кода в методе Run.
    CmdLine []string - массив параметров командной строки.
    Stdin *os.File - свой собственный стандартный ввод.
    Stdout *os.File - свой собственный стандартный вывод.
    Stderr *os.File - свой собственный вывод для ошибок.
    Input []byte - предопределенный стандартный ввод (stdin). Может использоваться, например, в функции ReadString.
    Cycle uint64 - максимальное количество итераций в цикле. По умолчанию, равно 16000000.
    Depth uint32 - максимальная вложенность исполняемых блоков. Ограничивает глубину рекурсии. По умолчанию, равно 1000.
    SysChan chan int - канал для отправки команд SysSuspend (1), SysResume (2), SysTerminate (3). Позволяет управлять выполнением скрипта извне.
      SysSuspend - приостановить работу скрипта и всех потоков.
      SysResume - возобновить работу скрипта и всех потоков.
      SysTerminate - завершить работу скрипта и всех потоков.
    IsPlayground bool - присвойте true, если хотите запустить скрипт в безопасном режиме песочницы.
    Playground Playground - настройки режима песочницы.
      Path string - путь к временной директории для записи и чтения файлов. Если не указан, то будет будет создана поддиректория во временной директории.
      AllSizeLimit int64 - суммарный размер файлов. По умолчанию, 10 MB.
      FilesLimit int - максимальное количество файлов. По умолчанию, 100.
      SizeLimit int64 - максимальный размер файла. По умолчанию, 5 MB.
    ProgressFunc gentee.ProgressFunc - функция для отображения процесса копирования, скачивания и т.д., например, в виде прогресс-бара. Функция должна иметь следующий тип:
    func MyProgress(progress *gentee.Progress) bool
    и возвращать true. Тип Progress описан ниже. Функция ProgressFunc вызывается при копировании, скачивании файлов, а также при вызове функций Progress.
1
settings.SysChan = make(chan int)
2
go func() {
3
_, err = exec.Run(settings)
4
}()
5
settings.SysChan <- gentee.SysTerminate
Copied!

type Progress

Тип Progress служит для отображения процесса копирования, скачивания. Переменная этого типа передается в функцию ProgressFunc и имеет следующие поля:
    ID uint32 - уникальный идентификатор.
    Type int32 - тип процесса.
      ProgressCopy (0) - копирование.
      ProgressDownload (1) - скачивание.
      ProgressCompress (2) - сжатие.
      ProgressDecompress (3) - распаковка.
    Status int32 - статус.
      ProgStatusStart (0) - начало процесса.
      ProgStatusActive (1) - процесс идёт.
      ProgStatusEnd (2) - процесс закончен.
    Total int64 - общий размер.
    Current int64 - текущий размер.
    Source string - источник процесса.
    Dest string - целевой объект процесса.
    Ratio float64 - отношение Current/Total. Для получения процентов необходимо умножить на 100.
    Custom interface{} - служит для хранения любой дополнительной информации.

Функции и методы

Customize(custom *Custom) error

Функция Customize служит для дополнительной настройки компилятора и виртуальной машины. Она должна вызываться раньше всех функций. Функция возвращает значение ошибки.

New() *Gentee

Функция New создает рабочее пространство для компиляции исходного кода.

(g *Gentee) Compile(input, path string) (*Exec, int, error)

Функция Compile компилирует скрипт переданный в input. В параметре path можно указать путь к скрипту. Функция возвращает структуру с байт-кодом, номер модуля и значение ошибки.

(g *Gentee) CompileAndRun(filename string) (interface{}, error)

Функция CompileAndRun компилирует скрипт из файле filename и выполняет его. Функция возвращает результат выполнения скрипта и значение ошибки.

(g *Gentee) CompileFile(filename string) (*Exec, int, error)

Функция CompileFile компилирует скрипт из файла filename. Функция возвращает структуру с байт-кодом, номер модуля и значение ошибки.

(exec *Exec) Run(settings Settings) (interface{}, error)

Функция Run выполняет байт-код из структуры exec. В параметре settings можно указать дополнительные настройки. Функция возвращает результат выполнения скрипта и значение ошибки.

Gentee2GoType(val interface{}, vtype... string) interface{}

Функция Gentee2GoType конвертирует переменную в стандартные типы Go. Во втором параметре можно указать тип Gentee переменной. Например, arr.bool. В этом случае, вы получите массив переменных типа bool, а не int64. Вы можете использовать эту функцию, в ваших встраиваемых функциях.
Таблица соответствия типов
Gentee тип
Получаемый тип
Возвращаемый тип (vtype)
int
int64
int64
bool
int64
bool ("bool")
char
int64
rune ("rune")
float
float64
float64
str
string
string
arr
*core.Array
[]interface{}
buf
*core.Buffer
[]byte
map
*core.Map
map[string]interface{}
set
*core.Set
[]byte
struct type
*core.Struct
map[string]interface{}
obj
*core.Obj
interface{}
1
func cnv1(in *core.Map) (*core.Map, error) {
2
my := gentee.Gentee2GoType(in).(map[string]interface{})
3
for key, a := range my {
4
for i, v := range a.([]interface{}) {
5
a.([]interface{})[i] = v.(int64) + 1
6
}
7
delete(my, key)
8
my[key+`2`] = a
9
}
10
ret, err := gentee.Go2GenteeType(my)
11
return ret.(*core.Map), err
12
}
Copied!

Go2GenteeType(val interface{}, vtype... string) (interface{}, error)

Функция Go2GenteeType конвертирует стандартный тип Go в тип Gentee. Во втором параметре можно указать тип Gentee переменной. Например, set, если вы хотите сконвертировать []byte в *core.Set. Вы можете использовать эту функцию, в ваших встраиваемых функциях.
Таблица соответствия типов
Gentee тип
Получаемый Go тип
Возвращаемый тип (vtype)
int
all int & uint
int64
bool
bool
int64
char
rune
int64
float
float64
float64
str
string
string
arr
[]interface{}
*core.Array
buf
[]byte
*core.Buffer
set
[]byte
*core.Set ("set")
map
map[string]interface{}
*core.Map
obj
interface{}
*core.Obj ("obj")
1
func cnv5(in *core.Set) (*core.Set, error) {
2
my := gentee.Gentee2GoType(in).([]byte)
3
for i, b := range my {
4
if i > 10 {
5
break
6
}
7
if b == 0 {
8
my[i] = 1
9
} else {
10
my[i] = b - 1
11
}
12
}
13
ret, err := gentee.Go2GenteeType(my, `set`)
14
return ret.(*core.Set), err
15
}
Copied!

Version() string

Функция Version возвращает номер текущей версии языка.
Last modified 1yr ago