1af25457d5
AST - Refactored function declarations as a separate struct
2023-01-07 12:18:18 +01:00
6252bed605
Happy clippy is happy (and Clippy)
2023-01-07 11:59:32 +01:00
8741692fad
Resolver - Store declaration tokens as references
2023-01-07 11:55:41 +01:00
34991d4b4b
Resolver - Report an error if a symbol isn't used
2023-01-07 11:41:04 +01:00
670b50e8cd
Scanner - Allow identifiers with a leading '_'
2023-01-07 11:39:19 +01:00
4bce85e14b
Resolver - Errors on undefined symbols
2023-01-07 11:10:24 +01:00
06917ca2d6
Resolver - Split resolve_local() into specific methods
2023-01-07 11:06:22 +01:00
24d9d6d880
Resolver - Handle the global namespace as well
2023-01-07 10:58:02 +01:00
c971df6f60
Resolver - Refactored declare()
2023-01-07 10:53:05 +01:00
8d65c288a3
Resolver - Refactored entering/exiting scopes
2023-01-07 10:51:34 +01:00
6dceae73a0
Resolver - Additional checks
...
* Ensure all locals are defined before they are used.
* Prevent functions declared using fun from being assigned to.
* Mark locals as used when they are accessed.
2023-01-07 10:17:08 +01:00
a89be8632c
Missed a rename in previous commit
2023-01-07 09:17:02 +01:00
95ddd34f9c
Interpreter - Renamed resolved variables field
2023-01-07 09:01:24 +01:00
363cdab86f
Interpreter - Fixed closures
...
* Environment for function execution is now based on their
declaration.
* I had missed that part while skimming over the book.
2023-01-07 08:59:13 +01:00
ec70ded29e
Fixed variable lookups and assignments
2023-01-07 08:48:21 +01:00
3117dfeac5
Interpreter - Lookups and assignment based on resolver results
...
* Does not work. Using pointers was a bad idea.
2023-01-07 08:24:27 +01:00
bd156e619f
Trying to implement variable lookup and failing hard
...
* I'll probably have to rewrite environments as a Vec<HashMap> to make
things simpler
2023-01-06 08:05:33 +01:00
c97ad0ad7e
Interpreter - Made the interpreter state partially public
...
* This allows Callable to be public, which is required for Value
* State internals are still hidden behind pub(super)
2023-01-06 07:47:45 +01:00
10223cbb4e
Interpreter - WIP refactor to prepare for using resolved variables
2023-01-05 07:54:18 +01:00
d528ce8dc3
Interpreter - Limited scope of some declarations
2023-01-05 07:21:43 +01:00
754659ed12
Resolver - Removed invalid fix mistakenly committed in 79a0667
2023-01-05 07:13:20 +01:00
c90731b62d
Resolver - Comments
2023-01-05 07:12:21 +01:00
64bc8312dd
Resolver - resolve_function() shouldn't be a method from ResolverState
2023-01-05 07:09:35 +01:00
b5573cee3b
Resolver - Fixed off-by-one error in resolve_local()
2023-01-05 07:06:27 +01:00
79a0667f34
Resolver - Errors on duplicate declarations
2023-01-05 06:58:29 +01:00
c1a61b992d
Scanner - Style clean-up
2023-01-05 06:43:54 +01:00
c5f099340b
Errors refactoring - Code compiles.
2023-01-04 07:58:44 +01:00
743379c516
Errors refactoring for the iterpreter
2023-01-04 07:49:28 +01:00
7961a92ad1
Further attempts at refactoring the error handling code
...
* Everything's still broken though
2023-01-04 07:35:40 +01:00
0443754007
Parser - Refactored error handling
2023-01-03 23:07:49 +01:00
acb29e7123
Resolver - Refactored error handling
2023-01-03 22:50:47 +01:00
36ac55d286
Errors - ErrorKind to program exit code
2023-01-03 22:44:48 +01:00
a59dc21223
Errors - Result subtype using SloxError
2023-01-03 22:40:36 +01:00
d3398e5f79
Errors - Added ErrorKind::Scan
2023-01-03 22:40:24 +01:00
d0d4038272
Errors - ErrorHandler.report() consumes the error
2023-01-03 22:40:01 +01:00
260b19030f
Scanner - Refactored to use new error handling
2023-01-03 22:38:57 +01:00
e152e40678
Errors - Refactoring
...
* This will break the whole thing but the error handling was getting
quite messy.
2023-01-03 22:17:11 +01:00
1346e0ccf0
Resolver - Return the map of resolved variables
2023-01-03 12:56:40 +01:00
376f28044c
Resolver - Fixed function handling
...
* Since the arguments are stored in an intermediate environment, an
additional scope is required
2023-01-03 12:55:48 +01:00
5a12ce44c1
Resolver - Initial implementation
...
* Not sure about using pointers to Expr nodes in order to remember how
they can be resolved.
* Unused and untested.
2023-01-03 08:50:12 +01:00
c8be65dc4c
Interpreter - Remove checks for duplicate argument names
2023-01-02 21:49:45 +01:00
29d3677b2a
Parser - Detect duplicate argument names
2023-01-02 21:49:16 +01:00
db781ed00f
HAPPY CLIPPY IS HAPPY!!!!
2023-01-02 21:44:02 +01:00
36c842d7ab
Parser - Cleaning up after field removal
2023-01-02 21:40:30 +01:00
46389d2962
AST - Removed field missed in previous changes
2023-01-02 21:38:33 +01:00
f1145bfbdf
Interpreter - Lambda support
2023-01-02 21:37:56 +01:00
0ef1318a35
Interpreter - Function name is optional (lambdas...)
2023-01-02 21:37:29 +01:00
ab46d0bcef
AST - Removed useless field from Lambda
2023-01-02 21:36:50 +01:00
2881eb5a61
Parser - Lambda functions
2023-01-02 21:24:59 +01:00
4769a2a7f3
AST - Lambda functions
2023-01-02 21:01:45 +01:00
783c10067b
Parser - Fixed parsing empty function parameters
2023-01-02 20:53:14 +01:00
12b2855fb1
Parser - Consume ';' after return statements
2023-01-02 20:48:38 +01:00
3dea0c9a45
Parser - Fixed can_use_return()
2023-01-02 20:47:12 +01:00
d6ea1c3099
Interpreter - Handle return value in functions
2023-01-02 20:46:34 +01:00
0de6b927b5
Interpreter - Return statement
2023-01-02 20:41:59 +01:00
3bd3c31210
Parser - Prevent return from being used outside of functions
2023-01-02 20:29:32 +01:00
0edabd4a48
Parser - Fixed loop parsing state in function bodies
2023-01-02 20:23:43 +01:00
549e93e9a9
Parser - Fixed comment
2023-01-02 20:21:52 +01:00
0290fbc226
Parser - Return statement
2023-01-02 20:20:47 +01:00
9b9103c170
AST - Added return statement
2023-01-02 20:16:14 +01:00
e4a86eb1de
AST - Fixed statement nodes with *Stmt names
2023-01-02 20:13:51 +01:00
6acf492aa2
Interpreter - Handle function definitions
2023-01-02 20:08:47 +01:00
cf3284cd88
Interpreter - Handle errors for multiple definitions of an argument
2023-01-02 20:08:05 +01:00
7b20ec2f3a
Interpreter - Define functions from name/params/body
...
* Used to be defined from statement, but this is cleaner and easier
2023-01-02 20:07:15 +01:00
c23ce47420
Parser - Fixed comment
2023-01-02 20:06:56 +01:00
5d1d3bd0a4
Parser - Fixed function call parsing
2023-01-02 20:06:36 +01:00
360ec57914
Interpreter - Fixed typo
2023-01-02 20:06:12 +01:00
8b74cd932d
Errors - Position for interpreter errors
2023-01-02 20:05:49 +01:00
ca3ec46bdc
Interpreter - Data structure for functions
2023-01-02 19:50:55 +01:00
f02d15fa83
Interpreter - Scope change for a few functions
2023-01-02 19:49:58 +01:00
e963a9f7ca
Interpreter - New submodule for functions
2023-01-02 18:58:20 +01:00
250eddea71
Parser - Parse function declarations
2023-01-02 18:57:25 +01:00
9c7445d904
AST - Added function to extract all block statements
2023-01-02 18:56:26 +01:00
cd731d387a
Parser - Renamed method
2023-01-02 18:33:20 +01:00
3738fb4f00
AST - Function declarations
2023-01-02 18:31:11 +01:00
0a38903154
I <3 CLIPPY
2023-01-02 18:23:12 +01:00
9d555acae0
Interpreter - Default environment includes native functions
2023-01-02 18:20:23 +01:00
24b57d35d0
Interpreter - clock() native function
2023-01-02 18:20:02 +01:00
7b8405119b
Interpreter - CallableRef type alias
2023-01-02 18:19:45 +01:00
d450f186b4
Interpreter - Added the native_fn empty mod
2023-01-02 17:57:34 +01:00
113fffb872
Interpreter - Environment::default() implemented manually
2023-01-02 17:55:05 +01:00
6a227c96ee
Interpreter - Fixed silly english/french confusion
2023-01-02 17:49:35 +01:00
3750b5226b
Interpreter - Check arity before calling
2023-01-02 17:47:53 +01:00
d47adab0f8
Interpreter - Call implementation
2023-01-02 17:45:56 +01:00
8ab144f3c5
Interpreter - Move function call arguments
2023-01-02 17:45:19 +01:00
1ad55e95f5
Interpreter - Use EnvironmentRef in Callable
2023-01-02 17:44:51 +01:00
34619a8125
Interpreter - Callable extends Debug and ToString
2023-01-02 17:40:06 +01:00
696a363ec6
Interpreter - Implement PartialEq manually for values
2023-01-02 17:39:31 +01:00
a4875ff876
Interpreter - Actually use the callable module
2023-01-02 16:04:44 +01:00
3b5778ff47
Interpreter - Function re-ordering
2023-01-02 16:00:10 +01:00
b1d0db5ea4
Interpreter - Callable interface definition
2023-01-02 15:54:50 +01:00
fecea3b388
Parser - Support for calls with arbitrary expressions as the callee
2023-01-02 15:32:33 +01:00
4c55e9e784
AST - Function calls modified to match the book's
2023-01-02 15:23:33 +01:00
312cdf18d5
Parser - Maximum argument count for functions
2023-01-02 15:18:02 +01:00
acbce309fa
Parser - Support for function calls
2023-01-02 15:15:34 +01:00
2e7a897c47
AST - Function call expression node
2023-01-02 15:05:41 +01:00
a317e54426
CLIPPY IS GOD.
2023-01-02 14:10:32 +01:00
2f0798bfe1
Interpreter - Implemented new version of the loop statement
2023-01-02 12:18:00 +01:00
4c54643a8d
Parser - Use new loop AST node
2023-01-02 12:10:37 +01:00
c407fcd546
Parser - Improved recovery after break/continue w/ unknown label
2023-01-02 12:07:10 +01:00