mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 11:33:48 +08:00
improve fscript
This commit is contained in:
parent
94ba8dd455
commit
bd75e933bd
@ -3,6 +3,7 @@
|
||||
2025/04/30
|
||||
* 完善 mem_allocator_fixed_block(感谢兆坤提供补丁)。
|
||||
* 修复OpenGL下vg写字无法水平或者垂直翻转的问题(感谢智明提供补丁)
|
||||
* 完善fscript对 % 的处理(感谢福明发现问题)
|
||||
|
||||
2025/04/29
|
||||
* 优化nanovg_plus_gl (感谢智明提供补丁)
|
||||
|
@ -1024,6 +1024,16 @@ static ret_t fscript_parser_deinit(fscript_parser_t* parser) {
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
static char fscript_parser_peek_char(fscript_parser_t* parser) {
|
||||
return_value_if_fail(parser != NULL, '\0');
|
||||
|
||||
if (parser->c) {
|
||||
return parser->c;
|
||||
}
|
||||
|
||||
return parser->cursor[0];
|
||||
}
|
||||
|
||||
static char fscript_parser_peek_next_non_space_char(fscript_parser_t* parser) {
|
||||
char c = '\0';
|
||||
const char* p = parser->cursor;
|
||||
@ -1529,7 +1539,13 @@ static ret_t token_to_value(fscript_parser_t* parser, token_t* t, value_t* v) {
|
||||
ret_t fscript_eval(tk_object_t* obj, const char* script, value_t* result) {
|
||||
value_t v;
|
||||
ret_t ret = RET_OK;
|
||||
fscript_t* fscript = fscript_create(obj, script);
|
||||
fscript_t* fscript = NULL;
|
||||
|
||||
if (result != NULL) {
|
||||
value_set_int(result, 0);
|
||||
}
|
||||
|
||||
fscript = fscript_create(obj, script);
|
||||
return_value_if_fail(fscript != NULL, RET_BAD_PARAMS);
|
||||
|
||||
if (fscript_exec(fscript, &v) == RET_OK && result != NULL) {
|
||||
@ -1684,7 +1700,8 @@ static ret_t fexpr_parse_term(fscript_parser_t* parser, value_t* result) {
|
||||
}
|
||||
ret = token_to_value(parser, t, result);
|
||||
} else if (t->type == TOKEN_FUNC) {
|
||||
char c = fscript_parser_peek_next_non_space_char(parser);
|
||||
char c = fscript_parser_peek_char(parser);
|
||||
char nsc = fscript_parser_peek_next_non_space_char(parser);
|
||||
if (tk_str_eq(t->token, "%") && tk_isalpha(c)) {
|
||||
token_t* t = fscript_parser_get_token(parser);
|
||||
str_t* str = &(parser->temp);
|
||||
@ -1693,9 +1710,12 @@ static ret_t fexpr_parse_term(fscript_parser_t* parser, value_t* result) {
|
||||
TOKEN_INIT(t, TOKEN_ID, str);
|
||||
|
||||
ret = token_to_value(parser, t, result);
|
||||
} else {
|
||||
} else if (nsc == '(') {
|
||||
fscript_parser_unget_token(parser);
|
||||
ret = fexpr_parse_function(parser, result);
|
||||
} else {
|
||||
fscript_parser_unget_token(parser);
|
||||
return fscript_parser_set_error(parser, "unexpected token");
|
||||
}
|
||||
} else if (t->type == TOKEN_RETURN) {
|
||||
fscript_func_call_t* acall = fscript_func_call_create(parser, "return", 6);
|
||||
@ -2159,7 +2179,11 @@ static ret_t fscript_parse_all(fscript_parser_t* parser, fscript_func_call_t* ac
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
if (parser->error != NULL && parser->error->message != NULL) {
|
||||
return RET_FAIL;
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
fscript_parser_error_t* fscript_parser_error_init(fscript_parser_error_t* error) {
|
||||
|
@ -3587,10 +3587,23 @@ TEST(FExr, direct_var1) {
|
||||
ASSERT_EQ(value_int32(&v), 12);
|
||||
value_reset(&v);
|
||||
|
||||
fscript_eval(obj, "1 + (%iw3.3 + %iw2.2)", &v);
|
||||
ASSERT_EQ(fscript_eval(obj, "1 + (%iw3.3 + %iw2.2)", &v), RET_OK);
|
||||
ASSERT_EQ(value_int32(&v), 56);
|
||||
value_reset(&v);
|
||||
|
||||
TK_OBJECT_UNREF(obj);
|
||||
}
|
||||
|
||||
TEST(FExr, direct_var2) {
|
||||
value_t v;
|
||||
tk_object_t* obj = object_default_create();
|
||||
tk_object_set_prop_int(obj, "%iw1", 1);
|
||||
tk_object_set_prop_int(obj, "%iw1.1", 11);
|
||||
tk_object_set_prop_int(obj, "%iw2.2", 22);
|
||||
tk_object_set_prop_int(obj, "%iw3.3", 33);
|
||||
|
||||
ASSERT_NE(fscript_eval(obj, "5%% iw2", &v), RET_OK);
|
||||
ASSERT_EQ(value_int32(&v), 0);
|
||||
value_reset(&v);
|
||||
TK_OBJECT_UNREF(obj);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user