annotate runtime/func.h @ 142:7bbdc034e347

Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
author Mike Pavone <pavone@retrodev.com>
date Sun, 21 Nov 2010 16:33:17 -0500
parents f2cb85c53ced
children b75ec364cecc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
4 typedef struct object object;
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
5 typedef struct calldata calldata;
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
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 *);
100
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
17 typedef void (*special_func) (object *);
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
18
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
19 #ifdef MULTI_SWITCH
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
20 #define DispatchEntry(name) case FUNC_##name: goto f_##name;
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
21 #define ResumeEntry(num,name) case RES_##num##_##name: goto r##num##_##name;
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
22 #define DispatchVar
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
23 #define DISPATCH switch(func) { DispatchEntries }
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
24 #define EndEntry case END: goto DO_END;
140
c14698c512f1 Untested addition of Pause/Resume
Mike Pavone <pavone@retrodev.com>
parents: 128
diff changeset
25 #define EndThreadEntry case END_THREAD: goto DO_END_THREAD;
100
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
26 #else
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
27 #define DispatchEntry(name) &&f_##name,
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
28 #define ResumeEntry(num,name) &&r##num##_##name,
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
29 #define DispatchVar void * funcs[] = { DispatchEntries };
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
30 #define DISPATCH goto *funcs[func];
141
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
31 #define EndEntry &&DO_END,
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
32 #define EndThreadEntry &&DO_END_THREAD
100
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
33 #endif
85
6d10b5b9ebc3 Make dispatch type selectable between replicated switch and computed goto
Mike Pavone <pavone@retrodev.com>
parents: 75
diff changeset
34
8
8d74ef7fa357 Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
35
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
36 #define MethodName(name,type) f_ ## name ## AT_ ## type
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
38 #ifdef ENABLE_PROFILING
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
39
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
40 #define START_PROFILE \
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
41 gettimeofday(&time, NULL);\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
42 cdata->accum = cdata->self_accum = 0;\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
43 cdata->self_start = cdata->start = ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec);
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
44
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
45 #define PAUSE_SELF \
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
46 gettimeofday(&time, NULL);\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
47 my_cdata->self_accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->self_start;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
48
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
49 #define AND_TOTAL \
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
50 *(my_cdata->myactivationlevel)--;\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
51 my_cdata->accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->start;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
52
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
53 #define RESUME_SELF \
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
54 gettimeofday(&time, NULL);\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
55 my_cdata->self_start = ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec);
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
56
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
57 #define AND_RESUME_TOTAL \
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
58 *(my_cdata->myactivationlevel)++;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
59 my_cdata->start = my_cdata->self_start;
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
60
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
61 #define EndFunc(name) \
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
62 free_stack(ct, lv_ ## name);\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
63 func = cdata->func;\
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
64 profile_activationlevel[FUNC_ ## name]--;\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
65 gettimeofday(&time, NULL);\
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
66 if(profile_activationlevel[FUNC_ ## name])\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
67 {\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
68 profile_nestedcounts[FUNC_ ## name]++;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
69 } else {\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
70 profile_counts[FUNC_ ## name]++;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
71 profile_totals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->start + cdata->accum;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
72 }\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
73 profile_selftotals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->self_start + cdata->self_accum;
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
74
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
75 #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
76 f_ ## name:\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
77 for(idx = numparams; idx < cdata->num_params; ++idx)\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
78 release_ref(cdata->params[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
79 sf_ ## name:\
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
80 profile_activationlevel[FUNC_ ## name]++;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
81 cdata->myactivationlevel = &profile_activationlevel[FUNC_ ## name];\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
82 START_PROFILE\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
83 lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
84 my_cdata = cdata;
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
85
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
86 #define MethodImpl(name,type_name,mytype_id,numparams) \
65
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
87 f_ ## name ## AT_ ## type_name:\
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
88 sf_ ## name ## AT_ ## type_name:\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
89 if (cdata->num_params < 1)\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
90 {\
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
91 cdata = alloc_cdata(ct, cdata, 0);\
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
92 cdata->func = FUNC_ ## name ## AT_ ## type_name;\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
93 goto _exception;\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
94 }\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
95 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
96 {\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
97 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
98 exit(1);\
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
99 }\
65
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
100 m_ ## name ## AT_ ## type_name:\
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
101 profile_activationlevel[FUNC_ ## name ## AT_ ## type_name]++;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
102 cdata->myactivationlevel = &profile_activationlevel[FUNC_ ## name ## AT_ ## type_name];\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
103 START_PROFILE\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
104 for(idx = numparams; idx < cdata->num_params; ++idx)\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
105 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
106 lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
107 my_cdata = cdata;
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
108
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
109 #else
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
110
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
111 #define START_PROFILE
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
112 #define PAUSE_SELF
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
113 #define RESUME_SELF
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
114 #define AND_TOTAL
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
115 #define AND_RESUME_TOTAL
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
116
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
117 #define EndFunc(name) \
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
118 free_stack(ct, lv_ ## name);\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
119 func = cdata->func;
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
120
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
121 #define Func(name,numparams) \
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
122 f_ ## name:\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
123 for(idx = numparams; idx < cdata->num_params; ++idx)\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
124 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
125 sf_ ## name:\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
126 lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
127 my_cdata = cdata;
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
128
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
129 #define MethodImpl(name,type_name,mytype_id,numparams) \
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
130 f_ ## name ## AT_ ## type_name:\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
131 sf_ ## name ## AT_ ## type_name:\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
132 if (cdata->num_params < 1)\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
133 {\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
134 cdata = alloc_cdata(ct, cdata, 0);\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
135 cdata->func = FUNC_ ## name ## AT_ ## type_name;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
136 goto _exception;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
137 }\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
138 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
139 {\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
140 puts("uh oh, need conversion and that's not implemented yet!");\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
141 exit(1);\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
142 }\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
143 m_ ## name ## AT_ ## type_name:\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
144 for(idx = numparams; idx < cdata->num_params; ++idx)\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
145 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
146 lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
147 my_cdata = cdata;
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
148
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
149 #endif
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
150
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
151 #define EndFuncNoLocals \
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
152 func = cdata->func;
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
153
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
154
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
155 #define FuncNoLocals(name,numparams) \
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
156 f_ ## name:\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
157 for(idx = numparams; idx < cdata->num_params; ++idx)\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
158 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
159 sf_ ## name:\
60906f8803ef Improved profiling
Mike Pavone <pavone@retrodev.com>
parents: 105
diff changeset
160 my_cdata = cdata;
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
161
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
162
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
163 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \
65
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
164 f_ ## name ## AT_ ## type_name:\
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
165 sf_ ## name ## AT_ ## type_name:\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
166 if (cdata->num_params < 1)\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
167 cdata = alloc_cdata(ct, cdata, 0);\
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
168 cdata->func = FUNC_ ## name ## AT_ ## type_name;\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
169 goto _exception;\
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
170 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
171 {\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
172 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
173 exit(1);\
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
174 }\
65
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
175 m_ ## name ## AT_ ## type_name:\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
176 for(idx = numparams; idx < cdata->num_params; ++idx)\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
177 release_ref(cdata->params[idx]); cdata->num_params = numparams;\
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
178 my_cdata = cdata;
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
179
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
180
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
181 #define Method(name) \
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
182 f_ ## name:\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
183 sf_ ## name:\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
184 switch(get_blueprint(cdata->params[0])->type_id)\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
185 {
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
186
128
5eedee9063dc Print type name in error message for a missing method
Mike Pavone <pavone@retrodev.com>
parents: 116
diff changeset
187 #define EndMethod(mname) \
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
188 default:\
128
5eedee9063dc Print type name in error message for a missing method
Mike Pavone <pavone@retrodev.com>
parents: 116
diff changeset
189 printf("Type ");\
5eedee9063dc Print type name in error message for a missing method
Mike Pavone <pavone@retrodev.com>
parents: 116
diff changeset
190 fwrite( ((t_Array *)((t_String *)get_blueprint(cdata->params[0])->name)->payload.Buffer)+1, 1, ((t_Array *)((t_String *)get_blueprint(cdata->params[0])->name)->payload.Buffer)->payload.Length, stdout);\
5eedee9063dc Print type name in error message for a missing method
Mike Pavone <pavone@retrodev.com>
parents: 116
diff changeset
191 printf("(%d) does not implement method %s\n", get_blueprint(cdata->params[0])->type_id, #mname);\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
192 cdata = alloc_cdata(ct, cdata, 0);\
128
5eedee9063dc Print type name in error message for a missing method
Mike Pavone <pavone@retrodev.com>
parents: 116
diff changeset
193 cdata->func = FUNC_ ## mname;\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
194 goto _exception;\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
195 }
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
196
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
197
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
198 #define MethodDispatch(type_id,name,type_name) \
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
199 case type_id:\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
200 goto m_ ## name ## AT_ ## type_name;
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
201
11
3021dac0d8f5 Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
202 #define NumParams
3021dac0d8f5 Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
203 #define CallSpace
3021dac0d8f5 Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
204
12
31f8182f3433 Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents: 11
diff changeset
205 #define Param(num,convtypeid) \
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
206 if(get_blueprint(cdata->params[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
207 {\
75
0083b2f7b3c7 Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
Mike Pavone <pavone@retrodev.com>
parents: 74
diff changeset
208 printf("uh oh, need conversion from type %d to type %d for param %d and that's not implemented yet!", get_blueprint(cdata->params[num])->type_id, convtypeid, num);\
0083b2f7b3c7 Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
Mike Pavone <pavone@retrodev.com>
parents: 74
diff changeset
209 goto _exception;\
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
210 }
8
8d74ef7fa357 Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
211
12
31f8182f3433 Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents: 11
diff changeset
212 #define CopiedParam(num,convtypeid) Param(num,convtypeid) cdata->params[num] = copy_object(cdata->params[num]);
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
213 #define Ret(num,val) cdata->params[num] = (object *)(val);
101
f4fc0a98088a Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents: 100
diff changeset
214 #define NumRet(num) cdata->num_params = num;\
f4fc0a98088a Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents: 100
diff changeset
215 if (num == 1 && !cdata->params[0])\
f4fc0a98088a Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents: 100
diff changeset
216 {\
f4fc0a98088a Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents: 100
diff changeset
217 puts("Worker with only one output failed to produce data for that output!");\
f4fc0a98088a Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents: 100
diff changeset
218 goto _exception;\
f4fc0a98088a Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents: 100
diff changeset
219 }
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
220 #define Exception
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
221 #define FuncDef(name) lt_ ## name * lv_ ## name;
65
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
222 #define MethodDef(name) lt_ ## name ## AT_ ## type_name * lv_ ## name ## AT_ ## type_name;
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
223
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
224
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
225 #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
226
100
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
227 #define SetParam(num,value) cdata->params[num] = value;
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
228
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
229
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
230 #define VCRePrepCall(func,numparams,lastnumparams) \
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
231 if(numparams + ((t_Worker *)func)->payload.Count > lastnumparams)\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
232 {\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
233 temp_cdata = cdata->lastframe;\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
234 free_stack(ct, cdata);\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
235 cdata = alloc_cdata(ct, temp_cdata, numparams + ((t_Worker *)func)->payload.Count);\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
236 }\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
237 vcparam_offset = 0;
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
238
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
239 #define VCPrepCall(func,numparams) \
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
240 cdata = alloc_cdata(ct, cdata, numparams + ((t_Worker *)func)->payload.Count);\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
241 vcparam_offset = 0;
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
242
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
243 #define VCSetParam(func,num,value) \
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
244 while((num+vcparam_offset) < ((t_Worker *)func)->payload.Size && ((object **)(((t_Worker *)func)+1))[num+vcparam_offset])\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
245 {\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
246 cdata->params[num+vcparam_offset] = add_ref(((object **)(((t_Worker *)func)+1))[num+vcparam_offset]);\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
247 ++vcparam_offset;\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
248 }\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
249 cdata->params[num+vcparam_offset] = value;\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
250 last_vcparam = num+vcparam_offset;
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
251
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
252 #define ValCall(tocall,numparams,resumeto,myname)\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
253 last_vcparam++;\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
254 while(last_vcparam < ((t_Worker *)tocall)->payload.Size)\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
255 {\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
256 if (((object **)(((t_Worker *)tocall)+1))[last_vcparam]) \
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
257 cdata->params[last_vcparam] = add_ref(((object **)(((t_Worker *)tocall)+1))[last_vcparam]);\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
258 ++last_vcparam;\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
259 }\
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 71
diff changeset
260 cdata->func = RES_ ## resumeto ## _ ## myname;\
100
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
261 cdata->num_params = numparams + ((t_Worker *)tocall)->payload.Count;\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
262 cdata->vars = lv_ ## myname;\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
263 func = ((t_Worker *)tocall)->payload.Index;\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
264 PAUSE_SELF
100
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
265
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
266 #define ValCallPostlude(resumeto,myname)\
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
267 r ## resumeto ## _ ## myname:\
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 71
diff changeset
268 my_cdata = cdata->lastframe;\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
269 RESUME_SELF\
100
f51c4c17457c Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents: 85
diff changeset
270 lv_ ## myname = cdata->vars;
141
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
271
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
272 #define ValCallNoLocals(tocall,numparams,resumeto,myname)\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
273 last_vcparam++;\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
274 while(last_vcparam < ((t_Worker *)tocall)->payload.Size)\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
275 {\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
276 if (((object **)(((t_Worker *)tocall)+1))[last_vcparam]) \
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
277 cdata->params[last_vcparam] = add_ref(((object **)(((t_Worker *)tocall)+1))[last_vcparam]);\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
278 ++last_vcparam;\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
279 }\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
280 cdata->func = RES_ ## resumeto ## _ ## myname;\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
281 cdata->num_params = numparams + ((t_Worker *)tocall)->payload.Count;\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
282 func = ((t_Worker *)tocall)->payload.Index;\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
283 PAUSE_SELF
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
284
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
285 #define ValCallNoLocalsPostlude(resumeto,myname)\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
286 r ## resumeto ## _ ## myname:\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
287 my_cdata = cdata->lastframe;\
f2cb85c53ced Fix Pause/Resume and rewrite Call Async in Rhope rather than C
Mike Pavone <pavone@retrodev.com>
parents: 140
diff changeset
288 RESUME_SELF
74
a844c623c7df Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents: 71
diff changeset
289
142
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
290 #define CallNoLocals(tocall, numparams, resumeto, myname)\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
291 cdata->func = RES_ ## resumeto ## _ ## myname;\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
292 cdata->num_params = numparams;\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
293 if(FUNC_ ## tocall == FUNC_ ## myname) {\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
294 PAUSE_SELF\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
295 AND_TOTAL\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
296 } else if (FUNC_ ## tocall != FUNC_PL_ && FUNC_ ## tocall != FUNC_MN_ && FUNC_ ## tocall != FUNC_TM_ && FUNC_ ## tocall != FUNC_DV_ && FUNC_ ## tocall != FUNC_If) {\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
297 PAUSE_SELF\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
298 }\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
299 goto sf_ ## tocall;\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
300 r ## resumeto ## _ ## myname:\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
301 my_cdata = cdata->lastframe;\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
302 if(FUNC_ ## tocall == FUNC_ ## myname) {\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
303 RESUME_SELF\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
304 AND_RESUME_TOTAL\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
305 } else if (FUNC_ ## tocall != FUNC_PL_ && FUNC_ ## tocall != FUNC_MN_ && FUNC_ ## tocall != FUNC_TM_ && FUNC_ ## tocall != FUNC_DV_ && FUNC_ ## tocall != FUNC_If) {\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
306 RESUME_SELF\
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 141
diff changeset
307 }
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
308
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
309 #define Call(tocall, numparams, resumeto, myname)\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
310 cdata->func = RES_ ## resumeto ## _ ## myname;\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
311 cdata->num_params = numparams;\
71
c40c3d399133 Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
312 cdata->vars = lv_ ## myname;\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
313 if(FUNC_ ## tocall == FUNC_ ## myname) {\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
314 PAUSE_SELF\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
315 AND_TOTAL\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
316 } else if (FUNC_ ## tocall != FUNC_PL_ && FUNC_ ## tocall != FUNC_MN_ && FUNC_ ## tocall != FUNC_TM_ && FUNC_ ## tocall != FUNC_DV_ && FUNC_ ## tocall != FUNC_If) {\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
317 PAUSE_SELF\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
318 }\
59
4f1ae6eb71d8 Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents: 58
diff changeset
319 goto sf_ ## tocall;\
4f1ae6eb71d8 Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents: 58
diff changeset
320 r ## resumeto ## _ ## myname:\
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
321 my_cdata = cdata->lastframe;\
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
322 if(FUNC_ ## tocall == FUNC_ ## myname) {\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
323 RESUME_SELF\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
324 AND_RESUME_TOTAL\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
325 } else if (FUNC_ ## tocall != FUNC_PL_ && FUNC_ ## tocall != FUNC_MN_ && FUNC_ ## tocall != FUNC_TM_ && FUNC_ ## tocall != FUNC_DV_ && FUNC_ ## tocall != FUNC_If) {\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
326 RESUME_SELF\
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 101
diff changeset
327 }\
71
c40c3d399133 Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
328 lv_ ## myname = cdata->vars;
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
329
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
330
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
331 #define FreeCall\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
332 temp_cdata = cdata->lastframe;\
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
333 free_stack(ct, cdata);\
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
334 cdata = temp_cdata;
7
d61550e2c001 Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
335
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
336 #define FreeCallMethod(myname,mytype)\
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
337 temp_cdata = cdata->lastframe;\
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
338 free_stack(ct, cdata);\
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
339 cdata = temp_cdata;\
65
1db811fa4744 Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
340 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
341
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
342 #define TPrepCall(callspace) \
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
343 func = cdata->lastframe->func;\
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
344 temp_cdata = cdata->lastframe->lastframe;\
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
345 free_stack(ct, cdata->lastframe);\
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
346 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
347 cdata->func = func;
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
348
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
349 #define TCall(tocall, numparams)\
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
350 cdata->num_params = numparams;\
fa24ef3b026f Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents: 59
diff changeset
351 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
352
31f8182f3433 Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents: 11
diff changeset
353
66
d4b44ae2e34a New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents: 65
diff changeset
354 #endif //_FUNC_H_