Alex Bethel
0b0a8942de
Remove latent debug println
for BFF input
2021-07-22 22:11:55 -05:00
Alex Bethel
821eeae322
Silently fail when calling a non-function
...
The most cursed possible way to deal with this error.
2021-07-16 19:02:51 -05:00
Alex Bethel
d3242484fc
Make integer coercion infallible
2021-07-16 18:56:45 -05:00
Alex Bethel
141220fb38
Fix function call type error message
2021-07-15 14:24:07 -05:00
Alex Bethel
3d9f847862
Make consts accessible from AbleScript code
2021-07-13 14:22:06 -05:00
Alex Bethel
1e8314b1a1
Merge branch 'feature/read'
2021-06-19 17:34:19 -05:00
Alex Bethel
c1cc54be75
Merge 'feature/forty-two' into master
2021-06-19 17:32:12 -05:00
Alex Bethel
eee173060c
Implement read
semantics in interpreter
...
Also added a test file `iotest.able` to just read data and print
it (the `cat` of AbleScript I guess).
2021-06-18 16:05:50 -05:00
Erin
3edbca51d5
Implemented read in Parser
2021-06-18 20:28:53 +02:00
Alex Bethel
4011997e60
Clippy conformance
2021-06-16 10:35:06 -05:00
Alex Bethel
9965d97713
Fix ignored unit tests in interpret.rs
2021-06-15 11:46:01 -05:00
Alex Bethel
d1064802ec
Fix unit tests
2021-06-15 11:29:52 -05:00
Alex Bethel
8aa6fc502a
rustfmt
: whoops, let's put a semicolon there
...
maybe I should have actually looked at what rustfmt produced before I
just blindly accepted it and pushed it onto master.
2021-06-15 10:26:44 -05:00
Alex Bethel
7bf3cc6f5d
rustfmt
: break long line
2021-06-15 10:24:50 -05:00
Alex Bethel
ae0955209c
Use pass-by-reference for variables, pass-by-value for expressions
2021-06-15 09:51:00 -05:00
Alex Bethel
66d4f4f82d
Implement most of pass-by-reference
...
We need some parser changes to make it work fully: function arguments
are now identifiers rather than expressions.
2021-06-15 09:51:00 -05:00
Alex Bethel
75938f27c0
Implement functio
declaration & calling
2021-06-15 09:51:00 -05:00
HTG-YT
aa72945010
comply with the move of rickroll
2021-06-14 20:53:27 +08:00
HTG-YT
b526d5c575
move rickroll
content into a file
2021-06-14 09:42:23 +08:00
HTG-YT
fa0d3968f5
Update interpret.rs
2021-06-13 13:22:30 +08:00
HTG-YT
3646c5e32e
handle StmtKind::Rickroll
2021-06-13 13:22:01 +08:00
Alex Bethel
da9ff64486
Make arithmetic errors evaluate to 42
2021-06-12 10:48:44 -05:00
Alex Bethel
976518a251
Reimplement BF function declaration semantics
2021-06-12 09:26:21 -05:00
Erin
711ad27e00
Basic BfFunctio support
2021-06-11 17:52:47 +02:00
Alex Bethel
41316f5696
Re-enable assignment semantics
2021-06-11 10:05:48 -05:00
Erin
6f16d2594b
Added variable assignment to parser
...
- Fixed parse error, that `rlyeh` returned HopBack
2021-06-11 16:59:40 +02:00
Alex Bethel
7d7c1e4a1b
Fix interpreter variable persistence bug
2021-06-08 19:21:33 -05:00
Alex Bethel
ce20611c07
Fix all 0..0 span placeholders in interpret.rs
2021-06-07 19:57:44 -05:00
Alex Bethel
d8f462e0b5
Fix unit tests
2021-06-07 17:35:49 -05:00
Alex Bethel
addda8fc87
Remove giant comment block left in by mistake
2021-06-07 16:28:27 -05:00
Alex Bethel
426aee6a2b
Repair interpreter after parser changes
2021-06-07 16:20:20 -05:00
Erin
902d8b914c
Unified span terminology
...
- Add more derivations, because it's required by another parts of project
2021-06-07 22:21:21 +02:00
Alex Bethel
528de718dc
Clean up eval_expr
some more
...
I keep going back and forth on how I want this block to look :P
Anyway, this is *probably* its final-ish form, until the parser gets
re-written.
2021-06-02 18:41:20 -05:00
Alex Bethel
ce02aebd91
Use impl Value
rather than trait BfWriter
...
It probably makes more sense to be writing values with
`Value::bf_write` than to go for the complexity of using a trait to
allow `Writer::write_value` (which also looks ambiguous because it's
not immediately clear that a generic name like "write_value" relates
to BF or AbleScript).
2021-06-02 18:20:30 -05:00
Alex Bethel
326d0511e7
Add Brainfuck functio interpretation
...
BF functios can now be declared and called from AbleScript code.
Function parameters supplied from AbleScript are serialized manually
into byte sequences using the `BfWriter` trait, and are available from
BF code using the input operator, `,`.
At the moment, BF functios simply write output to stdout, and are
therefore incapable of communicating results to the rest of the
program; this might change in the future if we can get something close
to pass-by-reference working.
2021-06-02 15:29:31 -05:00
Alex Bethel
07195d4cf6
Fix panic on arithmetic error
...
Divide by zero and add, subtract, or multiply with overflow are all
caught now and reported as an ArithmeticError, rather than causing the
interpreter to panic.
2021-05-30 13:32:29 -05:00
Alex Bethel
acfd81ead2
More thorough unit tests
2021-05-30 13:32:29 -05:00
Alex Bethel
344a11084e
Add some unit tests to interpret.rs
...
Currently `overflow_should_not_panic` and `variable_persistence` both
fail due to bugs in the interpreter.
2021-05-30 13:32:29 -05:00
Alex Bethel
585bf2e19f
Use single-letter identifiers as base-55 digits
2021-05-29 10:45:39 -05:00
Alex Bethel
c906366e3f
Improve name & documentation accuracy
...
Renamed ControlFlow -> HaltStatus because that's what the enum really
is -- a status on why something halted. Also reviewed `interpret.rs`'s
documentation and fixed a few things that were out of date.
2021-05-25 21:55:02 -05:00
Alexander Bethel
ec81ead3ea
Implement break
and hopback
statements
2021-05-25 21:22:38 -05:00
Alexander Bethel
669f379700
Better abstractions, implement scoping rules
2021-05-25 13:26:01 -05:00
Alexander Bethel
109c77eeb2
Implement more statements
...
Added variable declaration, `if` statements, `loop` statements,
variable assignment, and variable banning to go along with
printing (which was already implemented). We still need function
declarations, brainfuck declarations, function calls, and the control
flow operators "break" and "hopback".
2021-05-24 10:50:26 -05:00
Alexander Bethel
eccc00ff81
Implement basic interpreter
...
Added code for interpreting parsed AbleScript expressions and
statements, and hooked it up to the REPL.
2021-05-20 18:18:01 -05:00