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