From: yu.dongliang <18588496441@163.com> Date: Sat, 11 Oct 2025 08:44:24 +0000 (+0800) Subject: js: re-name key word 'create' to 'new', support Math.PI & Math.sqrt() X-Git-Url: http://baseworks.info/?a=commitdiff_plain;h=cd1149130a63fabf55713e5cd1c345dc81298e0e;p=abc.git js: re-name key word 'create' to 'new', support Math.PI & Math.sqrt() --- diff --git a/examples/js.html b/examples/js.html index f2d33ad..7a8bb36 100644 --- a/examples/js.html +++ b/examples/js.html @@ -8,14 +8,9 @@ diff --git a/html/Makefile b/html/Makefile index 37acf10..b4e1537 100644 --- a/html/Makefile +++ b/html/Makefile @@ -137,7 +137,7 @@ CFILES += ../js/parse/scf_dfa_macro.c CFILES += ../js/parse/scf_dfa_include.c CFILES += ../js/parse/scf_dfa_call.c -CFILES += ../js/parse/scf_dfa_create.c +CFILES += ../js/parse/scf_dfa_new.c CFILES += ../js/parse/scf_dfa_sizeof.c CFILES += ../js/parse/scf_dfa_container.c CFILES += ../js/parse/scf_dfa_va_arg.c diff --git a/js/abc_libjs.so b/js/abc_libjs.so index f025fb3..a7677e2 100755 Binary files a/js/abc_libjs.so and b/js/abc_libjs.so differ diff --git a/js/core/scf_core_types.h b/js/core/scf_core_types.h index c7109a1..c8c01e6 100644 --- a/js/core/scf_core_types.h +++ b/js/core/scf_core_types.h @@ -86,7 +86,7 @@ enum scf_core_types SCF_OP_CALL, // () function call SCF_OP_TYPE_CAST, // (char*) type cast - SCF_OP_CREATE, // create + SCF_OP_NEW, // new SCF_OP_SIZEOF, // sizeof SCF_OP_CONTAINER, // container_of diff --git a/js/core/scf_lex_word.h b/js/core/scf_lex_word.h index 7b2c10a..807fb97 100644 --- a/js/core/scf_lex_word.h +++ b/js/core/scf_lex_word.h @@ -60,7 +60,7 @@ enum scf_lex_words SCF_LEX_WORD_RA, // >> right angle brackets SCF_LEX_WORD_KEY_SIZEOF, // sizeof - SCF_LEX_WORD_KEY_CREATE, // create class object + SCF_LEX_WORD_KEY_NEW, // create class object SCF_LEX_WORD_KEY_CONTAINER, // container_of SCF_LEX_WORD_KEY_VA_ARG, // va_arg diff --git a/js/core/scf_node.h b/js/core/scf_node.h index ba1d833..92ec397 100644 --- a/js/core/scf_node.h +++ b/js/core/scf_node.h @@ -19,7 +19,7 @@ struct scf_node_s { int nb_nodes; // children nodes count scf_node_t** nodes; // children nodes - scf_expr_t* js_create; // the expr which created this node, only for js! + scf_expr_t* js_new; // the expr which created this node, only for js! union { scf_variable_t* var; diff --git a/js/core/scf_operator.c b/js/core/scf_operator.c index 69351e8..270bde4 100644 --- a/js/core/scf_operator.c +++ b/js/core/scf_operator.c @@ -15,7 +15,7 @@ static scf_operator_t base_operators[] = {"va_end", NULL, SCF_OP_VA_END, 1, 1, SCF_OP_ASSOCIATIVITY_LEFT}, {"container", NULL, SCF_OP_CONTAINER, 1, 3, SCF_OP_ASSOCIATIVITY_LEFT}, - {"create", NULL, SCF_OP_CREATE, 2, -1, SCF_OP_ASSOCIATIVITY_RIGHT}, + {"new", NULL, SCF_OP_NEW, 2, -1, SCF_OP_ASSOCIATIVITY_RIGHT}, {"(", NULL, SCF_OP_TYPE_CAST, 2, 2, SCF_OP_ASSOCIATIVITY_RIGHT}, {"!", "not", SCF_OP_LOGIC_NOT, 2, 1, SCF_OP_ASSOCIATIVITY_RIGHT}, {"~", "bnot", SCF_OP_BIT_NOT, 2, 1, SCF_OP_ASSOCIATIVITY_RIGHT}, diff --git a/js/core/scf_operator_handler_3ac.c b/js/core/scf_operator_handler_3ac.c index 840b46a..0b04e66 100644 --- a/js/core/scf_operator_handler_3ac.c +++ b/js/core/scf_operator_handler_3ac.c @@ -96,7 +96,7 @@ static int _scf_expr_calculate_internal(scf_ast_t* ast, scf_node_t* node, void* return h(ast, node->nodes, node->nb_nodes, d); } else { - if (!scf_type_is_assign(node->op->type) && SCF_OP_ADDRESS_OF != node->op->type && SCF_OP_CREATE != node->op->type) { + if (!scf_type_is_assign(node->op->type) && SCF_OP_ADDRESS_OF != node->op->type && SCF_OP_NEW != node->op->type) { for (i = node->nb_nodes - 1; i >= 0; i--) { if (_scf_expr_calculate_internal(ast, node->nodes[i], d) < 0) { @@ -1425,7 +1425,7 @@ int scf_function_to_3ac(scf_ast_t* ast, scf_function_t* f, scf_list_t* _3ac_list return 0; } -static int _scf_op_create(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, void* data) +static int _scf_op_new(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, void* data) { assert(nb_nodes > 0); @@ -2395,7 +2395,7 @@ scf_operator_handler_pt __operator_handlers[SCF_N_3AC_OPS] = { [SCF_OP_EXPR ] = _scf_op_expr, [SCF_OP_CALL ] = _scf_op_call, - [SCF_OP_CREATE] = _scf_op_create, + [SCF_OP_NEW ] = _scf_op_new, [SCF_OP_ARRAY_INDEX] = _scf_op_array_index, [SCF_OP_POINTER ] = _scf_op_pointer, diff --git a/js/core/scf_optimizer_auto_gc.c b/js/core/scf_optimizer_auto_gc.c index 2b1ab06..bdc2a93 100644 --- a/js/core/scf_optimizer_auto_gc.c +++ b/js/core/scf_optimizer_auto_gc.c @@ -743,7 +743,7 @@ static int _auto_gc_retval(scf_dn_status_t* ds_obj, scf_dag_node_t* dn, scf_vect if (dn->node->split_flag) { parent = dn->node->split_parent; - assert(SCF_OP_CALL == parent->type || SCF_OP_CREATE == parent->type); + assert(SCF_OP_CALL == parent->type || SCF_OP_NEW == parent->type); for (i = 0; i < parent->result_nodes->size; i++) { result = parent->result_nodes->data[i]; diff --git a/js/core/scf_optimizer_auto_gc_find.c b/js/core/scf_optimizer_auto_gc_find.c index 9cf8a6c..b60c0a1 100644 --- a/js/core/scf_optimizer_auto_gc_find.c +++ b/js/core/scf_optimizer_auto_gc_find.c @@ -481,7 +481,7 @@ static int _auto_gc_find_ref(scf_dn_status_t* ds_obj, scf_dag_node_t* dn, scf_3a if (dn->node->split_flag) { parent = dn->node->split_parent; - assert(SCF_OP_CALL == parent->type || SCF_OP_CREATE == parent->type); + assert(SCF_OP_CALL == parent->type || SCF_OP_NEW == parent->type); for (i = 0; i < parent->result_nodes->size; i++) { result = parent->result_nodes->data[i]; diff --git a/js/core/scf_pointer_alias.c b/js/core/scf_pointer_alias.c index 811de5d..9868a73 100644 --- a/js/core/scf_pointer_alias.c +++ b/js/core/scf_pointer_alias.c @@ -143,7 +143,7 @@ static int _bb_pointer_initeds(scf_vector_t* initeds, scf_list_t* bb_list_head, scf_logd("dn->node->split_parent: %d, %p\n", dn->node->split_parent->type, dn->node->split_parent); assert(dn->node->split_parent->type == SCF_OP_CALL - || dn->node->split_parent->type == SCF_OP_CREATE); + || dn->node->split_parent->type == SCF_OP_NEW); return 0; } @@ -242,7 +242,7 @@ static int _bb_pointer_initeds_leak(scf_vector_t* initeds, scf_list_t* bb_list_h if (dn->node->split_flag) { assert(dn->node->split_parent->type == SCF_OP_CALL - || dn->node->split_parent->type == SCF_OP_CREATE); + || dn->node->split_parent->type == SCF_OP_NEW); return 0; } diff --git a/js/doc.c b/js/doc.c index 79361bc..9821bd1 100644 --- a/js/doc.c +++ b/js/doc.c @@ -118,7 +118,7 @@ struct Object Object* Boolean(Object* this) { - Object* res = create Object(); + Object* res = new Object(); if (!res) return NULL; @@ -129,7 +129,7 @@ struct Object Object* Boolean(Object* this, int64_t i) { - Object* res = create Object(); + Object* res = new Object(); if (!res) return NULL; @@ -140,7 +140,7 @@ struct Object Object* Boolean(Object* this, Object* that) { - Object* res = create Object(); + Object* res = new Object(); if (!res) return NULL; @@ -180,7 +180,7 @@ struct Object Object* Date(Object* this) { - Object* res = create Object(0); + Object* res = new Object(0); if (!res) return NULL; @@ -280,12 +280,12 @@ struct Object void write(Object* this, double d) { - abc_html_write_i(this, d); + abc_html_write_d(this, d); } Object* operator+(Object* this, Object* that) { - Object* res = create Object(this->d + that->d); + Object* res = new Object(this->d + that->d); return res; } @@ -312,8 +312,22 @@ struct Object // printf("\n"); } + + Object* Math_sqrt(Object* this, double d) + { + Object* res = new Object(sqrt(d)); + return res; + } + + Object* Math_sqrt(Object* this, Object* obj) + { + Object* res = new Object(sqrt(obj->d)); + return res; + } }; +const double Math_PI = 3.1415926; + void Object_func_arguments(Object* this, int i, Object* arg) { if (i < this->length) { diff --git a/js/lex/scf_lex.c b/js/lex/scf_lex.c index a9b9e56..ad60e66 100644 --- a/js/lex/scf_lex.c +++ b/js/lex/scf_lex.c @@ -22,8 +22,7 @@ static scf_key_word_t key_words[] = {"goto", SCF_LEX_WORD_KEY_GOTO}, {"sizeof", SCF_LEX_WORD_KEY_SIZEOF}, - - {"create", SCF_LEX_WORD_KEY_CREATE}, + {"new", SCF_LEX_WORD_KEY_NEW}, {"operator", SCF_LEX_WORD_KEY_OPERATOR}, @@ -1412,6 +1411,45 @@ int __lex_use_macro(scf_lex_t* lex, scf_lex_word_t** pp) return 0; } +static int __lex_math(scf_lex_t* lex, scf_lex_word_t* w) +{ + scf_lex_word_t* w1 = NULL; + scf_lex_word_t* w2 = NULL; + + int ret = __lex_pop_word(lex, &w1); + if (ret < 0) + return ret; + + if (SCF_LEX_WORD_DOT != w1->type) { + scf_loge("needs '.' after 'Math', file: %s, line: %d\n", w1->file->data, w1->line); + + scf_lex_word_free(w1); + return -1; + } + scf_lex_word_free(w1); + w1 = NULL; + + ret = scf_string_cat_cstr_len(w->text, "_", 1); + if (ret < 0) + return ret; + + ret = __lex_pop_word(lex, &w2); + if (ret < 0) + return ret; + + if (SCF_LEX_WORD_ID != w2->type) { + scf_loge("needs an identity (but '%s') after 'Math.', file: %s, line: %d\n", w2->text->data, w2->file->data, w2->line); + + scf_lex_word_free(w2); + return -1; + } + + ret = scf_string_cat(w->text, w2->text); + + scf_lex_word_free(w2); + return ret; +} + int scf_lex_pop_word(scf_lex_t* lex, scf_lex_word_t** pword) { if (!lex || (!lex->fp && !lex->text) || !pword) @@ -1419,11 +1457,21 @@ int scf_lex_pop_word(scf_lex_t* lex, scf_lex_word_t** pword) scf_lex_word_t* w = NULL; scf_lex_word_t* w1 = NULL; + scf_lex_word_t* w2 = NULL; int ret = __lex_pop_word(lex, &w); if (ret < 0) return ret; + if (!strcmp(w->text->data, "Math")) { + ret = __lex_math(lex, w); + + if (ret < 0) { + scf_lex_word_free(w); + return ret; + } + } + // parse macro while (SCF_LEX_WORD_HASH == w->type) { diff --git a/js/lib/scf_capi.c b/js/lib/scf_capi.c index 101a0c7..0fe59c7 100644 --- a/js/lib/scf_capi.c +++ b/js/lib/scf_capi.c @@ -30,3 +30,4 @@ char* strncpy(char *dst, const char *src, uintptr_t n); int memcpy (void* dst, const void* src, uintptr_t n); int memcmp (void* dst, const void* src, uintptr_t n); +double sqrt(double d); diff --git a/js/lib/scf_complex.c b/js/lib/scf_complex.c index 86ac0e6..bd58607 100644 --- a/js/lib/scf_complex.c +++ b/js/lib/scf_complex.c @@ -69,7 +69,7 @@ struct complex complex* res; - res = create complex(0.0, 0.0); + res = new complex(0.0, 0.0); if (!res) return NULL, -1; @@ -85,7 +85,7 @@ struct complex complex* res; - res = create complex(0.0, 0.0); + res = new complex(0.0, 0.0); if (!res) return NULL, -1; @@ -101,7 +101,7 @@ struct complex complex* res; - res = create complex(0.0, 0.0); + res = new complex(0.0, 0.0); if (!res) return NULL, -1; @@ -122,7 +122,7 @@ struct complex complex* res; - res = create complex(0.0, 0.0); + res = new complex(0.0, 0.0); if (!res) return NULL, -1; diff --git a/js/lib/scf_string.c b/js/lib/scf_string.c index c45c34f..7121edd 100644 --- a/js/lib/scf_string.c +++ b/js/lib/scf_string.c @@ -96,7 +96,7 @@ struct string { string* s; - s = create string(); + s = new string(); if (!s) return NULL, -1; diff --git a/js/lib/x64/lib64/ld-linux-x86-64.so.2 b/js/lib/x64/lib64/ld-linux-x86-64.so.2 index a8cb029..07b7f39 100755 Binary files a/js/lib/x64/lib64/ld-linux-x86-64.so.2 and b/js/lib/x64/lib64/ld-linux-x86-64.so.2 differ diff --git a/js/lib/x64/libc.so.6 b/js/lib/x64/libc.so.6 index f5b26e3..5734ad9 100755 Binary files a/js/lib/x64/libc.so.6 and b/js/lib/x64/libc.so.6 differ diff --git a/js/lib/x64/libm.so.6 b/js/lib/x64/libm.so.6 new file mode 100644 index 0000000..71b62f7 Binary files /dev/null and b/js/lib/x64/libm.so.6 differ diff --git a/js/parse/Makefile b/js/parse/Makefile index 4fa9e75..569d4cc 100644 --- a/js/parse/Makefile +++ b/js/parse/Makefile @@ -126,7 +126,7 @@ CFILES += scf_dfa_macro.c CFILES += scf_dfa_include.c CFILES += scf_dfa_call.c -CFILES += scf_dfa_create.c +CFILES += scf_dfa_new.c CFILES += scf_dfa_sizeof.c CFILES += scf_dfa_container.c CFILES += scf_dfa_va_arg.c diff --git a/js/parse/main.c b/js/parse/main.c index d592dd3..5f4bcfc 100644 --- a/js/parse/main.c +++ b/js/parse/main.c @@ -14,6 +14,7 @@ static char* __sofiles[] = { "/lib64/ld-linux-x86-64.so.2", "libc.so.6", + "libm.so.6", }; static char* __arm64_objs[] = diff --git a/js/parse/scf_dfa_call.c b/js/parse/scf_dfa_call.c index 15e433a..7197a1b 100644 --- a/js/parse/scf_dfa_call.c +++ b/js/parse/scf_dfa_call.c @@ -169,7 +169,7 @@ static int _call_add_arguments(scf_ast_t* ast, scf_lex_word_t* w, int n_members, scf_variable_t* v; scf_block_t* b; scf_type_t* pt = scf_block_find_type_type(ast->current_block, SCF_FUNCTION_PTR); - scf_node_t* create; + scf_node_t* new; scf_node_t* assign; scf_node_t* node; scf_node_t* arguments; @@ -213,16 +213,16 @@ static int _call_add_arguments(scf_ast_t* ast, scf_lex_word_t* w, int n_members, } b = NULL; - // add create() - create = scf_node_alloc(w, SCF_OP_CREATE, NULL); - if (!create) { + // add new() + new = scf_node_alloc(w, SCF_OP_NEW, NULL); + if (!new) { scf_node_free(assign); return -ENOMEM; } - ret = scf_node_add_child(assign, create); + ret = scf_node_add_child(assign, new); if (ret < 0) { - scf_node_free(create); + scf_node_free(new); scf_node_free(assign); return ret; } @@ -243,7 +243,7 @@ static int _call_add_arguments(scf_ast_t* ast, scf_lex_word_t* w, int n_members, return -ENOMEM; } - ret = scf_node_add_child(create, node); + ret = scf_node_add_child(new, node); if (ret < 0) { scf_node_free(node); scf_node_free(assign); @@ -251,14 +251,14 @@ static int _call_add_arguments(scf_ast_t* ast, scf_lex_word_t* w, int n_members, } // add obj name - ret = scf_ast_add_const_str(ast, create, Object->w); + ret = scf_ast_add_const_str(ast, new, Object->w); if (ret < 0) { scf_node_free(assign); return ret; } // add obj members - ret = scf_ast_add_const_var(ast, create, SCF_VAR_INT, n_members); + ret = scf_ast_add_const_var(ast, new, SCF_VAR_INT, n_members); if (ret < 0) { scf_node_free(assign); return ret; @@ -293,7 +293,7 @@ static int _call_add_arguments(scf_ast_t* ast, scf_lex_word_t* w, int n_members, return ret; } - e->js_create = e2; + e->js_new = e2; return 0; } @@ -600,22 +600,22 @@ static int _dfa_init_syntax_call(scf_dfa_t* dfa) SCF_DFA_GET_MODULE_NODE(dfa, expr, entry, expr); - SCF_DFA_GET_MODULE_NODE(dfa, create, create, create); - SCF_DFA_GET_MODULE_NODE(dfa, create, identity, create_id); - SCF_DFA_GET_MODULE_NODE(dfa, create, rp, create_rp); + SCF_DFA_GET_MODULE_NODE(dfa, new, new, new); + SCF_DFA_GET_MODULE_NODE(dfa, new, identity, new_id); + SCF_DFA_GET_MODULE_NODE(dfa, new, rp, new_rp); // no args scf_dfa_node_add_child(lp, rp); // have args - // arg: create class object, such as: list.push(new A); - scf_dfa_node_add_child(lp, create); - scf_dfa_node_add_child(create_id, comma); - scf_dfa_node_add_child(create_id, rp); - scf_dfa_node_add_child(create_rp, comma); - scf_dfa_node_add_child(create_rp, rp); - scf_dfa_node_add_child(comma, create); + // arg: new class object, such as: list.push(new A); + scf_dfa_node_add_child(lp, new); + scf_dfa_node_add_child(new_id, comma); + scf_dfa_node_add_child(new_id, rp); + scf_dfa_node_add_child(new_rp, comma); + scf_dfa_node_add_child(new_rp, rp); + scf_dfa_node_add_child(comma, new); scf_dfa_node_add_child(lp, expr); scf_dfa_node_add_child(expr, comma); diff --git a/js/parse/scf_dfa_expr.c b/js/parse/scf_dfa_expr.c index 6ff8d56..205c3c4 100644 --- a/js/parse/scf_dfa_expr.c +++ b/js/parse/scf_dfa_expr.c @@ -798,7 +798,7 @@ int _expr_multi_rets(scf_expr_t* e) nb_rets = f->rets->size; - } else if (SCF_OP_CREATE == call->type) + } else if (SCF_OP_NEW == call->type) nb_rets = 2; else return 0; @@ -1030,9 +1030,9 @@ static int _dfa_init_syntax_expr(scf_dfa_t* dfa) SCF_DFA_GET_MODULE_NODE(dfa, sizeof, _sizeof, _sizeof); SCF_DFA_GET_MODULE_NODE(dfa, sizeof, rp, sizeof_rp); - SCF_DFA_GET_MODULE_NODE(dfa, create, create, create); - SCF_DFA_GET_MODULE_NODE(dfa, create, identity, create_id); - SCF_DFA_GET_MODULE_NODE(dfa, create, rp, create_rp); + SCF_DFA_GET_MODULE_NODE(dfa, new, new, new); + SCF_DFA_GET_MODULE_NODE(dfa, new, identity, new_id); + SCF_DFA_GET_MODULE_NODE(dfa, new, rp, new_rp); SCF_DFA_GET_MODULE_NODE(dfa, type, entry, type_entry); SCF_DFA_GET_MODULE_NODE(dfa, type, base_type, base_type); @@ -1070,10 +1070,10 @@ static int _dfa_init_syntax_expr(scf_dfa_t* dfa) scf_dfa_node_add_child(container_rp, comma); scf_dfa_node_add_child(container_rp, semicolon); - // create class object - scf_dfa_node_add_child(expr, create); - scf_dfa_node_add_child(create_id, semicolon); - scf_dfa_node_add_child(create_rp, semicolon); + // new class object + scf_dfa_node_add_child(expr, new); + scf_dfa_node_add_child(new_id, semicolon); + scf_dfa_node_add_child(new_rp, semicolon); // va_arg(ap, type) scf_dfa_node_add_child(expr, va_arg); @@ -1147,8 +1147,8 @@ static int _dfa_init_syntax_expr(scf_dfa_t* dfa) scf_dfa_node_add_child(binary_op, number); scf_dfa_node_add_child(binary_op, identity); - // create class object - scf_dfa_node_add_child(binary_op, create); + // new class object + scf_dfa_node_add_child(binary_op, new); scf_dfa_node_add_child(binary_op, expr); scf_dfa_node_add_child(unary_post, rp); diff --git a/js/parse/scf_dfa_create.c b/js/parse/scf_dfa_new.c similarity index 54% rename from js/parse/scf_dfa_create.c rename to js/parse/scf_dfa_new.c index 1e689c1..4598774 100644 --- a/js/parse/scf_dfa_create.c +++ b/js/parse/scf_dfa_new.c @@ -3,26 +3,26 @@ #include"scf_parse.h" #include"scf_stack.h" -extern scf_dfa_module_t dfa_module_create; +extern scf_dfa_module_t dfa_module_new; typedef struct { int nb_lps; int nb_rps; - scf_node_t* create; + scf_node_t* new; scf_expr_t* parent_expr; -} create_module_data_t; +} new_module_data_t; int _call_add_obj(scf_ast_t* ast, scf_lex_word_t* w, scf_node_t* call, scf_expr_t* e, scf_type_t* Object); -static int _create_is_create(scf_dfa_t* dfa, void* word) +static int _new_is_new(scf_dfa_t* dfa, void* word) { scf_lex_word_t* w = word; - return SCF_LEX_WORD_KEY_CREATE == w->type; + return SCF_LEX_WORD_KEY_NEW == w->type; } static int __js_init_func(scf_ast_t* ast, scf_function_t* f) @@ -34,7 +34,7 @@ static int __js_init_func(scf_ast_t* ast, scf_function_t* f) scf_type_t* pt = NULL; scf_node_t* node; scf_node_t* assign; - scf_node_t* create; + scf_node_t* new; scf_node_t* _return; scf_expr_t* e; scf_block_t* b; @@ -56,7 +56,7 @@ static int __js_init_func(scf_ast_t* ast, scf_function_t* f) f->argv->data[0] = that; scf_scope_push_var(f->scope, that); - // this = create Object() + // this = new Object() // add 'this' node = scf_node_alloc(NULL, this->type, this); if (!node) @@ -89,16 +89,16 @@ static int __js_init_func(scf_ast_t* ast, scf_function_t* f) return ret; } - // add 'create' - create = scf_node_alloc(this->w, SCF_OP_CREATE, NULL); - if (!create) { + // add 'new' + new = scf_node_alloc(this->w, SCF_OP_NEW, NULL); + if (!new) { scf_node_free(assign); return -ENOMEM; } - ret = scf_node_add_child(assign, create); + ret = scf_node_add_child(assign, new); if (ret < 0) { - scf_node_free(create); + scf_node_free(new); scf_node_free(assign); return ret; } @@ -119,7 +119,7 @@ static int __js_init_func(scf_ast_t* ast, scf_function_t* f) return -ENOMEM; } - ret = scf_node_add_child(create, node); + ret = scf_node_add_child(new, node); if (ret < 0) { scf_node_free(node); scf_node_free(assign); @@ -189,30 +189,30 @@ static int __js_init_func(scf_ast_t* ast, scf_function_t* f) return 0; } -static int _create_action_lp_stat(scf_dfa_t* dfa, scf_vector_t* words, void* data) +static int _new_action_lp_stat(scf_dfa_t* dfa, scf_vector_t* words, void* data) { - dfa_data_t* d = data; - scf_stack_t* s = d->module_datas[dfa_module_create.index]; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; + dfa_data_t* d = data; + scf_stack_t* s = d->module_datas[dfa_module_new.index]; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; md->nb_lps++; - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_lp_stat"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_lp_stat"), SCF_DFA_HOOK_POST); return SCF_DFA_NEXT_WORD; } -static int _create_action_create(scf_dfa_t* dfa, scf_vector_t* words, void* data) +static int _new_action_new(scf_dfa_t* dfa, scf_vector_t* words, void* data) { - scf_parse_t* parse = dfa->priv; - dfa_data_t* d = data; - scf_lex_word_t* w = words->data[words->size - 1]; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; + scf_parse_t* parse = dfa->priv; + dfa_data_t* d = data; + scf_lex_word_t* w = words->data[words->size - 1]; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; - SCF_CHECK_ERROR(md->create, SCF_DFA_ERROR, "\n"); + SCF_CHECK_ERROR(md->new, SCF_DFA_ERROR, "\n"); - md->create = scf_node_alloc(w, SCF_OP_CREATE, NULL); - if (!md->create) + md->new = scf_node_alloc(w, SCF_OP_NEW, NULL); + if (!md->new) return SCF_DFA_ERROR; md->nb_lps = 0; @@ -222,13 +222,13 @@ static int _create_action_create(scf_dfa_t* dfa, scf_vector_t* words, void* data return SCF_DFA_NEXT_WORD; } -static int _create_action_identity(scf_dfa_t* dfa, scf_vector_t* words, void* data) +static int _new_action_identity(scf_dfa_t* dfa, scf_vector_t* words, void* data) { - scf_parse_t* parse = dfa->priv; - dfa_data_t* d = data; - scf_lex_word_t* w = words->data[words->size - 1]; - scf_function_t* f = NULL; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; + scf_parse_t* parse = dfa->priv; + dfa_data_t* d = data; + scf_lex_word_t* w = words->data[words->size - 1]; + scf_function_t* f = NULL; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; scf_type_t* t = NULL; scf_type_t* pt = NULL; @@ -260,7 +260,7 @@ static int _create_action_identity(scf_dfa_t* dfa, scf_vector_t* words, void* da if (f && f->js_flag) { t->node.js_flag = 1; - md->create->js_flag = 1; + md->new->js_flag = 1; if (!f->init_flag) { if (__js_init_func(parse->ast, f) < 0) @@ -275,51 +275,51 @@ static int _create_action_identity(scf_dfa_t* dfa, scf_vector_t* words, void* da scf_node_t* node = scf_node_alloc(NULL, var->type, var); SCF_CHECK_ERROR(!node, SCF_DFA_ERROR, "node alloc failed\n"); - int ret = scf_node_add_child(md->create, node); + int ret = scf_node_add_child(md->new, node); SCF_CHECK_ERROR(ret < 0, SCF_DFA_ERROR, "node add child failed\n"); w = dfa->ops->pop_word(dfa); if (SCF_LEX_WORD_LP != w->type) { if (d->expr) { - ret = scf_expr_add_node(d->expr, md->create); + ret = scf_expr_add_node(d->expr, md->new); SCF_CHECK_ERROR(ret < 0, SCF_DFA_ERROR, "expr add child failed\n"); } else - d->expr = md->create; + d->expr = md->new; - md->create = NULL; + md->new = NULL; } dfa->ops->push_word(dfa, w); return SCF_DFA_NEXT_WORD; } -static int _create_action_lp(scf_dfa_t* dfa, scf_vector_t* words, void* data) +static int _new_action_lp(scf_dfa_t* dfa, scf_vector_t* words, void* data) { - scf_parse_t* parse = dfa->priv; - dfa_data_t* d = data; - scf_lex_word_t* w = words->data[words->size - 1]; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; + scf_parse_t* parse = dfa->priv; + dfa_data_t* d = data; + scf_lex_word_t* w = words->data[words->size - 1]; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; scf_logd("d->expr: %p\n", d->expr); d->expr = NULL; d->expr_local_flag++; - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_rp"), SCF_DFA_HOOK_POST); - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_comma"), SCF_DFA_HOOK_POST); - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_lp_stat"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_rp"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_comma"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_lp_stat"), SCF_DFA_HOOK_POST); return SCF_DFA_NEXT_WORD; } -static int _create_action_rp(scf_dfa_t* dfa, scf_vector_t* words, void* data) +static int _new_action_rp(scf_dfa_t* dfa, scf_vector_t* words, void* data) { - scf_parse_t* parse = dfa->priv; - dfa_data_t* d = data; - scf_lex_word_t* w = words->data[words->size - 1]; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; - scf_type_t* Object = NULL; + scf_parse_t* parse = dfa->priv; + dfa_data_t* d = data; + scf_lex_word_t* w = words->data[words->size - 1]; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; + scf_type_t* Object = NULL; md->nb_rps++; @@ -327,26 +327,26 @@ static int _create_action_rp(scf_dfa_t* dfa, scf_vector_t* words, void* data) if (md->nb_rps < md->nb_lps) { - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_rp"), SCF_DFA_HOOK_POST); - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_comma"), SCF_DFA_HOOK_POST); - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_lp_stat"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_rp"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_comma"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_lp_stat"), SCF_DFA_HOOK_POST); return SCF_DFA_NEXT_WORD; } assert(md->nb_rps == md->nb_lps); if (d->expr) { - if (md->create->js_flag) { + if (md->new->js_flag) { int ret = scf_ast_find_type(&Object, parse->ast, "Object"); if (ret < 0) return ret; - ret = _call_add_obj(parse->ast, w, md->create, d->expr, Object); + ret = _call_add_obj(parse->ast, w, md->new, d->expr, Object); if (ret < 0) return ret; } - int ret = scf_node_add_child(md->create, d->expr); + int ret = scf_node_add_child(md->new, d->expr); d->expr = NULL; SCF_CHECK_ERROR(ret < 0, SCF_DFA_ERROR, "node add child failed\n"); } @@ -354,108 +354,105 @@ static int _create_action_rp(scf_dfa_t* dfa, scf_vector_t* words, void* data) d->expr = md->parent_expr; d->expr_local_flag--; - if (md->create->js_flag) - md->create->type = SCF_OP_CALL; + if (md->new->js_flag) + md->new->type = SCF_OP_CALL; if (d->expr) { - int ret = scf_expr_add_node(d->expr, md->create); + int ret = scf_expr_add_node(d->expr, md->new); SCF_CHECK_ERROR(ret < 0, SCF_DFA_ERROR, "expr add child failed\n"); } else - d->expr = md->create; + d->expr = md->new; - md->create = NULL; + md->new = NULL; scf_logi("d->expr: %p\n", d->expr); return SCF_DFA_NEXT_WORD; } -static int _create_action_comma(scf_dfa_t* dfa, scf_vector_t* words, void* data) +static int _new_action_comma(scf_dfa_t* dfa, scf_vector_t* words, void* data) { - scf_parse_t* parse = dfa->priv; - dfa_data_t* d = data; - scf_lex_word_t* w = words->data[words->size - 1]; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; - scf_type_t* Object = NULL; + scf_parse_t* parse = dfa->priv; + dfa_data_t* d = data; + scf_lex_word_t* w = words->data[words->size - 1]; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; + scf_type_t* Object = NULL; SCF_CHECK_ERROR(!d->expr, SCF_DFA_ERROR, "\n"); - if (md->create->js_flag) { + if (md->new->js_flag) { int ret = scf_ast_find_type(&Object, parse->ast, "Object"); if (ret < 0) return ret; - ret = _call_add_obj(parse->ast, w, md->create, d->expr, Object); + ret = _call_add_obj(parse->ast, w, md->new, d->expr, Object); if (ret < 0) return ret; } - int ret = scf_node_add_child(md->create, d->expr); + int ret = scf_node_add_child(md->new, d->expr); d->expr = NULL; SCF_CHECK_ERROR(ret < 0, SCF_DFA_ERROR, "node add child failed\n"); - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_comma"), SCF_DFA_HOOK_POST); - SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "create_lp_stat"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_comma"), SCF_DFA_HOOK_POST); + SCF_DFA_PUSH_HOOK(scf_dfa_find_node(dfa, "new_lp_stat"), SCF_DFA_HOOK_POST); return SCF_DFA_SWITCH_TO; } -static int _dfa_init_module_create(scf_dfa_t* dfa) +static int _dfa_init_module_new(scf_dfa_t* dfa) { - SCF_DFA_MODULE_NODE(dfa, create, create, _create_is_create, _create_action_create); + SCF_DFA_MODULE_NODE(dfa, new, new, _new_is_new, _new_action_new); + SCF_DFA_MODULE_NODE(dfa, new, identity, scf_dfa_is_identity, _new_action_identity); - SCF_DFA_MODULE_NODE(dfa, create, identity, scf_dfa_is_identity, _create_action_identity); + SCF_DFA_MODULE_NODE(dfa, new, lp, scf_dfa_is_lp, _new_action_lp); + SCF_DFA_MODULE_NODE(dfa, new, rp, scf_dfa_is_rp, _new_action_rp); + SCF_DFA_MODULE_NODE(dfa, new, lp_stat, scf_dfa_is_lp, _new_action_lp_stat); + SCF_DFA_MODULE_NODE(dfa, new, comma, scf_dfa_is_comma, _new_action_comma); - SCF_DFA_MODULE_NODE(dfa, create, lp, scf_dfa_is_lp, _create_action_lp); - SCF_DFA_MODULE_NODE(dfa, create, rp, scf_dfa_is_rp, _create_action_rp); - - SCF_DFA_MODULE_NODE(dfa, create, lp_stat, scf_dfa_is_lp, _create_action_lp_stat); - - SCF_DFA_MODULE_NODE(dfa, create, comma, scf_dfa_is_comma, _create_action_comma); - - scf_parse_t* parse = dfa->priv; - dfa_data_t* d = parse->dfa_data; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; + scf_parse_t* parse = dfa->priv; + dfa_data_t* d = parse->dfa_data; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; assert(!md); - md = calloc(1, sizeof(create_module_data_t)); + md = calloc(1, sizeof(new_module_data_t)); if (!md) { scf_loge("\n"); return SCF_DFA_ERROR; } - d->module_datas[dfa_module_create.index] = md; + d->module_datas[dfa_module_new.index] = md; return SCF_DFA_OK; } -static int _dfa_fini_module_create(scf_dfa_t* dfa) +static int _dfa_fini_module_new(scf_dfa_t* dfa) { - scf_parse_t* parse = dfa->priv; - dfa_data_t* d = parse->dfa_data; - create_module_data_t* md = d->module_datas[dfa_module_create.index]; + scf_parse_t* parse = dfa->priv; + dfa_data_t* d = parse->dfa_data; + new_module_data_t* md = d->module_datas[dfa_module_new.index]; if (md) { free(md); md = NULL; - d->module_datas[dfa_module_create.index] = NULL; + d->module_datas[dfa_module_new.index] = NULL; } return SCF_DFA_OK; } -static int _dfa_init_syntax_create(scf_dfa_t* dfa) +static int _dfa_init_syntax_new(scf_dfa_t* dfa) { - SCF_DFA_GET_MODULE_NODE(dfa, create, create, create); - SCF_DFA_GET_MODULE_NODE(dfa, create, identity, identity); - SCF_DFA_GET_MODULE_NODE(dfa, create, lp, lp); - SCF_DFA_GET_MODULE_NODE(dfa, create, rp, rp); - SCF_DFA_GET_MODULE_NODE(dfa, create, comma, comma); + SCF_DFA_GET_MODULE_NODE(dfa, new, new, new); + SCF_DFA_GET_MODULE_NODE(dfa, new, identity, identity); + SCF_DFA_GET_MODULE_NODE(dfa, new, lp, lp); + SCF_DFA_GET_MODULE_NODE(dfa, new, rp, rp); + SCF_DFA_GET_MODULE_NODE(dfa, new, comma, comma); - SCF_DFA_GET_MODULE_NODE(dfa, expr, entry, expr); + SCF_DFA_GET_MODULE_NODE(dfa, expr, entry, expr); - scf_dfa_node_add_child(create, identity); + scf_dfa_node_add_child(new, identity); scf_dfa_node_add_child(identity, lp); scf_dfa_node_add_child(lp, rp); @@ -468,11 +465,11 @@ static int _dfa_init_syntax_create(scf_dfa_t* dfa) return 0; } -scf_dfa_module_t dfa_module_create = +scf_dfa_module_t dfa_module_new = { - .name = "create", - .init_module = _dfa_init_module_create, - .init_syntax = _dfa_init_syntax_create, + .name = "new", + .init_module = _dfa_init_module_new, + .init_syntax = _dfa_init_syntax_new, - .fini_module = _dfa_fini_module_create, + .fini_module = _dfa_fini_module_new, }; diff --git a/js/parse/scf_dfa_parse.c b/js/parse/scf_dfa_parse.c index 2654cee..e9e3686 100644 --- a/js/parse/scf_dfa_parse.c +++ b/js/parse/scf_dfa_parse.c @@ -7,7 +7,7 @@ extern scf_dfa_module_t dfa_module_include; extern scf_dfa_module_t dfa_module_identity; extern scf_dfa_module_t dfa_module_expr; -extern scf_dfa_module_t dfa_module_create; +extern scf_dfa_module_t dfa_module_new; extern scf_dfa_module_t dfa_module_call; extern scf_dfa_module_t dfa_module_sizeof; extern scf_dfa_module_t dfa_module_container; @@ -50,7 +50,7 @@ scf_dfa_module_t* dfa_modules[] = &dfa_module_identity, &dfa_module_expr, - &dfa_module_create, + &dfa_module_new, &dfa_module_call, &dfa_module_sizeof, &dfa_module_container, diff --git a/js/parse/scf_dfa_var.c b/js/parse/scf_dfa_var.c index 2ba29aa..b59b044 100644 --- a/js/parse/scf_dfa_var.c +++ b/js/parse/scf_dfa_var.c @@ -194,6 +194,26 @@ static int _var_init_expr(scf_dfa_t* dfa, dfa_data_t* d, scf_vector_t* words, in d->expr->nodes[0] = node0; node0->parent = d->expr; + if (d->current_var->const_flag) { + scf_variable_t* r = NULL; + + int ret = scf_expr_calculate(parse->ast, d->expr, &r); + + scf_expr_free(d->expr); + d->expr = NULL; + if (ret < 0) + return SCF_DFA_ERROR; + + if (!scf_variable_const(r)) { + scf_loge("\n"); + scf_variable_free(r); + return SCF_DFA_ERROR; + } + + scf_variable_free(r); + return 0; + } + scf_node_add_child((scf_node_t*)parse->ast->current_block, (scf_node_t*)d->expr); scf_logd("d->expr->parent->type: %d\n", d->expr->parent->type); diff --git a/js/parse/scf_operator_handler_const.c b/js/parse/scf_operator_handler_const.c index b3bb010..f1dfa57 100644 --- a/js/parse/scf_operator_handler_const.c +++ b/js/parse/scf_operator_handler_const.c @@ -109,7 +109,7 @@ static int _scf_expr_calculate_internal(scf_ast_t* ast, scf_node_t* node, void* return 0; } -static int _scf_op_const_create(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, void* data) +static int _scf_op_const_new(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, void* data) { assert(nb_nodes > 3); @@ -923,7 +923,7 @@ scf_operator_handler_pt const_operator_handlers[SCF_N_OPS] = [SCF_OP_ARRAY_INDEX] = _scf_op_const_array_index, [SCF_OP_POINTER ] = _scf_op_const_pointer, - [SCF_OP_CREATE ] = _scf_op_const_create, + [SCF_OP_NEW ] = _scf_op_const_new, [SCF_OP_VA_START ] = _scf_op_const_va_start, [SCF_OP_VA_ARG ] = _scf_op_const_va_arg, diff --git a/js/parse/scf_operator_handler_semantic.c b/js/parse/scf_operator_handler_semantic.c index 66deb83..51c1cfc 100644 --- a/js/parse/scf_operator_handler_semantic.c +++ b/js/parse/scf_operator_handler_semantic.c @@ -479,7 +479,7 @@ static int _semantic_do_overloaded_assign(scf_ast_t* ast, scf_node_t** nodes, in return ret; } -static int _semantic_do_create(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, scf_handler_data_t* d) +static int _semantic_do_new(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, scf_handler_data_t* d) { scf_variable_t* v0; scf_variable_t* v_pf; @@ -489,7 +489,7 @@ static int _semantic_do_create(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, scf_node_t* parent = nodes[0]->parent; scf_node_t* node0 = nodes[0]; scf_node_t* node1 = nodes[1]; - scf_node_t* create = NULL; + scf_node_t* new = NULL; scf_node_t* node_pf = NULL; v0 = _scf_operand_get(nodes[0]); @@ -503,8 +503,8 @@ static int _semantic_do_create(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, assert(t); assert(pt); - create = scf_node_alloc(parent->w, SCF_OP_CREATE, NULL); - if (!create) + new = scf_node_alloc(parent->w, SCF_OP_NEW, NULL); + if (!new) return -ENOMEM; v_pf = SCF_VAR_ALLOC_BY_TYPE(t->w, pt, 1, 1, NULL); @@ -516,15 +516,15 @@ static int _semantic_do_create(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, if (!node_pf) return -ENOMEM; - ret = scf_node_add_child(create, node_pf); + ret = scf_node_add_child(new, node_pf); if (ret < 0) return ret; - ret = scf_node_add_child(create, node1); + ret = scf_node_add_child(new, node1); if (ret < 0) return ret; - create->parent = parent; - parent->nodes[1] = create; + new->parent = parent; + parent->nodes[1] = new; b = scf_block_alloc_cstr("multi_rets"); if (!b) @@ -719,7 +719,7 @@ static int _semantic_add_var(scf_node_t** pp, scf_ast_t* ast, scf_node_t* parent return 0; } -static int _scf_op_semantic_create(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, void* data) +static int _scf_op_semantic_new(scf_ast_t* ast, scf_node_t** nodes, int nb_nodes, void* data) { assert(nb_nodes >= 1); @@ -1734,8 +1734,8 @@ static int _scf_op_semantic_call(scf_ast_t* ast, scf_node_t** nodes, int nb_node parent->nodes[i - 1] = NULL; parent->nb_nodes--; - assert(arguments->js_create); - arguments->js_create->_3ac_done = 1; + assert(arguments->js_new); + arguments->js_new->_3ac_done = 1; scf_node_free(arguments); arguments = NULL; @@ -2788,7 +2788,7 @@ static int _semantic_multi_rets_assign(scf_ast_t* ast, scf_node_t** nodes, int n break; } - if (SCF_OP_CALL != call->type && SCF_OP_CREATE != call->type) { + if (SCF_OP_CALL != call->type && SCF_OP_NEW != call->type) { scf_loge("\n"); return -1; } @@ -3054,7 +3054,7 @@ static int _scf_op_semantic_assign(scf_ast_t* ast, scf_node_t** nodes, int nb_no if (scf_scope_find_function(t->scope, "__init")) { - ret = _semantic_do_create(ast, nodes, nb_nodes, d); + ret = _semantic_do_new(ast, nodes, nb_nodes, d); if (0 == ret) return 0; @@ -3381,7 +3381,7 @@ scf_operator_handler_pt semantic_operator_handlers[SCF_N_OPS] = [SCF_OP_ARRAY_INDEX] = _scf_op_semantic_array_index, [SCF_OP_POINTER ] = _scf_op_semantic_pointer, - [SCF_OP_CREATE ] = _scf_op_semantic_create, + [SCF_OP_NEW ] = _scf_op_semantic_new, [SCF_OP_VA_START ] = _scf_op_semantic_va_start, [SCF_OP_VA_ARG ] = _scf_op_semantic_va_arg, diff --git a/js/parse/scf_struct_array.c b/js/parse/scf_struct_array.c index 60bf823..b27d10d 100644 --- a/js/parse/scf_struct_array.c +++ b/js/parse/scf_struct_array.c @@ -1,14 +1,14 @@ #include"scf_dfa.h" #include"scf_parse.h" -static int __object_create(scf_expr_t* e, scf_ast_t* ast, scf_lex_word_t* w, scf_variable_t* var, int n_members, scf_type_t* Object, +static int __object_new(scf_expr_t* e, scf_ast_t* ast, scf_lex_word_t* w, scf_variable_t* var, int n_members, scf_type_t* Object, scf_vector_t* init_exprs, scf_vector_t* init_pos) { scf_variable_t* v; scf_block_t* b; scf_type_t* pt = scf_block_find_type_type(ast->current_block, SCF_FUNCTION_PTR); - scf_node_t* create; + scf_node_t* new; scf_node_t* assign; scf_node_t* node; @@ -32,14 +32,14 @@ static int __object_create(scf_expr_t* e, scf_ast_t* ast, scf_lex_word_t* w, scf assign->nodes[0] = (scf_node_t*)b; b->node.parent = assign; - create = scf_node_alloc(w, SCF_OP_CREATE, NULL); - if (!create) + new = scf_node_alloc(w, SCF_OP_NEW, NULL); + if (!new) return -ENOMEM; // add construct() for obj v = SCF_VAR_ALLOC_BY_TYPE(Object->w, pt, 1, 1, NULL); if (!v) { - scf_node_free(create); + scf_node_free(new); return -ENOMEM; } v->const_literal_flag = 1; @@ -48,28 +48,28 @@ static int __object_create(scf_expr_t* e, scf_ast_t* ast, scf_lex_word_t* w, scf scf_variable_free(v); v = NULL; if (!node) { - scf_node_free(create); + scf_node_free(new); return -ENOMEM; } - ret = scf_node_add_child(create, node); + ret = scf_node_add_child(new, node); if (ret < 0) { scf_node_free(node); - scf_node_free(create); + scf_node_free(new); return ret; } // add obj name - ret = scf_ast_add_const_str(ast, create, var->w); + ret = scf_ast_add_const_str(ast, new, var->w); if (ret < 0) { - scf_node_free(create); + scf_node_free(new); return ret; } // add obj members - ret = scf_ast_add_const_var(ast, create, SCF_VAR_INT, n_members); + ret = scf_ast_add_const_var(ast, new, SCF_VAR_INT, n_members); if (ret < 0) { - scf_node_free(create); + scf_node_free(new); return ret; } @@ -101,9 +101,9 @@ static int __object_create(scf_expr_t* e, scf_ast_t* ast, scf_lex_word_t* w, scf scf_logi("var: %s\n", var->w->text->data); - ret = scf_node_add_child(create, ie->expr); + ret = scf_node_add_child(new, ie->expr); if (ret < 0) { - scf_node_free(create); + scf_node_free(new); return ret; } @@ -116,9 +116,9 @@ static int __object_create(scf_expr_t* e, scf_ast_t* ast, scf_lex_word_t* w, scf } } - ret = scf_expr_add_node(e, create); + ret = scf_expr_add_node(e, new); if (ret < 0) { - scf_node_free(create); + scf_node_free(new); return ret; } return 0; @@ -160,14 +160,14 @@ static int __object_init(scf_ast_t* ast, scf_expr_t* e, scf_lex_word_t* w, scf_v var->w->text->data, array_dim, obj->nb_dimentions, obj->dimentions[array_dim].num); - ret = __object_create(e, ast, w, var, obj->dimentions[array_dim].num, Object, NULL, NULL); + ret = __object_new(e, ast, w, var, obj->dimentions[array_dim].num, Object, NULL, NULL); } else if (t->type >= SCF_STRUCT) { scf_logd("var: %s\n", var->w->text->data); - ret = __object_create(e, ast, w, var, t->scope->vars->size, Object, NULL, NULL); + ret = __object_new(e, ast, w, var, t->scope->vars->size, Object, NULL, NULL); } else { scf_logd("var: %s\n", var->w->text->data); - ret = __object_create(e, ast, w, var, 0, Object, init_exprs, init_pos); + ret = __object_new(e, ast, w, var, 0, Object, init_exprs, init_pos); } if (ret < 0) { scf_expr_free(e); diff --git a/ui/Makefile b/ui/Makefile index 04d6fc5..4c5c5b8 100644 --- a/ui/Makefile +++ b/ui/Makefile @@ -186,7 +186,7 @@ CFILES += ../js/parse/scf_dfa_macro.c CFILES += ../js/parse/scf_dfa_include.c CFILES += ../js/parse/scf_dfa_call.c -CFILES += ../js/parse/scf_dfa_create.c +CFILES += ../js/parse/scf_dfa_new.c CFILES += ../js/parse/scf_dfa_sizeof.c CFILES += ../js/parse/scf_dfa_container.c CFILES += ../js/parse/scf_dfa_va_arg.c