<script>
 
-function P(x)
-{
-       this.x = x;
-}
+var a = Math.PI;
 
-var a = create P(1);
-
-document.write(a.x);
+document.write(Math.sqrt(a));
 
 </script>
 
 
 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
 
        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
 
        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
 
 
        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;
 
        {"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},
 
                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) {
        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);
 
 {
        [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,
 
        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];
 
                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];
 
                        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;
                }
 
 
                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;
                }
 
 
 
        Object* Boolean(Object* this)
        {
-               Object* res = create Object();
+               Object* res = new Object();
                if (!res)
                        return NULL;
 
 
        Object* Boolean(Object* this, int64_t i)
        {
-               Object* res = create Object();
+               Object* res = new Object();
                if (!res)
                        return NULL;
 
 
        Object* Boolean(Object* this, Object* that)
        {
-               Object* res = create Object();
+               Object* res = new Object();
                if (!res)
                        return NULL;
 
 
        Object* Date(Object* this)
        {
-               Object* res = create Object(0);
+               Object* res = new Object(0);
                if (!res)
                        return NULL;
 
 
        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;
        }
 
 
 //             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) {
 
        {"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},
 
        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)
 
        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) {
 
 
 int       memcpy (void* dst,      const void* src, uintptr_t n);
 int       memcmp (void* dst,      const void* src, uintptr_t n);
 
+double    sqrt(double d);
 
 
                complex* res;
 
-               res = create complex(0.0, 0.0);
+               res = new complex(0.0, 0.0);
                if (!res)
                        return NULL, -1;
 
 
                complex* res;
 
-               res = create complex(0.0, 0.0);
+               res = new complex(0.0, 0.0);
                if (!res)
                        return NULL, -1;
 
 
                complex* res;
 
-               res = create complex(0.0, 0.0);
+               res = new complex(0.0, 0.0);
                if (!res)
                        return NULL, -1;
 
 
                complex* res;
 
-               res = create complex(0.0, 0.0);
+               res = new complex(0.0, 0.0);
                if (!res)
                        return NULL, -1;
 
 
        {
                string* s;
 
-               s = create string();
+               s = new string();
                if (!s)
                        return NULL, -1;
 
 
 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
 
 {
        "/lib64/ld-linux-x86-64.so.2",
        "libc.so.6",
+       "libm.so.6",
 };
 
 static char* __arm64_objs[] =
 
        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;
        }
        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;
        }
                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);
        }
 
        // 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;
                return ret;
        }
 
-       e->js_create = e2;
+       e->js_new = e2;
        return 0;
 }
 
 
        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);
 
 
                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;
        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);
        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);
        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);
 
 #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)
        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;
        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)
                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;
        }
                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);
        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;
        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;
 
        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)
        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++;
 
 
        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");
        }
        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);
        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,
 };
 
 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;
        &dfa_module_identity,
 
        &dfa_module_expr,
-       &dfa_module_create,
+       &dfa_module_new,
        &dfa_module_call,
        &dfa_module_sizeof,
        &dfa_module_container,
 
        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);
 
        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);
 
 
        [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,
 
        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;
        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]);
        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);
        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)
        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);
 
                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;
                        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;
        }
 
                        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;
 
 
        [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,
 
 #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;
 
        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;
        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;
        }
 
 
                                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;
                                }
 
                }
        }
 
-       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;
                                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);
 
 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