Mercurial > repos > tabletprog
comparison modules/llcompile.tp @ 361:06dceff348ea
llcompile now has Hacky support for calling C functions using dl to lookup symbols and almost has support string constants
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 23 Apr 2015 19:24:20 -0700 |
parents | 0b83f15e819d |
children |
comparison
equal
deleted
inserted
replaced
360:0b83f15e819d | 361:06dceff348ea |
---|---|
22 _notError: vals ifnoterr else: :e { e } | 22 _notError: vals ifnoterr else: :e { e } |
23 } | 23 } |
24 | 24 |
25 _ilFun <- :_name { | 25 _ilFun <- :_name { |
26 _buff <- #[] | 26 _buff <- #[] |
27 _data <- #[] | |
27 _blockStack <- [] | 28 _blockStack <- [] |
29 _labelDefs <- dict hash | |
28 _nextReg <- 0 | 30 _nextReg <- 0 |
29 #{ | 31 #{ |
30 name <- { _name } | 32 name <- { _name } |
31 add <- :inst { _buff append: inst } | 33 add <- :inst { _buff append: inst } |
34 addData <- :data { | |
35 lbl <- il label | |
36 dataPos <- _data length | |
37 _labelDefs set: dataPos lbl | |
38 _data append: data | |
39 lbl reference | |
40 } | |
32 getReg <- { | 41 getReg <- { |
33 r <- il reg: _nextReg | 42 r <- il reg: _nextReg |
34 _nextReg <- _nextReg + 1 | 43 _nextReg <- _nextReg + 1 |
35 r | 44 r |
36 } | 45 } |
43 _buff <- _blockStack value | 52 _buff <- _blockStack value |
44 _blockStack <- _blockStack tail | 53 _blockStack <- _blockStack tail |
45 res | 54 res |
46 } | 55 } |
47 buffer <- { _buff } | 56 buffer <- { _buff } |
57 finalize <- { | |
58 foreach: _data :idx data { | |
59 _buff append: (_labelDefs get: idx else: { false }) | |
60 _buff append: (il data: data) | |
61 } | |
62 } | |
48 } | 63 } |
49 } | 64 } |
50 | 65 |
51 _sizeMap <- dict hash | 66 _sizeMap <- dict hash |
52 _sizeMap set: "8" (il b) | 67 _sizeMap set: "8" (il b) |
157 } | 172 } |
158 } | 173 } |
159 } | 174 } |
160 } | 175 } |
161 _compileString <- :expr syms ilf assignTo { | 176 _compileString <- :expr syms ilf assignTo { |
162 | 177 lbl <- ilf addData: (expr val) |
178 v <- assignTo value: :asn { | |
179 asn | |
180 } none: { | |
181 lbl | |
182 } | |
183 #{ | |
184 val <- v | |
185 //TODO: Asbstract pointer size | |
186 size <- il q | |
187 signed? <- false | |
188 } | |
163 } | 189 } |
164 _compileInt <- :expr syms ilf assignTo { | 190 _compileInt <- :expr syms ilf assignTo { |
165 sz <- il sizeFromBytes: (expr size) | 191 sz <- il sizeFromBytes: (expr size) |
166 assignTo value: :asn { | 192 assignTo value: :asn { |
167 ilf add: (il mov: (expr val) (asn val) sz) | 193 ilf add: (il mov: (expr val) (asn val) sz) |
439 last value: :v { | 465 last value: :v { |
440 ilf add: (il return: (v val) (v size)) | 466 ilf add: (il return: (v val) (v size)) |
441 } none: { | 467 } none: { |
442 ilf add: (il return: 0 (il l)) | 468 ilf add: (il return: 0 (il l)) |
443 } | 469 } |
470 ilf finalize | |
444 ilf | 471 ilf |
445 } else: { | 472 } else: { |
446 argErrors | 473 argErrors |
447 } | 474 } |
448 } | 475 } |