blob: e4a2cec3cfa46e755d18fb215c931fe5b1524558 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
<
{ assembler -01 . } ":" deff
{ assemblerLibrary -01 . } "::" deff
assembler .|label "@" deff
"%" _ : -01 deff
<
[ /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 ] ==digits
{ 0 ==result
{ "(.)(.*)" regex } {
{ eq }_ digits -01 index result 10 mul add =result
} loop
result
}
> -- /base10decode deff
{ .value base10decode ==v
v 4294967296 lt {
[
# load value
v /rdx :movqImmReg
63 /rdx :btsqImm8Reg
/rdx :pushqReg
] :execute
} {
[
# allocate int
::internalAllocateInteger /rax :movqImmReg
/rax :callqReg
# push int address on program stack
/rax :pushqReg
# type zero does not need to be changed
# load value
8 /rax :addqImm8Reg
v /rdx :movqImmReg
/rdx /rax :movqRegMem
] :execute
} ? *
} /TOKINT
{ .value ::constStringCode :execute } /TOKSTR
{ .value ::constStringCode
[
global .internalExecuteIdentifier /rax :movqImmReg
/rax :callqReg
] cat :execute
} /TOKID
{ "floats not supported during initial compilation stage" die } /TOKFLOAT
> -- 4 |defv rep
{ /input defv
"" {
4096 input .read cat
_ "" eq not
} {
{ _ "([^\\n]*)\\n(.*)" regex } { -102 -- TOKFLOAT TOKINT TOKSTR TOKID elymas .tokenize {
_ .handle
# assemblerLibrary .stackDump
# assemblerLibrary .globalScopeDump
} each } loop
} loop --
} /executeFile deff
# vim: syn=elymas
|