Commit graph

88 commits

Author SHA1 Message Date
036e76d3a5 fix for latest zig 2019-06-30 00:01:03 -03:00
d7b78e09e3 finish impl for local vars 2019-06-03 16:24:54 -03:00
26d299cd23 add local/global "switch" 2019-06-03 16:10:49 -03:00
5138410be4 compiler: add scope support 2019-06-03 15:17:07 -03:00
25ee586acb compiler: add local scope basics 2019-06-03 15:10:12 -03:00
69dda36d16 add SetGlobal/SetGlobalLong opcodes
- main: split compile/runtime error messages
2019-06-03 01:41:22 -03:00
9f45dea2c0 vm: remove uneeded hack 2019-06-03 00:58:44 -03:00
8bc220d2f8 chunk: split writing side-effects into own function
split writeConstant() into that and writeConstantRaw() for the places
where we don't want OP_CONSTANT written as well.

this caused a bug where doing `"some const string" + x` would cause an
unecessary OP_CONSTANT to be added for the x variable and would cause
the wrong result to be given.

 - main: reset stack on repl tick (?)
2019-06-03 00:55:50 -03:00
922f3c530c chunk: fix disasm on the new const-load op codes 2019-06-03 00:07:11 -03:00
3936b4a426 main: keep a long-running vm instance for REPL
enables us to declare variables and keep them going for as long as the
REPL goes.

 - vm: remove source arg from init(), move to interpret()
2019-06-03 00:02:07 -03:00
005981fbbd vm: add getglobal support 2019-06-02 23:57:28 -03:00
887cb1adea add emitting of GetGlobal/GetGlobalLong 2019-06-02 23:43:12 -03:00
e3ac28d84e vm: deinit globals on vm deinit 2019-06-02 23:13:42 -03:00
3a6df2d9ea add basic global variable support
- chunk: make writeConstant return a ConstantIndex for better
    integration with the (optional) OP_CONST_LONG
 - compiler: quickfix emitConstant()
 - vm: add a global ValueMap
2019-06-02 22:52:19 -03:00
aa94396e51 compiler: add nicer error handling
- vm: fix pop opcode handler
2019-06-02 18:11:23 -03:00
06df2d37ee add expression statements 2019-06-02 18:04:36 -03:00
bea6e34365 add print statement
- remove opcode return's use as debug
2019-06-02 17:28:54 -03:00
3f2a8f3801 add object list cleaning on VM.deinit 2019-06-02 15:39:04 -03:00
cf53b6fc86 add basics of virtual machine object list
- object: move functions to accept VM pointer, not Allocator
2019-06-02 14:52:19 -03:00
38715af200 vm: add string concatenation
- compiler: fix string creation
2019-06-02 14:18:01 -03:00
9ac5fccc2b add objects and string comparison 2019-06-02 14:01:54 -03:00
44c27f43b7 move new_scanner.zig to scanner.zig 2019-06-02 13:17:32 -03:00
71dba5c77d vm: add greater and less 2019-06-02 00:23:50 -03:00
15c58a2216 comparison operators, part 1 2019-06-02 00:16:33 -03:00
39e28f01ac chunk: add printing of OP_NOT 2019-06-02 00:03:54 -03:00
c5d704a34f add not operator 2019-06-02 00:02:37 -03:00
1d774c6011 add support for nil, true and false literal values 2019-06-01 23:44:59 -03:00
ec652b29d9 remove print debug 2019-06-01 23:35:13 -03:00
589413488c move towards dynamically typed values
- remove InterpretResult as an enum, replace by error.
 - scanner: fix peekNext()
 - vm: add runtime errors, add VM.peek()
2019-06-01 23:33:53 -03:00
0f8e19adf1 compiler: finish parser (for math expressions) 2019-06-01 21:32:25 -03:00
230fef20b5 add other bytecode emitters 2019-06-01 20:48:26 -03:00
2736bee8d8 scanner: remove debug print 2019-06-01 20:34:09 -03:00
e1d0e3ec0b add basic compiler code 2019-06-01 20:33:43 -03:00
7d7aabbdd7 scanner: add keyword handling (copied off the old scanner)
as with most things, lol
2019-06-01 17:20:50 -03:00
d62c58a195 scanner: add identifiers 2019-06-01 17:15:35 -03:00
566d8313f3 add number tokens 2019-06-01 17:13:50 -03:00
9d1d253c94 scanner: fix peekNext 2019-06-01 17:12:00 -03:00
27b04e1612 scanner: add basic error handling, strings, comments 2019-06-01 17:07:22 -03:00
f4f1fe1fbc scanner: add whitespace handling 2019-06-01 16:54:15 -03:00
2c7cf356b3 scanner: add basic tokens and matched-tokens 2019-06-01 16:51:02 -03:00
6b9cc575d9 add draft scanner, remove messy Token union, replace by struct 2019-06-01 16:37:24 -03:00
63045e4df5 add src/new_scanner.zig 2019-06-01 16:21:36 -03:00
b80cd52c50 main: readd runPrompt and runFile
- main: make run() use the VM struct instance
2019-06-01 16:17:28 -03:00
a9dca436bd remove chunk running code, add draft compiler struct 2019-06-01 16:12:39 -03:00
088674bf0b vm: add dynamically-sized growing stack 2019-06-01 15:45:30 -03:00
3377d1675c vm, chunk: add binary operators 2019-06-01 15:40:18 -03:00
2822676707 vm: add negate opcode 2019-06-01 15:27:19 -03:00
61e463713c vm: add stack 2019-06-01 15:23:23 -03:00
456bc95138 vm: add debug flags 2019-06-01 15:01:39 -03:00
dae3c259fd add basic virtual machine code 2019-06-01 14:55:11 -03:00