void IfTrueJumpCommand(ParserEnv* e, SymbolValue* args) { bool* cond = (bool*)_get_ptr(e, args[1]); int* addr = (int*)_get_ptr(e, args[0]); if (*cond) e->curt_func->cmd_cnt = *addr - 1; }
void FunctionCallCommand(ParserEnv* e, SymbolValue* args) { SymbolValue func = args[0]; SymbolValue vari_stack_size = args[1]; SymbolValue vari_str_stack_size = args[2]; int* vari_offs = (int*)_get_ptr(e, vari_stack_size); int* vari_str_offs = (int*)_get_ptr(e, vari_str_stack_size); FunctionClosures fc = func.data.func; ParserEnv_push_return_point(e, *vari_offs, *vari_str_offs, e->curt_func, e->curt_func->cmd_cnt); FunctionClosures_execute(e, fc); ParserEnv_pop_return_point(e); }
void emplace_back(Args &&... args) { if (_is_empty) { _is_empty = false; } else { _inc(); } new (_get_ptr()) T(std::forward<Args>(args)...); }
void _dec() { _get_ptr()->~T(); if (_bucket_index == 0) { if (_bucket_size == size) { /* we're already in object memory */ _is_empty = true; } else { /* we're on the linked list */ _bucket_size /= 2; _bucket_index = _bucket_size - 1; if (_bucket_iter != _buckets.begin()) { --_bucket_iter; } } } else { --_bucket_index; } }
void JumpCommand(ParserEnv* e, SymbolValue* args) { int* addr = (int*)_get_ptr(e, args[0]); e->curt_func->cmd_cnt = *addr - 1; }
///void FuncTestFloatAssignFloatCommand(ParserEnv* e, SymbolValue* args); void FunctionClosures_complete(ParserEnv* e, FunctionClosures _self) { switch (_self->status) { case DeclareInputParamsStatus: _self->status = DeclareOutputParamsStatus; break; case DeclareOutputParamsStatus: _self->status = AddCommandsStatus; break; case AddCommandsStatus: _self->status = CompleteStatus; { ///FunctionClosures_complete_branchs(e, _self); VPRINT("\n\n##GET STACK SIZE\n"); int* ip = (int*)_get_ptr(e, _self->vari_stack_size); *ip = ValueAllocator_totel_size(&e->vari_alloc); VPRINT("VARI STACK SIZE %d\n", *ip); ip = (int*)_get_ptr(e, _self->vari_str_stack_size); *ip = ValueAllocator_totel_size(&e->vari_str_alloc); VPRINT("VARI STR STACK SIZE %d\n", *ip); VPRINT("\n"); euint n = 0; n = array_n(_self->func_arg_op_cmds_type_a_1); for (euint i = 0; i < n; i++) { CommandClosures cc = _self->func_arg_op_cmds_type_a_1[i]; /// if (FloatAssignFloatCommand == cc->cmd) cc->cmd = FloatAssignFloatCommand; /// SymbolValue* sv = &cc->args[1]; _grow(e, sv); } n = array_n(_self->func_arg_op_cmds_type_b_1); for (euint i = 0; i < n; i++) { CommandClosures cc = _self->func_arg_op_cmds_type_b_1[i]; /// if (FloatAssignFloatCommand == cc->cmd) cc->cmd = FloatAssignFloatCommand; /// SymbolValue* sv = &cc->args[0]; _grow(e, sv); } n = array_n(_self->func_arg_op_cmds_type_c_1); for (euint i = 0; i < n; i++) { CommandClosures cc = _self->func_arg_op_cmds_type_c_1[i]; /// if (FloatAssignFloatCommand == cc->cmd) cc->cmd = FloatAssignFloatCommand; /// { SymbolValue* sv = &cc->args[0]; _grow(e, sv); } { SymbolValue* sv = &cc->args[1]; _grow(e, sv); } } n = array_n(_self->func_arg_op_cmds_type_a_2); for (euint i = 0; i < n; i++) { CommandClosures cc = _self->func_arg_op_cmds_type_a_2[i]; /// if (FloatAssignFloatCommand == cc->cmd) cc->cmd = FloatAssignFloatCommand; /// { SymbolValue* sv = &cc->args[1]; _grow(e, sv); } { SymbolValue* sv = &cc->args[2]; _grow(e, sv); } } n = array_n(_self->func_arg_op_cmds_type_b_2); for (euint i = 0; i < n; i++) { CommandClosures cc = _self->func_arg_op_cmds_type_b_2[i]; /// if (FloatAssignFloatCommand == cc->cmd) cc->cmd = FloatAssignFloatCommand; /// { SymbolValue* sv = &cc->args[0]; _grow(e, sv); } { SymbolValue* sv = &cc->args[2]; _grow(e, sv); } } n = array_n(_self->func_arg_op_cmds_type_c_2); for (euint i = 0; i < n; i++) { CommandClosures cc = _self->func_arg_op_cmds_type_c_2[i]; /// if (FloatAssignFloatCommand == cc->cmd) cc->cmd = FloatAssignFloatCommand; /// { SymbolValue* sv = &cc->args[0]; _grow(e, sv); } { SymbolValue* sv = &cc->args[1]; _grow(e, sv); } { SymbolValue* sv = &cc->args[2]; _grow(e, sv); } } } ValueAllocator_clear(&e->vari_alloc); ValueAllocator_clear(&e->vari_str_alloc); break; default: break; } }
T &back() { return *(_get_ptr()); }