748bd10dd9
Fix runtime error msg
2022-02-11 16:05:05 +01:00
e5edc6b2ba
Fix UB non top-level functions
2022-02-11 13:00:41 +01:00
8b7ed96e15
Update nice_panic macro
2022-02-11 01:19:34 +01:00
67b07dfd72
Fix typo
2022-02-11 01:01:31 +01:00
742d6706b0
Array values are now pass-by-reference
2022-02-10 21:27:05 +01:00
3806a61756
Allow endless loops with no condition
2022-02-10 20:36:26 +01:00
2880ba81ab
Implement break & continue
...
- Fix return propagation inside loops
2022-02-10 13:13:15 +01:00
4e92a416ed
Improve CLI
...
- Remove unused flags
- Show more helpful error messages
2022-02-10 12:58:09 +01:00
c1bee69fa6
Simplify general program tests
2022-02-10 12:24:20 +01:00
f2331d7de9
Add general test for functions as example
2022-02-10 12:19:01 +01:00
c4d2f89d35
Fix function args
2022-02-10 12:13:30 +01:00
ab059ce18c
Add recursive fibonacci as test
2022-02-10 01:32:07 +01:00
aeedfb4ef2
Implement functions
...
- Implement function declaration and call
- Change the precalculated variable stack positions to contain the
offset from the end instead of the absolute position. This is
important for passing fun args on the stack
- Add the ability to offset the stackframes. This is used to delete the
stack where the fun args have been stored before the block executes
- Implement exit type for blocks in interpreter. This is used to get the
return values and propagate them where needed
- Add recursive fibonacci examples
2022-02-10 01:26:11 +01:00
f0c2bd8dde
Remove panics from interpreter, worse performance
...
- Replaced the interpreters panics with actual errors and results
- Added a few extra checks for arrays and div-by-zero
- These changes significantly reduced runtime performance, even without
the extra checks
2022-02-09 18:18:21 +01:00
383da4ae05
Rewrite declaration as statement instead of binop
...
- Declarations are now separate statements
- Generate unknown var errors when vars are not declared
- Replace Peekable by new custom PutBackIter type that allows for
unlimited putback and therefore look-ahead
2022-02-09 16:54:06 +01:00
7ea5f67f9c
Cleaner unop parsing
2022-02-09 14:23:24 +01:00
235eb460dc
Replace panics with errors in parser
2022-02-09 13:49:14 +01:00
2312deec5b
Small refactoring for parser
2022-02-09 01:13:22 +01:00
948d41fb45
Update lexer tests
2022-02-09 00:20:56 +01:00
fdef796440
Update token macros
2022-02-08 23:26:23 +01:00
926bdeb2dc
Refactor lexer match loop
2022-02-08 22:54:41 +01:00
726dd62794
Big token refactoring
...
- Extract keywords, literals and combo tokens into separate sub-enums
- Add a macro for quickly generating all tokens including the sub-enum
tokens. This also takes less chars to write
2022-02-08 18:56:17 +01:00
c723b1c2cb
Rename var in parser
2022-02-06 15:31:41 +01:00
cf2e5348bb
Implement arrays
2022-02-04 18:48:45 +01:00
8b67c4d59c
Implement block scopes (code inside braces)
...
- Putting code in between braces will create a new scope
2022-02-04 17:30:23 +01:00
cbf31fa513
Implement simple AST optimizer
...
- Precalculate operations only containing literals
2022-02-04 17:06:38 +01:00
22634af554
Precalculate stack positions for variables
...
- Parser calculates positions for the variables
- This removes the lookup time during runtime
- Consistent high performance
2022-02-04 14:25:25 +01:00
d4c6f3d5dc
Implement string interning
2022-02-04 14:25:23 +01:00
4dbc3adfd5
Refactor Ast to ScopedBlock
2022-02-04 14:24:03 +01:00
cbea567d65
Implement vec based scopes
...
- Replaced vartable hashmap with vec
- Use linear search in reverse to find the variables by name
- This is really fast with a small number of variables but tanks fast
with more vars due to O(n) lookup times
- Implemented scopes by dropping all elements from the vartable at the
end of a scope
2022-02-04 14:24:00 +01:00
e4977da546
Use euler examples as tests
2022-02-04 12:45:34 +01:00
588b3b5b2c
Autoformat
2022-02-03 17:38:25 +01:00
f6152670aa
Small refactor for lexer
2022-02-03 17:25:55 +01:00
f8e5bd7423
Add comments to parser
2022-02-03 16:01:33 +01:00
d7001a5c52
Refactor, Comments, Bugfix for lexer
...
- Small refactoring in the lexer
- Added some more comments to the lexer
- Fixed endless loop when encountering comment in last line
2022-02-03 00:44:48 +01:00
bc68d9fa49
Add Result + Err to lexer
2022-02-02 21:59:46 +01:00
d8f5b876ac
Implement String Literals
...
- String literals can be stored in variables, but are fully immutable
and are not compatible with any operators
2022-02-02 19:38:28 +01:00
39bd4400b4
Implement logical not
2022-02-02 19:14:11 +01:00
de0bbb8171
Implement logical and / or
2022-02-02 18:56:45 +01:00
dd9ca660cc
Move ast into separate file
2022-02-02 16:43:14 +01:00
7e2ef49481
Move token into separate file
2022-02-02 16:40:05 +01:00
c4b146c325
Refactor interpreter to use borrowed Ast
...
- Should have been like this from the start
- About 9x performance increase
2022-02-02 16:24:42 +01:00
7b6fc89fb7
Implement if
2022-02-02 16:19:46 +01:00
8c9756b6d2
Implement print keyword
2022-02-02 14:05:58 +01:00
3348b7cf6d
Implement loop keyword
...
- Loop is a combination of `while` and `for`
- `loop cond { }` acts exactly like `while`
- `loop cond; advance { }` acts like `for` without init
2022-01-31 16:58:46 +01:00
3098dc7e0a
Implement simple CLI
...
- Implement running files
- Implement interactive mode
- Enable printing tokens & ast with flags
2022-01-31 16:24:25 +01:00
e0c00019ff
Implement line comments
2022-01-29 23:29:09 +01:00
35fbae8ab9
Implement multi statement code
...
- Add statements
- Add mandatory semicolons after statements
2022-01-29 23:18:15 +01:00
23d336d63e
Implement variables
...
- Assignment
- Declaration
- Identifier lexing
2022-01-29 22:49:15 +01:00
39351e1131
Slightly refactor lexer
2022-01-29 21:59:48 +01:00