Mercurial > repos > rhope
comparison runtime/builtinworkers.c @ 162:bac2c74801f0
Move some C code out of cbackend_c.rhope into separate include files
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 09 Jan 2011 22:51:10 -0500 |
parents | |
children | 327bcf35e094 |
comparison
equal
deleted
inserted
replaced
161:f5095855c878 | 162:bac2c74801f0 |
---|---|
1 Func(Build, | |
2 NumParams 1) | |
3 | |
4 Param(0, TYPE_BLUEPRINT) | |
5 | |
6 lv_Build->bp = ((t_Blueprint *)(cdata->params[0]))->bp; | |
7 release_ref(cdata->params[0]); | |
8 | |
9 Ret(0, new_object_bp(lv_Build->bp)) | |
10 EndFunc(Build) | |
11 DISPATCH | |
12 | |
13 Func(BlueprintSP_Of, | |
14 NumParams 1) | |
15 | |
16 lv_BlueprintSP_Of->bp = get_blueprint(cdata->params[0]); | |
17 release_ref(cdata->params[0]); | |
18 | |
19 Ret(0, new_object(TYPE_BLUEPRINT)) | |
20 ((t_Blueprint *)cdata->params[0])->bp = lv_BlueprintSP_Of->bp; | |
21 EndFunc(BlueprintSP_Of) | |
22 DISPATCH | |
23 | |
24 Func(ID, NumParams 1) | |
25 | |
26 Param(0, TYPE_BLUEPRINT) | |
27 | |
28 lv_ID->id = new_object(TYPE_UINT32); | |
29 ((t_UInt32 *)lv_ID->id)->Num = ((t_Blueprint *)cdata->params[0])->bp->type_id; | |
30 release_ref(cdata->params[0]); | |
31 Ret(0, lv_ID->id) | |
32 EndFunc(ID) | |
33 DISPATCH | |
34 | |
35 Func(BlueprintSP_FromSP_ID, NumParams 1) | |
36 | |
37 Param(0, TYPE_UINT32) | |
38 | |
39 lv_BlueprintSP_FromSP_ID->type = ((t_UInt32 *)cdata->params[0])->Num; | |
40 if (lv_BlueprintSP_FromSP_ID->type >= max_registered_type || !registered_types[lv_BlueprintSP_FromSP_ID->type]) { | |
41 Ret(1, cdata->params[0]) | |
42 Ret(0, NULL) | |
43 } else { | |
44 release_ref(cdata->params[0]); | |
45 Ret(0, new_object(TYPE_BLUEPRINT)) | |
46 ((t_Blueprint *)cdata->params[0])->bp = registered_types[lv_BlueprintSP_FromSP_ID->type]; | |
47 Ret(1, NULL) | |
48 } | |
49 | |
50 EndFunc(BlueprintSP_FromSP_ID) | |
51 DISPATCH | |
52 | |
53 FuncNoLocals(Pause, NumParams 1) | |
54 Param(0, TYPE_WORKER) | |
55 | |
56 ct->resume_cdata = my_cdata; | |
57 ct->resumeable = 1; | |
58 temp_ct = ct; | |
59 ct = new_context(); | |
60 VCPrepCall(my_cdata->params[0], 1) | |
61 VCSetParam(my_cdata->params[0], 0, make_Context(temp_ct)) | |
62 ValCallNoLocals(my_cdata->params[0], 1, 1, Pause) | |
63 release_ref(my_cdata->params[0]); | |
64 DISPATCH | |
65 ValCallNoLocalsPostlude(1, Pause) | |
66 for(idx = 0; idx < cdata->num_params; ++idx) | |
67 if(cdata->params[idx]) | |
68 { release_ref(cdata->params[idx]); } | |
69 free_context(ct); | |
70 ct = get_cqueue(); | |
71 if (!ct) goto NOTHING_TO_DO; | |
72 cdata = ct->resume_cdata; | |
73 ct->resume_cdata = NULL; | |
74 EndFuncNoLocals | |
75 DISPATCH | |
76 | |
77 FuncNoLocals(Resume, NumParams 2) | |
78 Param(0, TYPE_CONTEXT) | |
79 | |
80 temp_ct = ((t_Context *)my_cdata->params[0])->ct; | |
81 release_ref(my_cdata->params[0]); | |
82 if(temp_ct->resumeable && temp_ct->resume_cdata) | |
83 { | |
84 temp_ct->resumeable = 0; | |
85 temp_ct->resume_cdata->params[0] = add_ref(my_cdata->params[1]); | |
86 my_cdata->params[0] = my_cdata->params[1]; | |
87 my_cdata->params[1] = NULL; | |
88 if(!put_cqueue(temp_ct)) | |
89 { | |
90 ct->resume_cdata = my_cdata; | |
91 temp_ct->runafter = ct; | |
92 ct = temp_ct; | |
93 cdata = ct->resume_cdata; | |
94 ct->resume_cdata = NULL; | |
95 } | |
96 } else { | |
97 my_cdata->params[0] = NULL; | |
98 } | |
99 EndFuncNoLocals | |
100 DISPATCH | |
101 |