Mercurial > repos > rhope
annotate runtime/func.h @ 63:04baa003de5a
Merged latest changes with better C branch
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 05 May 2010 22:12:23 -0400 |
parents | fa24ef3b026f 70af7fa155d0 |
children | 1db811fa4744 |
rev | line source |
---|---|
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #ifndef _FUNC_H_ |
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #define _FUNC_H_ |
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
53
70af7fa155d0
Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents:
48
diff
changeset
|
4 typedef struct object object; |
70af7fa155d0
Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents:
48
diff
changeset
|
5 typedef struct calldata calldata; |
70af7fa155d0
Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents:
48
diff
changeset
|
6 |
8
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
7 typedef enum { |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
8 NORMAL_RETURN=0, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
9 EXCEPTION_RETURN, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
10 TAIL_RETURN, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
11 NO_CONVERSION, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
12 STACK_UNWIND |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
13 } returntype; |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
14 |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
15 |
53
70af7fa155d0
Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents:
48
diff
changeset
|
16 typedef returntype (*rhope_func)(calldata *); |
70af7fa155d0
Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents:
48
diff
changeset
|
17 typedef void (*special_func) (object *); |
8
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
18 |
48
a24eb366195c
Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
19 #define MethodName(name,type) f_ ## name ## AT_ ## type |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
21 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
22 #define Func(name,numparams) \ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
23 f_ ## name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
24 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
25 release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
26 sf_ ## name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
27 lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name)); |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
28 |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
29 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
30 #define FuncNoLocals(name,numparams) \ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
31 f_ ## name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
32 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
33 release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
34 sf_ ## name: |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
35 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
36 #define EndFunc(name) \ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
37 free_stack(ct, lv_ ## name);\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
38 func = cdata->func; |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
39 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
40 #define EndFuncNoLocals \ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
41 func = cdata->func; |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
42 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
43 #define Method(name) \ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
44 f_ ## name:\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
45 sf_ ## name:\ |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
46 switch(get_blueprint(cdata->params[0])->type_id)\ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
47 { |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
48 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
49 #define EndMethod \ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
50 default:\ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
51 goto _exception;\ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
52 } |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
53 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
54 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
55 #define MethodDispatch(type_id,name,type_name) \ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
56 case type_id:\ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
57 goto m_ ## name ## _AT_ ## type_name; |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
58 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
59 #define MethodImpl(name,type_name,mytype_id,numparams) \ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
60 f_ ## name ## _AT_ ## type_name:\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
61 sf_ ## name ## _AT_ ## type_name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
62 if (cdata->num_params < 1)\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
63 goto _exception;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
64 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
65 {\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
66 puts("uh oh, need conversion and that's not implemented yet!");\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
67 exit(1);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
68 }\ |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
69 m_ ## name ## _AT_ ## type_name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
70 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
71 release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
72 lv_ ## name ## _AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## _AT_ ## type_name)); |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
73 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
74 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
75 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
76 f_ ## name ## _AT_ ## type_name:\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
77 sf_ ## name ## _AT_ ## type_name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
78 if (cdata->num_params < 1)\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
79 goto _exception;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
80 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
81 {\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
82 puts("uh oh, need conversion and that's not implemented yet!");\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
83 exit(1);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
84 }\ |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
85 m_ ## name ## _AT_ ## type_name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
86 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
87 release_ref(cdata->params[0-idx]); cdata->num_params = numparams; |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
88 |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
89 #define NumParams |
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
90 #define CallSpace |
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
91 |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
92 #define Param(num,convtypeid) \ |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
93 if(get_blueprint(cdata->params[0-num])->type_id != convtypeid)\ |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
94 {\ |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
95 puts("uh oh, need conversion and that's not implemented yet!");\ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
96 exit(1);\ |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
97 } |
8
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
98 |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
99 #define CopiedParam(num,convtypeid) Param(num,convtypeid) cdata->params[num] = copy_object(cdata->params[num]); |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
100 #define Ret(num,val) cdata->params[0-num] = (object *)(val); |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 #define Exception |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
102 #define FuncDef(name) lt_ ## name * lv_ ## name; |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
103 #define MethodDef(name) lt_ ## name ## _AT_ ## type_name * lv_ ## name ## _AT_ ## type_name; |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
104 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
105 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
106 #define PrepCall(callspace) cdata = alloc_cdata(ct, cdata, callspace); |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
108 #define SetParam(num,value) cdata->params[0-num] = value; |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
109 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
110 #define Call(tocall, numparams, resumeto, myname)\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
111 cdata->func = FUNC_ ## myname ## _ ## resumeto;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
112 cdata->num_params = numparams;\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
113 goto sf_ ## tocall;\ |
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
114 r ## resumeto ## _ ## myname:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
115 lv_ ## myname = (lt_ ## myname *)(cdata->lastframe+1); |
35
3498713c3dc9
C backend portion of supporting user defined types is done, but untested. Parser/NWorker still need a fair bit of work
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
116 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
117 #define FreeCall\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
118 temp_cdata = cdata->lastframe;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
119 free_stack(ct, cdata);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
120 cdata = temp_cdata; |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
122 #define FreeCallMethod(myname,mytype)\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
123 temp_cdata = cdata->lastframe;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
124 free_stack(ct, cdata);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
125 cdata = temp_cdata;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
126 lv_ ## myname ## _AT_ ## type_name = (lt_ ## myname ## _AT_ ## type_name *)(cdata+1); |
61
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
127 |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
128 #define TPrepCall(callspace) \ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
129 func = cdata->lastframe->func;\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
130 temp_cdata = cdata->lastframe->lastframe;\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
131 free_stack(ct, cdata->lastframe);\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
132 cdata = alloc_cdata(ct, temp_cdata, callspace);\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
133 cdata->func = func; |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
134 |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
135 #define TCall(tocall, numparams)\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
136 cdata->num_params = numparams;\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
137 goto sf_ ## tocall; |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
138 |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
139 |
48
a24eb366195c
Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
140 #endif //_FUNC_H_ |