FAKE_API void fkpspushuint64(fake * fk, uint64_t ret) { bool err = false; variant * v = 0; PS_PUSH_AND_GET(fk->ps, v); V_SET_UUID(v, ret); CHECK_ERR(err); }
bool compiler::compile_explicit_value_node_to_variant(explicit_value_node* ev, variant & v) { fake * fk = m_fk; switch (ev->getvaluetype()) { case explicit_value_node::EVT_TRUE: V_SET_REAL((&v), 1); break; case explicit_value_node::EVT_FALSE: V_SET_REAL((&v), 0); break; case explicit_value_node::EVT_NUM: V_SET_REAL((&v), (fkatol(&ev->str))); break; case explicit_value_node::EVT_STR: v = fk->sh.allocsysstr(ev->str.c_str()); break; case explicit_value_node::EVT_FLOAT: V_SET_REAL((&v), (fkatof(&ev->str))); break; case explicit_value_node::EVT_UUID: V_SET_UUID((&v), (fkatol(&ev->str))); break; case explicit_value_node::EVT_MAP: { const_map_list_value_node * cml = dynamic_cast<const_map_list_value_node *>(ev->v); assert(cml); variant_map * vm = fk->con.newconstmap(); for (int i = 0; i < (int)cml->lists.size(); i++) { const_map_value_node * cmv = dynamic_cast<const_map_value_node *>(cml->lists[i]); assert(cmv); explicit_value_node * kn = dynamic_cast<explicit_value_node *>(cmv->k); explicit_value_node * vn = dynamic_cast<explicit_value_node *>(cmv->v); assert(kn); assert(vn); variant kv; variant vv; if (!compile_explicit_value_node_to_variant(kn, kv)) { return false; } if (!compile_explicit_value_node_to_variant(vn, vv)) { return false; } variant * des = con_map_get(fk, vm, &kv); *des = vv; } V_SET_MAP(&v, vm); } break; case explicit_value_node::EVT_ARRAY: { const_array_list_value_node * cal = dynamic_cast<const_array_list_value_node *>(ev->v); assert(cal); variant_array * va = fk->con.newconstarray(); for (int i = 0; i < (int)cal->lists.size(); i++) { explicit_value_node * vn = dynamic_cast<explicit_value_node *>(cal->lists[i]); assert(vn); variant kv; V_SET_REAL((&kv), i); variant vv; if (!compile_explicit_value_node_to_variant(vn, vv)) { return false; } variant * des = con_array_get(fk, va, &kv); *des = vv; } V_SET_ARRAY(&v, va); } break; default: FKERR("[compiler] compile_explicit_value type error %d %s", ev->getvaluetype(), ev->gettypename()); compile_seterror(ev, m_fk, efk_compile_explicit_type_error, "compile explicit value type error %d", ev->getvaluetype()); return false; } return true; }