awtk/docs/manual/fscript_t.md

602 lines
17 KiB
Markdown
Raw Normal View History

2020-12-08 09:04:40 +08:00
## fscript\_t
### 概述
一个简易的函数式脚本引擎。
用法请参考https://github.com/zlgopen/awtk/blob/master/docs/fscript.md
----------------------------------
### 函数
<p id="fscript_t_methods">
| 函数名称 | 说明 |
| -------- | ------------ |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_fscript_clean">fscript\_clean</a> | 使用lua或其它脚本来运行fscript时本函数用于清理不必要的数据结构。 |
2021-01-11 08:23:05 +08:00
| <a href="#fscript_t_fscript_create">fscript\_create</a> | 创建引擎对象,并解析代码。 |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_fscript_create_ex">fscript\_create\_ex</a> | 创建引擎对象,并解析代码。 |
| <a href="#fscript_t_fscript_deinit">fscript\_deinit</a> | 清除引擎对象的数据。 |
2020-12-08 09:04:40 +08:00
| <a href="#fscript_t_fscript_destroy">fscript\_destroy</a> | 销毁引擎对象。 |
| <a href="#fscript_t_fscript_eval">fscript\_eval</a> | 执行一段脚本。 |
2021-01-11 08:23:05 +08:00
| <a href="#fscript_t_fscript_exec">fscript\_exec</a> | 执行解析后的代码。 |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_fscript_get_global_object">fscript\_get\_global\_object</a> | 获取fscript的全局对象。 |
2020-12-08 09:04:40 +08:00
| <a href="#fscript_t_fscript_global_deinit">fscript\_global\_deinit</a> | 全局释放。 |
| <a href="#fscript_t_fscript_global_init">fscript\_global\_init</a> | 全局初始化。 |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_fscript_init">fscript\_init</a> | 初始化引擎对象,并解析代码。 |
| <a href="#fscript_t_fscript_register_const_double">fscript\_register\_const\_double</a> | 注册浮点数常量。 |
| <a href="#fscript_t_fscript_register_const_int">fscript\_register\_const\_int</a> | 注册整数常量。 |
| <a href="#fscript_t_fscript_register_const_value">fscript\_register\_const\_value</a> | 注册常量。 |
2024-08-08 11:38:38 +08:00
| <a href="#fscript_t_fscript_register_event">fscript\_register\_event</a> | 注册自定义事件。 |
2020-12-08 09:04:40 +08:00
| <a href="#fscript_t_fscript_register_func">fscript\_register\_func</a> | 注册全局自定义函数。 |
2021-10-13 09:51:38 +08:00
| <a href="#fscript_t_fscript_register_funcs">fscript\_register\_funcs</a> | 注册全局自定义函数。 |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_fscript_reload">fscript\_reload</a> | 重新加载代码。 |
2021-01-11 08:23:05 +08:00
| <a href="#fscript_t_fscript_set_error">fscript\_set\_error</a> | 用于扩展函数设置遇到的错误。 |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_fscript_set_global_object">fscript\_set\_global\_object</a> | 用于替换默认的全局对象。 |
| <a href="#fscript_t_fscript_set_on_error">fscript\_set\_on\_error</a> | 设置错误处理函数。 |
| <a href="#fscript_t_fscript_set_print_func">fscript\_set\_print\_func</a> | 设置打印日志的函数。 |
2021-05-11 15:53:22 +08:00
| <a href="#fscript_t_fscript_syntax_check">fscript\_syntax\_check</a> | 解析代码,分析是否有语法错误。 |
| <a href="#fscript_t_tk_expr_eval">tk\_expr\_eval</a> | 对fscript的简单包装。 |
2020-12-08 09:04:40 +08:00
### 属性
<p id="fscript_t_properties">
| 属性名称 | 类型 | 说明 |
| -------- | ----- | ------------ |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_error_code">error\_code</a> | ret\_t | 运行时错误码。 |
2023-06-29 10:44:29 +08:00
| <a href="#fscript_t_error_col">error\_col</a> | int32\_t | 运行时错误的列号。 |
2022-12-05 12:10:53 +08:00
| <a href="#fscript_t_error_message">error\_message</a> | char* | 运行时错误信息。 |
| <a href="#fscript_t_error_row">error\_row</a> | int32\_t | 运行时错误的行号。 |
| <a href="#fscript_t_lines">lines</a> | uint16\_t | 代码总行数。 |
| <a href="#fscript_t_obj">obj</a> | tk\_object\_t* | 脚本执行上下文。 |
2020-12-08 09:04:40 +08:00
| <a href="#fscript_t_str">str</a> | str\_t | C语言实现函数可以使用这个变量可以有效避免内存分配。 |
2022-12-05 12:10:53 +08:00
#### fscript\_clean 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_clean">使用lua或其它脚本来运行fscript时本函数用于清理不必要的数据结构。
* 函数原型:
```
ret_t fscript_clean (fscript_t* fscript);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
2020-12-08 09:04:40 +08:00
#### fscript\_create 函数
-----------------------
* 函数功能:
2021-01-11 08:23:05 +08:00
> <p id="fscript_t_fscript_create">创建引擎对象,并解析代码。
2020-12-08 09:04:40 +08:00
* 函数原型:
```
2022-12-05 12:10:53 +08:00
fscript_t* fscript_create (tk_object_t* obj, const char* script);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | fscript\_t* | 返回fscript对象。 |
| obj | tk\_object\_t* | 脚本执行上下文。 |
| script | const char* | 脚本代码。 |
#### fscript\_create\_ex 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_create_ex">创建引擎对象,并解析代码。
* 函数原型:
```
fscript_t* fscript_create_ex (tk_object_t* obj, const char* script, bool_t keep_func_name);
2020-12-08 09:04:40 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | fscript\_t* | 返回fscript对象。 |
2022-12-05 12:10:53 +08:00
| obj | tk\_object\_t* | 脚本执行上下文。 |
2020-12-08 09:04:40 +08:00
| script | const char* | 脚本代码。 |
2022-12-05 12:10:53 +08:00
| keep\_func\_name | bool\_t | 是否在func\_call结构后保存函数名。 |
#### fscript\_deinit 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_deinit">清除引擎对象的数据。
* 函数原型:
```
ret_t fscript_deinit (fscript_t* fscript);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
2020-12-08 09:04:40 +08:00
#### fscript\_destroy 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_destroy">销毁引擎对象。
* 函数原型:
```
ret_t fscript_destroy (fscript_t* fscript);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
#### fscript\_eval 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_eval">执行一段脚本。
* 函数原型:
```
2022-12-05 12:10:53 +08:00
ret_t fscript_eval (tk_object_t* obj, const char* script, value_t* result);
2020-12-08 09:04:40 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
2022-12-05 12:10:53 +08:00
| obj | tk\_object\_t* | 脚本执行上下文。 |
2020-12-08 09:04:40 +08:00
| script | const char* | 脚本代码。 |
| result | value\_t* | 执行结果(调用者需要用value\_reset函数清除result)。 |
#### fscript\_exec 函数
-----------------------
* 函数功能:
2021-01-11 08:23:05 +08:00
> <p id="fscript_t_fscript_exec">执行解析后的代码。
2020-12-08 09:04:40 +08:00
* 函数原型:
```
ret_t fscript_exec (fscript_t* fscript, value_t* result);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
| result | value\_t* | 执行结果(调用者需要用value\_reset函数清除result)。 |
2022-12-05 12:10:53 +08:00
#### fscript\_get\_global\_object 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_get_global_object">获取fscript的全局对象。
* 函数原型:
```
tk_object_t* fscript_get_global_object ();
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | tk\_object\_t* | 返回fscript的全局对象。 |
2020-12-08 09:04:40 +08:00
#### fscript\_global\_deinit 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_global_deinit">全局释放。
* 函数原型:
```
ret_t fscript_global_deinit ();
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
#### fscript\_global\_init 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_global_init">全局初始化。
* 函数原型:
```
ret_t fscript_global_init ();
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
2022-12-05 12:10:53 +08:00
#### fscript\_init 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_init">初始化引擎对象,并解析代码。
* 函数原型:
```
fscript_t* fscript_init (fscript_t* fscript, tk_object_t* obj, const char* script, const char* first_call_name, bool_t keep_func_name);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | fscript\_t* | 返回fscript对象。 |
| fscript | fscript\_t* | 初始化 fscript 对象。 |
| obj | tk\_object\_t* | 脚本执行上下文。 |
| script | const char* | 脚本代码。 |
| first\_call\_name | const char* | 第一个函数的名字。 |
| keep\_func\_name | bool\_t | 是否在func\_call结构后保存函数名。 |
#### fscript\_register\_const\_double 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_register_const_double">注册浮点数常量。
* 函数原型:
```
ret_t fscript_register_const_double (const char* name, double value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| name | const char* | 常量名。 |
| value | double | 数据。 |
#### fscript\_register\_const\_int 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_register_const_int">注册整数常量。
* 函数原型:
```
ret_t fscript_register_const_int (const char* name, int value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| name | const char* | 常量名。 |
| value | int | 数据。 |
#### fscript\_register\_const\_value 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_register_const_value">注册常量。
* 函数原型:
```
ret_t fscript_register_const_value (const char* name, const value_t* value);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| name | const char* | 常量名。 |
| value | const value\_t* | 数据。 |
2024-08-08 11:38:38 +08:00
#### fscript\_register\_event 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_register_event">注册自定义事件。
* 函数原型:
```
ret_t fscript_register_event (const char* name, uint32_t etype);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| name | const char* | 事件名。 |
| etype | uint32\_t | 事件的值。 |
2020-12-08 09:04:40 +08:00
#### fscript\_register\_func 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_register_func">注册全局自定义函数。
* 函数原型:
```
2023-06-29 10:44:29 +08:00
ret_t fscript_register_func (const char* name, fscript_func_t func);
2020-12-08 09:04:40 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| name | const char* | 函数名(无需加函数前缀)。 |
2023-06-29 10:44:29 +08:00
| func | fscript\_func\_t | 函数指针。 |
2021-10-13 09:51:38 +08:00
#### fscript\_register\_funcs 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_register_funcs">注册全局自定义函数。
* 函数原型:
```
ret_t fscript_register_funcs (const general_factory_table_t* table);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| table | const general\_factory\_table\_t* | 函数表。 |
2022-12-05 12:10:53 +08:00
#### fscript\_reload 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_reload">重新加载代码。
* 函数原型:
```
ret_t fscript_reload (fscript_t* fscript, const char* script);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
| script | const char* | 脚本代码。 |
2021-01-11 08:23:05 +08:00
#### fscript\_set\_error 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_set_error">用于扩展函数设置遇到的错误。
* 函数原型:
```
ret_t fscript_set_error (fscript_t* fscript, ret_t code, const char* func, const char* message);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
| code | ret\_t | 错误码。 |
| func | const char* | 函数名。 |
| message | const char* | 错误消息。 |
2022-12-05 12:10:53 +08:00
#### fscript\_set\_global\_object 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_set_global_object">用于替换默认的全局对象。
>仅限于在系统初始化时调用。
* 函数原型:
```
ret_t fscript_set_global_object (tk_object_t* obj);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| obj | tk\_object\_t* | 全局对象。 |
#### fscript\_set\_on\_error 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_set_on_error">设置错误处理函数。
* 函数原型:
```
ret_t fscript_set_on_error (fscript_t* fscript, fscript_on_error_t on_error, void* ctx);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
| on\_error | fscript\_on\_error\_t | 错误处理函数。 |
| ctx | void* | 错误处理函数的上下文。 |
#### fscript\_set\_print\_func 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_set_print_func">设置打印日志的函数。
* 函数原型:
```
2023-06-29 10:44:29 +08:00
ret_t fscript_set_print_func (fscript_t* fscript, fscript_func_t print);
2022-12-05 12:10:53 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
| fscript | fscript\_t* | 脚本引擎对象。 |
2023-06-29 10:44:29 +08:00
| print | fscript\_func\_t | 打印日志的函数。 |
2021-05-11 15:53:22 +08:00
#### fscript\_syntax\_check 函数
-----------------------
* 函数功能:
> <p id="fscript_t_fscript_syntax_check">解析代码,分析是否有语法错误。
示例:
```c
fscript_parser_error_t error;
fscript_syntax_check(obj, "1+1", &error);
fscript_parser_error_deinit(&error);
```
* 函数原型:
```
2022-12-05 12:10:53 +08:00
ret_t fscript_syntax_check (tk_object_t* obj, const char* script, fscript_parser_error_t* error);
2021-05-11 15:53:22 +08:00
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | ret\_t | 返回RET\_OK表示成功否则表示失败。 |
2022-12-05 12:10:53 +08:00
| obj | tk\_object\_t* | 脚本执行上下文。 |
2021-05-11 15:53:22 +08:00
| script | const char* | 脚本代码。 |
| error | fscript\_parser\_error\_t* | 用于返回错误信息。 |
#### tk\_expr\_eval 函数
-----------------------
* 函数功能:
> <p id="fscript_t_tk_expr_eval">对fscript的简单包装。
* 函数原型:
```
double tk_expr_eval (const char* expr);
```
* 参数说明:
| 参数 | 类型 | 说明 |
| -------- | ----- | --------- |
| 返回值 | double | 返回表达式的值。 |
| expr | const char* | 表达式。 |
2022-12-05 12:10:53 +08:00
#### error\_code 属性
-----------------------
> <p id="fscript_t_error_code">运行时错误码。
* 类型ret\_t
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
2023-06-29 10:44:29 +08:00
#### error\_col 属性
2022-12-05 12:10:53 +08:00
-----------------------
2023-06-29 10:44:29 +08:00
> <p id="fscript_t_error_col">运行时错误的列号。
2022-12-05 12:10:53 +08:00
2023-06-29 10:44:29 +08:00
* 类型int32\_t
2022-12-05 12:10:53 +08:00
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
2023-06-29 10:44:29 +08:00
#### error\_message 属性
2022-12-05 12:10:53 +08:00
-----------------------
2023-06-29 10:44:29 +08:00
> <p id="fscript_t_error_message">运行时错误信息。
2022-12-05 12:10:53 +08:00
2023-06-29 10:44:29 +08:00
* 类型char*
2022-12-05 12:10:53 +08:00
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
#### error\_row 属性
-----------------------
2023-06-29 10:44:29 +08:00
> <p id="fscript_t_error_row">运行时错误的行号。
2022-12-05 12:10:53 +08:00
* 类型int32\_t
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
#### lines 属性
2020-12-08 09:04:40 +08:00
-----------------------
2022-12-05 12:10:53 +08:00
> <p id="fscript_t_lines">代码总行数。
2020-12-08 09:04:40 +08:00
2022-12-05 12:10:53 +08:00
* 类型uint16\_t
2020-12-08 09:04:40 +08:00
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
#### obj 属性
-----------------------
> <p id="fscript_t_obj">脚本执行上下文。
2022-12-05 12:10:53 +08:00
* 类型tk\_object\_t*
2020-12-08 09:04:40 +08:00
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |
#### str 属性
-----------------------
> <p id="fscript_t_str">C语言实现函数可以使用这个变量可以有效避免内存分配。
* 类型str\_t
| 特性 | 是否支持 |
| -------- | ----- |
| 可直接读取 | 是 |
| 可直接修改 | 否 |