aboutsummaryrefslogtreecommitdiff
path: root/compiler/elymasLexer.ey
blob: 1ca264b99de344a30d2d23230459bf8d519e1333 (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
<
  { assembler -01 . } ":" deff
  { assemblerLibrary -01 . } "::" deff
  assembler .|label "@" deff
  "%" _ : -01 deff

  { .value elymas .base10decode ==v
    [
      # 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
> -- 3 |defv rep

{ /input defv
  "" {
    4096 input .readstr cat
    _ "" streq not
  } {
    { _ "([^\\n]*)\\n(.*)" regex } { -102 -- TOKINT TOKSTR TOKID elymas .tokenize {
      _ .handle
      # assemblerLibrary .stackDump
      # assemblerLibrary .globalScopeDump
    } each } loop
  } loop --
} /executeFile deff

# vim: syn=elymas