• R/O
  • SSH
  • HTTPS

jpl: Commit


Commit MetaInfo

Revision134 (tree)
Time2018-09-19 07:09:24
Authorjakobthomsen

Log Message

implement simple conditional call

Change Summary

Incremental Difference

--- trunk/experimental/compiler.compiled.c (revision 133)
+++ trunk/experimental/compiler.compiled.c (revision 134)
@@ -34,6 +34,14 @@
3434 {
3535 switch(fn$$$)
3636 {
37+ case /*false*/0x21727BA00LLU:
38+ ACCESS_RETURN = 0;
39+ RET;
40+
41+ case /*true*/0xBEDC200LLU:
42+ ACCESS_RETURN = 1;
43+ RET;
44+
3745 case /*exit*/0x83392F0LLU:
3846 exit(ACCESS_ARG(0));
3947 RET;
@@ -240,6 +248,11 @@
240248 { CALLBEGIN(0/*void*/); RETURNTO(0x2B72DBA08695LLU); CALLEND(0xADCB6E81E7279DB0LLU); };
241249
242250 }
251+ else if(c$$$ == '?')
252+ {
253+ { CALLBEGIN(0/*void*/); RETURNTO(0x2B72DBA08695LLU); CALLEND(0x2B72DBA09210LLU); };
254+
255+ }
243256 else if(isalpha(c$$$))
244257 {
245258 ungetc(c$$$, stdin);
@@ -287,6 +300,21 @@
287300
288301 RET;
289302
303+ case /*parseif*/0x2B72DBA09210LLU:
304+ ACCESS_RETURN = ++ACCESS_CURADDR; // HACK store addr in return
305+ fprintf(stdout, "// predicate\n");
306+ CALLBEGIN(0/*void*/); RETURNTO(0x2B72DBA09211LLU); CALLEND(0x2B72DBA079C9E70LLU);
307+case 0x2B72DBA09211LLU:
308+
309+ fprintf(stdout, "if(!ACCESS_CURRENT)\n");
310+ fprintf(stdout, " JUMP(0x%0llXLLU); // skip consequent\n", (long long unsigned int)ACCESS_RETURN);
311+ fprintf(stdout, "// consequent\n");
312+ CALLBEGIN(0/*void*/); RETURNTO(0x2B72DBA09212LLU); CALLEND(0x2B72DBA079C9E70LLU);
313+case 0x2B72DBA09212LLU:
314+
315+ fprintf(stdout, "case 0x%0llXLLU%c // skip to here\n", (long long unsigned int)ACCESS_RETURN, 58);
316+ RET;
317+
290318 case /*parsecall*/0x2B72DBA079C9E70LLU:
291319 fputs("CALLBEGIN(0/*void*/); ", stdout); // NOTE do NOT enclose in block because a case-label can appear inbetween if nested call
292320 CALLBEGIN(0/*void*/); RETURNTO(0x2B72DBA079C9E71LLU); CALLEND(0x2B72DBA091F0LLU);
--- trunk/experimental/compiler.source.c (revision 133)
+++ trunk/experimental/compiler.source.c (revision 134)
@@ -1,3 +1,9 @@
1+ false
2+ :ACCESS_RETURN = 0;:
3+ @
4+ true
5+ :ACCESS_RETURN = 1;:
6+ @
17 exit
28 :exit(ACCESS_ARG(0));:
39 @
@@ -170,6 +176,10 @@
170176 {:
171177 ^parsecall$():
172178 }
179+ else if(c$$$ == '?')
180+ {:
181+ ^parseif():
182+ }
173183 else if(isalpha(c$$$))
174184 {
175185 ungetc(c$$$, stdin);:
@@ -203,6 +213,16 @@
203213 parsefns''
204214 `parsefns
205215 @
216+ parseif
217+ :ACCESS_RETURN = ++ACCESS_CURADDR; // HACK store addr in return:
218+ :fprintf(stdout, "// predicate\n");:
219+ parsecall()
220+ :fprintf(stdout, "if(!ACCESS_CURRENT)\n");:
221+ :fprintf(stdout, " JUMP(0x%0llXLLU); // skip consequent\n", (long long unsigned int)ACCESS_RETURN);:
222+ :fprintf(stdout, "// consequent\n");:
223+ parsecall()
224+ :fprintf(stdout, "case 0x%0llXLLU%c // skip to here\n", (long long unsigned int)ACCESS_RETURN, 58);:
225+ @
206226 parsecall:
207227 fputs("CALLBEGIN(0/*void*/); ", stdout); // NOTE do NOT enclose in block because a case-label can appear inbetween if nested call:
208228 parseid()
Show on old repository browser