Пример #1
0
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;
}
Пример #2
0
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);
}
Пример #3
0
    void emplace_back(Args &&... args) {
        if (_is_empty) {
            _is_empty = false;
        } else {
            _inc();
        }

        new (_get_ptr()) T(std::forward<Args>(args)...);
    }
Пример #4
0
    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;
        }
    }
Пример #5
0
void JumpCommand(ParserEnv* e, SymbolValue* args)
{
    int* addr = (int*)_get_ptr(e, args[0]);
    e->curt_func->cmd_cnt = *addr - 1;
}
Пример #6
0
///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;
    }
}
Пример #7
0
 T &back() { return *(_get_ptr()); }