comparison runtime/builtinworkers.c @ 186:ba35ab624ec2

Add support for raw C function output from C backend as well as an option to use Boehm-GC instead of reference counting
author Mike Pavone <pavone@retrodev.com>
date Fri, 07 Oct 2011 00:10:02 -0700
parents e57c151f351e
children
comparison
equal deleted inserted replaced
185:4580c08fd4e8 186:ba35ab624ec2
1 Func(Build, 1 Func(Build,
2 NumParams 1) 2 NumParams 1,
3 NumOutputs 1)
3 4
4 Param(0, TYPE_BLUEPRINT) 5 Param(0, TYPE_BLUEPRINT)
5 6
6 lv_Build->bp = ((t_Blueprint *)(cdata->params[0]))->bp; 7 lv(Build, bp) = ((t_Blueprint *)(my_params(0)))->bp;
7 release_ref(cdata->params[0]); 8 release_ref(my_params(0));
8 9
9 Ret(0, new_object_bp(lv_Build->bp)) 10 Ret(0, new_object_bp(lv(Build, bp)))
10 EndFunc(Build) 11 EndFunc(Build)
11 DISPATCH 12 DISPATCH
12 13
13 Func(BlueprintSP_Of, 14 Func(BlueprintSP_Of,
14 NumParams 1) 15 NumParams 1,
15 16 NumOutputs 1)
16 lv_BlueprintSP_Of->bp = get_blueprint(cdata->params[0]); 17
17 release_ref(cdata->params[0]); 18 lv(BlueprintSP_Of, bp) = get_blueprint(my_params(0));
19 release_ref(my_params(0));
18 20
19 Ret(0, new_object(TYPE_BLUEPRINT)) 21 Ret(0, new_object(TYPE_BLUEPRINT))
20 ((t_Blueprint *)cdata->params[0])->bp = lv_BlueprintSP_Of->bp; 22 ((t_Blueprint *)my_outputs(0))->bp = lv(BlueprintSP_Of, bp);
21 EndFunc(BlueprintSP_Of) 23 EndFunc(BlueprintSP_Of)
22 DISPATCH 24 DISPATCH
23 25
24 Func(ID, NumParams 1) 26 Func(ID, NumParams 1, NumOutputs 1)
25 27
26 Param(0, TYPE_BLUEPRINT) 28 Param(0, TYPE_BLUEPRINT)
27 29
28 lv_ID->id = new_object(TYPE_UINT32); 30 lv(ID, id) = new_object(TYPE_UINT32);
29 ((t_UInt32 *)lv_ID->id)->Num = ((t_Blueprint *)cdata->params[0])->bp->type_id; 31 ((t_UInt32 *)lv(ID, id))->Num = ((t_Blueprint *)my_params(0))->bp->type_id;
30 release_ref(cdata->params[0]); 32 release_ref(my_params(0));
31 Ret(0, lv_ID->id) 33 Ret(0, lv(ID, id))
32 EndFunc(ID) 34 EndFunc(ID)
33 DISPATCH 35 DISPATCH
34 36
35 Func(BlueprintSP_FromSP_ID, NumParams 1) 37 Func(BlueprintSP_FromSP_ID, NumParams 1, NumOutputs 2)
36 38
37 Param(0, TYPE_UINT32) 39 Param(0, TYPE_UINT32)
38 40
39 lv_BlueprintSP_FromSP_ID->type = ((t_UInt32 *)cdata->params[0])->Num; 41 lv(BlueprintSP_FromSP_ID, type) = ((t_UInt32 *)my_params(0))->Num;
40 if (lv_BlueprintSP_FromSP_ID->type >= max_registered_type || !registered_types[lv_BlueprintSP_FromSP_ID->type]) { 42 if (lv(BlueprintSP_FromSP_ID, type) >= max_registered_type || !registered_types[lv(BlueprintSP_FromSP_ID, type)]) {
41 Ret(1, cdata->params[0]) 43 Ret(1, my_params(0))
42 Ret(0, NULL) 44 Ret(0, NULL)
43 } else { 45 } else {
44 release_ref(cdata->params[0]); 46 release_ref(my_params(0));
45 Ret(0, new_object(TYPE_BLUEPRINT)) 47 Ret(0, new_object(TYPE_BLUEPRINT))
46 ((t_Blueprint *)cdata->params[0])->bp = registered_types[lv_BlueprintSP_FromSP_ID->type]; 48 ((t_Blueprint *)my_outputs(0))->bp = registered_types[lv(BlueprintSP_FromSP_ID, type)];
47 Ret(1, NULL) 49 Ret(1, NULL)
48 } 50 }
49 51
50 EndFunc(BlueprintSP_FromSP_ID) 52 EndFunc(BlueprintSP_FromSP_ID)
51 DISPATCH 53 DISPATCH
52 54
53 FuncNoLocals(Pause, NumParams 1) 55 #ifndef RAW_FUNC
56 FuncNoLocals(Pause, NumParams 1, NumOutputs 1)
54 Param(0, TYPE_WORKER) 57 Param(0, TYPE_WORKER)
55 58
56 ct->resume_cdata = my_cdata; 59 ct->resume_cdata = my_cdata;
57 ct->resumeable = 1; 60 ct->resumeable = 1;
58 temp_ct = ct; 61 temp_ct = ct;
72 cdata = ct->resume_cdata; 75 cdata = ct->resume_cdata;
73 ct->resume_cdata = NULL; 76 ct->resume_cdata = NULL;
74 EndFuncNoLocals 77 EndFuncNoLocals
75 DISPATCH 78 DISPATCH
76 79
77 FuncNoLocals(Resume, NumParams 2) 80 FuncNoLocals(Resume, NumParams 2, NumOutputs 2)
78 Param(0, TYPE_CONTEXT) 81 Param(0, TYPE_CONTEXT)
79 82
80 temp_ct = ((t_Context *)my_cdata->params[0])->ct; 83 temp_ct = ((t_Context *)my_cdata->params[0])->ct;
81 release_ref(my_cdata->params[0]); 84 release_ref(my_cdata->params[0]);
82 if(temp_ct->resumeable && temp_ct->resume_cdata) 85 if(temp_ct->resumeable && temp_ct->resume_cdata)
214 { 217 {
215 Ret(idx, lv_RunSP_Bytecode[op1+idx]) 218 Ret(idx, lv_RunSP_Bytecode[op1+idx])
216 } 219 }
217 EndFunc(RunSP_Bytecode) 220 EndFunc(RunSP_Bytecode)
218 DISPATCH 221 DISPATCH
219 222 #else
223 FuncNoLocals(Pause, NumParams 1, NumOutputs 0)
224 exit(2);
225 EndFuncNoLocals
226
227 FuncNoLocals(Resume, NumParams 2, NumOutputs 0)
228 exit(2);
229 EndFuncNoLocals
230
231 FuncNoLocals(RunSP_Bytecode, NumParams 2, NumOutputs 0)
232 exit(2);
233 EndFuncNoLocals
234 #endif //RAW_FUNC
235
236