Mercurial > repos > rhope
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 |