• R/O
  • SSH
  • HTTPS

jpl: コミット


コミットメタ情報

リビジョン614 (tree)
日時2019-04-20 05:19:54
作者jakobthomsen

ログメッセージ

fix list typing: use lists of structs

変更サマリ

差分

--- trunk/experimental_memfix/compiler.source.c (revision 613)
+++ trunk/experimental_memfix/compiler.source.c (revision 614)
@@ -1,5 +1,5 @@
11 // JPL - Jakob's Programming Language (working title). Written 2019 by Jakob Thomsen.
2-memory = 138 2048
2+memory = 138 8192
33 dummy() {}
44 // A self-hosting jpl-to-c compiler, (c) 2019 by Jakob Thomsen
55 // (mailto: JakobThomsen@gmx.net)
@@ -1437,60 +1437,45 @@
14371437
14381438 struct block(u64 blockid, u64 remainsize, u64 postaddr, u64 preaddr, list<varentry> varlist) 11
14391439
1440-blockpush(list blocklist, u64 blockid, u64 remainsize, u64 postaddr, u64 preaddr, list<varentry> varlist) 17
1440+blockpush(list<block> blocklist, u64 blockid, u64 remainsize, u64 postaddr, u64 preaddr, list<varentry> varlist) 17
14411441 {
1442- {
1443- //`fprintf(stderr, "BLOCKOPEN: store varlist addr %llu\n", (unsigned long long)memory[memory[state.stackbase + 5]]);`
1444- push_move(blocklist, varlist)
1445- }
1446- push(blocklist, preaddr)
1447- push(blocklist, postaddr)
1448- push(blocklist, remainsize)
1449- push(blocklist, blockid)
14501442 let u64 dummyval = 0
14511443 let list<varentry> dummylist = 0
14521444 ==8==
14531445 let block b = 0
14541446 ==9==
1455- block(b, dummyval, dummyval, dummyval, dummyval, dummylist)
1456- //b.0 = blockid
1457- //b.1 = remainsize
1458- //b.2 = postaddr
1459- //b.3 = preaddr
1460- //b.4 = varlist
1461- //`
1462- //*tree_elem_ref(heap, 5/*blocksize*/, &memory[state.stackbase + 8], 4/*varlist-idx*/) = memory[memory[state.stackbase + 5]];
1463- //memory[memory[state.stackbase + 5]] = 0; // MOVE varlist
1464- //`
1465- //push_move(blocklist, b)
1466- //block(b, dummyval, dummyval, dummyval, dummyval, dummylist) // DUMMY
1447+ block(b, blockid, remainsize, postaddr, preaddr, varlist)
1448+ // HACK: restore moved values
1449+ blockid = b.0
1450+ remainsize = b.1
1451+ postaddr = b.2
1452+ preaddr = b.3
1453+ //varlist = b.4 // moving varlist OK
1454+
1455+ push_move(blocklist, b)
1456+ block(b, dummyval, dummyval, dummyval, dummyval, dummylist) // DUMMY
14671457 }
14681458
1469-blockpop(list blocklist, u64 blockid, u64 remainsize, u64 postaddr, u64 preaddr, list<varentry> varlist) 8
1459+blockpop(list<block> blocklist, u64 blockid, u64 remainsize, u64 postaddr, u64 preaddr, list<varentry> varlist) 15
14701460 {
1471- pop(blocklist, blockid)
1472- pop(blocklist, remainsize)
1473- pop(blocklist, postaddr)
1474- pop(blocklist, preaddr)
1475- pop_move(varlist, blocklist) // restore previous local varlist
14761461 ==6==
1477- //let block b = 0
1478-//==7==
1479- //pop_move(b, blocklist)
1480- //blockid = b.0
1481- //remainsize = b.1
1482- //postaddr = b.2
1483- //preaddr = b.3
1462+ let block b = 0
1463+==7==
1464+ pop_move(b, blocklist)
1465+ blockid = b.0
1466+ remainsize = b.1
1467+ postaddr = b.2
1468+ preaddr = b.3
14841469 //varlist = b.4 // restore previous local varlist
1485- //`
1486- //memory[state.stackbase + 6] = *tree_elem_ref(heap, 5/*blocksize*/, &memory[memory[state.stackbase + 5]], 4/*varlist-idx*/);
1487- //*tree_elem_ref(heap, 5/*blocksize*/, &memory[memory[state.stackbase + 5]], 4/*varlist-idx*/) = 0; // MOVE
1488- //`
1470+ `
1471+ memory[memory[state.stackbase + 5]] = *tree_elem_ref(heap, 5/*blocksize*/, &memory[state.stackbase + 6], 4/*varlist-idx*/);
1472+ *tree_elem_ref(heap, 5/*blocksize*/, &memory[state.stackbase + 6], 4/*varlist-idx*/) = 0; // MOVE
1473+ `
14891474 }
14901475
1491-blockopen(u64 tmpaddr, list blocklist, u64 remainsize, list<varentry> varlist) 28
1492-{ // 0: tmpaddr, 1: blocklist, 2: remain_size, 3: local varlist
1493-==4== // 0 constant
1476+blockopen(u64 tmpaddr, list<block> blocklist, u64 remainsize, list<varentry> varlist) 28
1477+{
1478+==4==
14941479 let u64 blocktype = 0
14951480 ==5==
14961481 let u64 preaddr = 0
@@ -1504,7 +1489,7 @@
15041489 emitenter(preaddr)
15051490 }
15061491
1507-blockclose(u64 tmpaddr, list fndefs, u64 info, list blocklist, u64 remainsize, list<varentry> varlist, u64 defargcnt, u64 defbodysz) 78
1492+blockclose(u64 tmpaddr, list fndefs, u64 info, list<block> blocklist, u64 remainsize, list<varentry> varlist, u64 defargcnt, u64 defbodysz) 78
15081493 {
15091494 ==8==
15101495 when varlist
@@ -1624,7 +1609,7 @@
16241609 }
16251610 }
16261611
1627-findvarref(list blocklist, list<varentry> varlist, u64 id, u64 idx, u64 indirect, type type)
1612+findvarref(list<block> blocklist, list<varentry> varlist, u64 id, u64 idx, u64 indirect, type type)
16281613 {
16291614 `
16301615 memory[memory[state.stackbase + 3]] = ~0; // default: invalid index
@@ -1648,15 +1633,8 @@
16481633
16491634 if(blocklist && memory[memory[state.stackbase + 3]] == ~0)
16501635 {
1651- blocklist = heap[blocklist].elem0; // skip blocktype
1652- blocklist = heap[blocklist].elem0; // skip remain_size
1653- blocklist = heap[blocklist].elem0; // skip postaddr
1654- blocklist = heap[blocklist].elem0; // skip preaddr
1655- current = heap[blocklist].elem1; // varlist
1656- blocklist = heap[blocklist].elem0; // skip varlist
1657-
1658- //current = *tree_elem_ref(heap, 5/*blocksize*/, &heap[blocklist].elem1, 4/*varlist-idx*/);
1659- //blocklist = heap[blocklist].elem0; // skip block
1636+ current = *tree_elem_ref(heap, 5/*blocksize*/, &heap[blocklist].elem1, 4/*varlist-idx*/);
1637+ blocklist = heap[blocklist].elem0; // skip block
16601638 }
16611639 else
16621640 {
@@ -1675,7 +1653,7 @@
16751653 `
16761654 }
16771655
1678-PROCVARREF(list fndefs, list blocklist, list<varentry> varlist, type type, u64 id, u64 indirect, u64 unwrap) 22
1656+PROCVARREF(list fndefs, list<block> blocklist, list<varentry> varlist, type type, u64 id, u64 indirect, u64 unwrap) 22
16791657 {
16801658 ==7==
16811659 print("/*") printid(id) print("*/")
@@ -1824,7 +1802,7 @@
18241802 }
18251803 }
18261804
1827-procvarref(list fndefs, list blocklist, list<varentry> varlist, u64 indirect, type type) 33
1805+procvarref(list fndefs, list<block> blocklist, list<varentry> varlist, u64 indirect, type type) 33
18281806 {
18291807 ==5==
18301808 let u64 id = 0
@@ -1967,7 +1945,7 @@
19671945 match(")")
19681946 }
19691947
1970-prconinput(u64 tmpaddr, list blocklist, u64 remainsize, u64 id, list<varentry> varlist) 27
1948+prconinput(u64 tmpaddr, list<block> blocklist, u64 remainsize, u64 id, list<varentry> varlist) 27
19711949 {
19721950 ==5==
19731951 let u64 preaddr = 0
@@ -2030,7 +2008,7 @@
20302008 match("{")
20312009 }
20322010
2033-pcountdown(u64 tmpaddr, list blocklist, u64 remainsize, u64 id, list<varentry> varlist) 27
2011+pcountdown(u64 tmpaddr, list<block> blocklist, u64 remainsize, u64 id, list<varentry> varlist) 27
20342012 {
20352013 ==5==
20362014 let u64 preaddr = 0
@@ -2096,7 +2074,7 @@
20962074 varentry(entry, maintype, maintype, maintype, maintype, maintype) // DUMMY
20972075 }
20982076
2099-prcconsume(u64 tmpaddr, list blocklist, u64 info, list<varentry> varlist, u64 defargcnt, u64 defbodysz, u64 remainsize) 34
2077+prcconsume(u64 tmpaddr, list<block> blocklist, u64 info, list<varentry> varlist, u64 defargcnt, u64 defbodysz, u64 remainsize) 34
21002078 {
21012079 ==7==
21022080 let u64 preaddr = 0
@@ -2158,7 +2136,7 @@
21582136 match("{")
21592137 }
21602138
2161-prcforeach(u64 tmpaddr, list blocklist, u64 info, list<varentry> varlist, u64 defargcnt, u64 defbodysz, u64 remainsize) 36
2139+prcforeach(u64 tmpaddr, list<block> blocklist, u64 info, list<varentry> varlist, u64 defargcnt, u64 defbodysz, u64 remainsize) 36
21622140 {
21632141 ==7==
21642142 let u64 preaddr = 0
@@ -2227,7 +2205,7 @@
22272205 match("{")
22282206 }
22292207
2230-procwhen(u64 tmpaddr, list fndefs, list blocklist, u64 remainsize, u64 id, list<varentry> varlist) 44
2208+procwhen(u64 tmpaddr, list fndefs, list<block> blocklist, u64 remainsize, u64 id, list<varentry> varlist) 44
22312209 {
22322210 ==6==
22332211 let u64 preaddr = 0
@@ -2359,7 +2337,7 @@
23592337 }
23602338 }
23612339
2362-procaccess(u64 tmpaddr, list fndefs, list blocklist, list<varentry> varlist, u64 defargcnt, u64 defbodysz, u64 remainsize) 38
2340+procaccess(u64 tmpaddr, list fndefs, list<block> blocklist, list<varentry> varlist, u64 defargcnt, u64 defbodysz, u64 remainsize) 38
23632341 {
23642342 ==7==
23652343 let u64 blockid = 657807020572803072 // "if" - continue as if normal if-then-else
@@ -2432,7 +2410,7 @@
24322410 match("{")
24332411 }
24342412
2435-procassign(list fndefs, list blocklist, list<varentry> varlist, u64 id) 46
2413+procassign(list fndefs, list<block> blocklist, list<varentry> varlist, u64 id) 46
24362414 {
24372415 ==4==
24382416 let u64 buf = 0 // no unwrap
@@ -2508,7 +2486,7 @@
25082486 }
25092487 }
25102488
2511-proclet(list fndefs, list blocklist, list<varentry> varlist, u64 def_id, u64 id, type typedst, u64 varidx, u64 defargcnt, u64 defbodysz, u64 remainsize) 46
2489+proclet(list fndefs, list<block> blocklist, list<varentry> varlist, u64 def_id, u64 id, type typedst, u64 varidx, u64 defargcnt, u64 defbodysz, u64 remainsize) 46
25122490 {
25132491 ==10==
25142492 let u64 buf = 1
@@ -2571,7 +2549,7 @@
25712549 print(";\n")
25722550 }
25732551
2574-procdyn(list fndefs, list blocklist, list<varentry> varlist, u64 def_id, u64 id, u64 defargcnt, u64 defbodysz, u64 remainsize) 61
2552+procdyn(list fndefs, list<block> blocklist, list<varentry> varlist, u64 def_id, u64 id, u64 defargcnt, u64 defbodysz, u64 remainsize) 61
25752553 {
25762554 let u64 varidx = 0
25772555 let type dyntype = 0
@@ -2594,7 +2572,7 @@
25942572 pushvarref(varlist, id, varidx, indirect, dyntype)
25952573 }
25962574
2597-procsize(list fndefs, list blocklist, list<varentry> varlist) 43
2575+procsize(list fndefs, list<block> blocklist, list<varentry> varlist) 43
25982576 {
25992577 ==3==
26002578 let u64 indirect = 0
@@ -2629,7 +2607,7 @@
26292607 match(")")
26302608 }
26312609
2632-procpushmv(list fndefs, list blocklist, list<varentry> varlist) 44
2610+procpushmv(list fndefs, list<block> blocklist, list<varentry> varlist) 44
26332611 {
26342612 skipws()
26352613 match("(")
@@ -2670,7 +2648,7 @@
26702648 match(")")
26712649 }
26722650
2673-procpopmv(list fndefs, list blocklist, list<varentry> varlist) 43
2651+procpopmv(list fndefs, list<block> blocklist, list<varentry> varlist) 43
26742652 { // NOTE: arguments REVERSED: pop(elem, list) !!!
26752653 ==3==
26762654 let u64 indirect = 0
@@ -2706,7 +2684,7 @@
27062684 match(")")
27072685 }
27082686
2709-procpush(list fndefs, list blocklist, list<varentry> varlist) 44
2687+procpush(list fndefs, list<block> blocklist, list<varentry> varlist) 44
27102688 {
27112689 skipws()
27122690 match("(")
@@ -2768,7 +2746,7 @@
27682746 print(");\n")
27692747 }
27702748
2771-procpop(list fndefs, list blocklist, list<varentry> varlist) 44
2749+procpop(list fndefs, list<block> blocklist, list<varentry> varlist) 44
27722750 {
27732751 ==3==
27742752 let u64 indirect = 0
@@ -2823,7 +2801,7 @@
28232801 match(")")
28242802 }
28252803
2826-procfree(list fndefs, list blocklist, list<varentry> varlist) 42
2804+procfree(list fndefs, list<block> blocklist, list<varentry> varlist) 42
28272805 {
28282806 ==3==
28292807 let u64 indirect = 0
@@ -2840,7 +2818,7 @@
28402818 match(")")
28412819 }
28422820
2843-proccall(u64 tmpaddr, list fndefs, list scopelist, u64 id, list<varentry> varlist, u64 def_id, u64 defargcnt, u64 defbodysz, u64 remainsize) 43
2821+proccall(u64 tmpaddr, list fndefs, list<block> scopelist, u64 id, list<varentry> varlist, u64 def_id, u64 defargcnt, u64 defbodysz, u64 remainsize) 43
28442822 {
28452823 ==9==
28462824 let u64 callee_id = 0
@@ -2929,7 +2907,7 @@
29292907 calleeargs = 0 // clear REFERENCE to keep list alive in fndefs
29302908 }
29312909
2932-parsedef(u64 tmpaddr, list fndefs, list scopelist, u64 c, list<varentry> varlist, u64 def_id, list defpars, u64 defbodysz, u64 remainsize, u64 in_c_code) 93
2910+parsedef(u64 tmpaddr, list fndefs, list<block> scopelist, u64 c, list<varentry> varlist, u64 def_id, list defpars, u64 defbodysz, u64 remainsize, u64 in_c_code) 93
29332911 {
29342912 ==10==
29352913 let u64 resultnow = 0
@@ -3361,7 +3339,7 @@
33613339 push(fndefs, def_id)) // fndefs def_id
33623340 }
33633341
3364-parsedefs(u64 tmpaddr, list fndefs, list scopelist, u64 c) 113
3342+parsedefs(u64 tmpaddr, list fndefs, list<block> scopelist, u64 c) 113
33653343 {
33663344 ==4== // isalpha?
33673345 let u64 buf = 0
@@ -3504,7 +3482,7 @@
35043482 }
35053483 }
35063484
3507-parseprog(u64 tmpaddr, list fndefs, list scopelist) 124
3485+parseprog(u64 tmpaddr, list fndefs, list<block> scopelist) 124
35083486 {
35093487 { // TEST
35103488 let list destr_pars = 0
@@ -3532,10 +3510,10 @@
35323510 ==7==
35333511 let u64 peek = 0
35343512 ==8==
3535- equ(result0 sym lookahead) // lookahead == '/'
3513+ equ(result0, sym, lookahead) // lookahead == '/'
35363514 peekchar(peek) // peek-char
3537- equ(result1 sym peek) // peek() == '/'
3538- and(result0 result0 result1) // lookahead == '/' && peek() == '/'
3515+ equ(result1, sym, peek) // peek() == '/'
3516+ and(result0, result0, result1) // lookahead == '/' && peek() == '/'
35393517 if result0
35403518 {
35413519 comment(lookahead)
@@ -3542,7 +3520,7 @@
35423520 }
35433521 else
35443522 {
3545- parsedefs(tmpaddr fndefs scopelist lookahead)
3523+ parsedefs(tmpaddr, fndefs, scopelist, lookahead)
35463524 }
35473525 }
35483526 }
@@ -3633,7 +3611,7 @@
36333611 print(" {\n")
36343612 builtins(tmpaddr)
36353613 ==5==
3636- let list blocklist = 0
3614+ let list<block> blocklist = 0
36373615 ==6==
36383616 parseprog(tmpaddr, fndefs, blocklist)
36393617 print(" default:\n")
旧リポジトリブラウザで表示