Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1913 jaeger 1
tp_obj *tp_ptr(tp_obj o) {
2
    tp_obj *ptr = (tp_obj*)tp_malloc(sizeof(tp_obj)); *ptr = o;
3
    return ptr;
4
}
5
 
6
tp_obj _tp_dcall(TP,tp_obj fnc(TP)) {
7
    return fnc(tp);
8
}
9
tp_obj _tp_tcall(TP,tp_obj fnc) {
10
    if (fnc.fnc.ftype&2) {
11
        _tp_list_insert(tp,tp->params.list.val,0,fnc.fnc.info->self);
12
    }
13
    return _tp_dcall(tp,(tp_obj (*)(tp_vm *))fnc.fnc.val);
14
}
15
 
16
tp_obj tp_fnc_new(TP,int t, void *v, tp_obj s, tp_obj g) {
17
    tp_obj r = {TP_FNC};
18
    _tp_fnc *info = (_tp_fnc*)tp_malloc(sizeof(_tp_fnc));
19
    info->self = s;
20
    info->globals = g;
21
    r.fnc.ftype = t;
22
    r.fnc.info = info;
23
    r.fnc.val = v;
24
    return tp_track(tp,r);
25
}
26
 
27
tp_obj tp_def(TP,void *v, tp_obj g) {
28
    return tp_fnc_new(tp,1,v,tp_None,g);
29
}
30
 
31
tp_obj tp_fnc(TP,tp_obj v(TP)) {
32
    return tp_fnc_new(tp,0,v,tp_None,tp_None);
33
}
34
 
35
tp_obj tp_method(TP,tp_obj self,tp_obj v(TP)) {
36
    return tp_fnc_new(tp,2,v,self,tp_None);
37
}
38
 
39
tp_obj tp_data(TP,int magic,void *v) {
40
    tp_obj r = {TP_DATA};
41
    r.data.info = (_tp_data*)tp_malloc(sizeof(_tp_data));
42
    r.data.val = v;
43
    r.data.magic = magic;
44
    return tp_track(tp,r);
45
}
46
 
47
tp_obj tp_params(TP) {
48
    tp_obj r;
49
    tp->params = tp->_params.list.val->items[tp->cur];
50
    r = tp->_params.list.val->items[tp->cur];
51
    r.list.val->len = 0;
52
    return r;
53
}
54
tp_obj tp_params_n(TP,int n, tp_obj argv[]) {
55
    tp_obj r = tp_params(tp);
56
    int i; for (i=0; i
57
    return r;
58
}
59
tp_obj tp_params_v(TP,int n,...) {
60
    int i;
61
    tp_obj r = tp_params(tp);
62
    va_list a; va_start(a,n);
63
    for (i=0; i
64
        _tp_list_append(tp,r.list.val,va_arg(a,tp_obj));
65
    }
66
    va_end(a);
67
    return r;
68
}