Commit Graph

354 Commits

Author SHA1 Message Date
greg
518414ffd5 I was doing a wrong thing with creating vecs
The old vector was getting dropped and thus free-ing the old
underlying slice. I want to use set_len() on Vec to do
this
2017-09-19 22:11:00 -07:00
greg
06a5de6e32 Trying to debug this segfault 2017-09-19 22:11:00 -07:00
greg
748a85db02 Compiling functions half-works 2017-09-19 22:11:00 -07:00
greg
8f2d9b900b Function codegen sorta works 2017-09-19 22:11:00 -07:00
greg
b9d1140264 Refactored op compilation code
+ moved to separate function
2017-09-19 22:11:00 -07:00
greg
7188a7d33e Clarified that we hardcode a "main" function
in compiler data structure
2017-09-19 22:10:59 -07:00
greg
0c7099771f Comparison operator working 2017-09-19 22:10:59 -07:00
greg
afec7e829c There's some segfault happening in LLVMBuildUIToFP 2017-09-19 22:10:59 -07:00
greg
a6773d59bd Refactoring in compiling binops 2017-09-19 22:10:59 -07:00
greg
d804efdc5e Use BinOp type instead of strings 2017-09-19 22:10:59 -07:00
greg
0ace370fc2 Tightened up REPL loop 2017-09-19 22:10:59 -07:00
greg
1f50fcc620 Improvments to interpreter directives parsing 2017-09-19 22:10:59 -07:00
greg
d7181afa91 Few more linefeed-related changes 2017-09-19 22:10:59 -07:00
greg
4eb7683f47 Move linefeed reader to struct 2017-09-19 22:10:59 -07:00
greg
b04a8f0092 Add back interpreter directives 2017-09-19 22:10:59 -07:00
greg
c50be58cd2 Moved from simplerepl to lineread crate 2017-09-19 22:10:59 -07:00
greg
5911a07f4f Inline parsing of lambdas like half-works 2017-09-19 22:10:59 -07:00
greg
26bc6e90f3 Lamba calls partially work 2017-09-19 22:10:59 -07:00
greg
b0655d7cab need to flush stdout for printing 2017-09-19 22:10:59 -07:00
greg
a46ede9395 Made evaluation-printing more sophisticated 2017-09-19 22:10:59 -07:00
greg
d9ab5a58cf Add some methods to llvm_wrap 2017-09-19 22:10:59 -07:00
greg
77297c7e06 Add lambdas 2017-09-19 22:10:59 -07:00
greg
d93b5c0a2e Still cranking away at conditional compilation 2017-09-19 22:10:59 -07:00
greg
0b9dc113d1 CLoser to working now 2017-09-19 22:10:59 -07:00
greg
d6fc13f08d Fix a couple of problems 2017-09-19 22:10:59 -07:00
greg
825c271b17 More work on codegen for conditionals
Still doesn't compile
2017-09-19 22:10:59 -07:00
greg
8c4f7e141a Compiling if statements like half done 2017-09-19 22:10:59 -07:00
greg
12fbc51da1 Compile multi-expression source programs 2017-09-19 22:10:59 -07:00
greg
7ddb421ced Exit cleanly on opt parse fail 2017-09-19 22:10:59 -07:00
greg
1631bb0a04 Fix tests for conditionals 2017-09-19 22:10:59 -07:00
greg
5923cc2317 Kill then, else keywords 2017-09-19 22:10:59 -07:00
greg
1fa56800c5 Convert parsing while, if, fn exprs to use { } 2017-09-19 22:10:59 -07:00
greg
2b4d3e8516 Add support for curly braces and brackets
Gonna make this a curly-brace language, I like those better. Shoulda
done that to begin with.
2017-09-19 22:10:59 -07:00
greg
9b74527618 Control printing eval steps with flags 2017-09-19 22:10:59 -07:00
greg
d23e5bff35 Add an Op type for binop operators
Soon this will get swapped in as the way that BinOps are evaluated
2017-09-19 22:10:59 -07:00
greg
3a4f5ae840 Change name Op -> OpTok
So that I can make an Op type for the ASTNode
2017-09-19 22:10:59 -07:00
greg
298194c42d Finish support for assignment operators 2017-09-19 22:10:59 -07:00
greg
23d2209d8b Implementing a few more operators
WIP - not done
2017-09-19 22:10:59 -07:00
greg
4cf165b408 Use buffered reader for stdout
Not sure ifthis is actually helping
2017-09-19 22:10:59 -07:00
greg
154839979b Add nicer handle_builtin method 2017-09-19 22:10:59 -07:00
greg
538f0b18f4 Evaluate while loop 2017-09-19 22:10:59 -07:00
greg
dc81d237c5 Reduce re-allocations in eval 2017-09-19 22:10:58 -07:00
greg
8651839a66 Getting rid of some newlines - concision 2017-09-19 22:10:58 -07:00
greg
f6e5ea250d Convert while_expr to delimiter_block! too 2017-09-19 22:10:58 -07:00
greg
9801f53a17 Moved conditionals to delimiter_block! syntax 2017-09-19 22:10:58 -07:00
greg
db92292569 Fixed all tests 2017-09-19 22:10:58 -07:00
greg
e1ce54aece Add delimiter_block macro 2017-09-19 22:10:58 -07:00
greg
c227ad656f Parser simplifications, renames, etc. 2017-09-19 22:10:58 -07:00
greg
b45d09e81a Don't need this reference 2017-09-19 22:10:58 -07:00
greg
761500b9d6 Some cleanups in Parser
-get rid of some use statements
-mkae error messages better
2017-09-19 22:10:58 -07:00
greg
e888e82404 Remove some unnecessary destructurings of Rc<String> 2017-09-19 22:10:58 -07:00
greg
328ec4ba87 Convertd like half the Strings to RC
-still need to eliminate some clones in eval, parse
+ fix all the tests
2017-09-19 22:10:58 -07:00
greg
4a7b570603 Parser changes - add precedences, move definitions
Move impls of Display for AST subtypes closer to where they are defined
2017-09-19 22:10:58 -07:00
greg
7eb48fb4ef Working on compilation again 2017-09-19 22:10:58 -07:00
greg
8ebf1b3056 Add parser support for while statements 2017-09-19 22:10:58 -07:00
greg
905431b33c Change name: ASTNode -> Statement 2017-09-19 22:10:58 -07:00
greg
2996198eff lookup_binding only needs &str 2017-09-19 22:10:58 -07:00
greg
06771979df Function bodies can contain statements now 2017-09-19 22:10:58 -07:00
greg
f158b6c712 Converted to multiple-evaluator logic
Now I have (basically) full single-step evaluation and it works fine
2017-09-19 22:10:58 -07:00
greg
ba8f67441f Conditionals - handle delimiters correctly 2017-09-19 22:10:58 -07:00
greg
872e9ce7ee Make function binding a SideEffect 2017-09-19 22:10:58 -07:00
greg
edf342e65a Add == operator 2017-09-19 22:10:58 -07:00
greg
27d4c2ccbd No references in pattern-matching 2017-09-19 22:10:58 -07:00
greg
6794d22f1d Run rustfmt on eval.rs, parser.rs 2017-09-19 22:10:58 -07:00
greg
1858d26638 Add comparison operators
+  make operator evaluation more concise
2017-09-19 22:10:58 -07:00
greg
84fbe73cf6 Add Lambda type
And change name FuncNode -> FuncDefNode

Now function definition nodes reduce to a Lambda, which is not
reducible.
2017-09-19 22:10:58 -07:00
greg
ad994c38ae Test simplification 2017-09-19 22:10:58 -07:00
greg
48343d3fad Tightened tokenization tests 2017-09-19 22:10:58 -07:00
greg
4f8ff35d0f fixed bug with ends_identifier 2017-09-19 22:10:58 -07:00
greg
7311d0311f Simplify pattern a little bit 2017-09-19 22:10:58 -07:00
greg
1b59c264b4 Use itertools peeking_take_while
Cuts down on lines in the tokenizer
2017-09-19 22:10:58 -07:00
greg
b2e453a9de Rewrite of tokenizer 2017-09-19 22:10:58 -07:00
greg
59226eb731 Ran rustfmt on parser.rs 2017-09-19 22:10:58 -07:00
greg
297003c0b0 Operator only needs to be a tuple struct 2017-09-19 22:10:58 -07:00
greg
e5ee072b00 Convert tokenizer to large match statement
In the hopes of making it shorter
2017-09-19 22:10:58 -07:00
greg
9b62efc830 Fix conditional parsing
Needed to account for semicolons/newlines. Maybe need to generalize
delimiter-separated list of things
2017-09-19 22:10:58 -07:00
greg
f626ca1427 Add test for conditional parsing 2017-09-19 22:10:57 -07:00
greg
82c52ede48 Finish evaluating conditionals 2017-09-19 22:10:57 -07:00
greg
7f52b20d97 Conditional eval partway implemented
Need to change the AST representation to support compound statements I
think
2017-09-19 22:10:57 -07:00
greg
12fee6158c Vector'd expressions don't need to be boxed 2017-09-19 22:10:57 -07:00
greg
2d21de7cc3 Added support for conditionals to parser
Not to eval yet
2017-09-19 22:10:57 -07:00
greg
9cc9c5977d Fixed evaluation of function calls
This bit still isn't quite small-step but maybe that's okay for
functions
2017-09-19 22:10:57 -07:00
greg
ed9d1312d1 Change representation of variables 2017-09-19 22:10:57 -07:00
greg
29d9e50311 All environment changes represented explicitly
Start the work of rewriting the evluator to be a true small-step
evaluator - that is, all state changes are represented explicitly as
SideEffect types, and not as methods called on the evaluator, except at
the very top of the evaluation loop
2017-09-19 22:10:57 -07:00
greg
e84550f3ec Kill two compilation warnings 2017-09-19 22:10:57 -07:00
greg
3063de1242 Run rustfmt on the rest of them 2017-09-19 22:10:57 -07:00
greg
e1d07b4e66 Rustfmt on llvm_wrap 2017-09-19 22:10:57 -07:00
greg
af45004afa Run rustfmt on some files 2017-09-19 22:10:57 -07:00
greg
d4d61ce5ad Use process::exit in main 2017-09-19 22:10:57 -07:00
greg
743311d18a Convert Tokenize to Result 2017-09-19 22:10:57 -07:00
greg
17f9846bb9 Make tests pass w/ new match syntax 2017-09-19 22:10:57 -07:00
greg
fe8418edbe Kill some extraneous spaces 2017-09-19 22:10:57 -07:00
greg
1d8102b9fa Make compilation controllable 2017-09-19 22:10:57 -07:00
greg
aac3ca40fe Add getopts 2017-09-19 22:10:57 -07:00
greg
c389b44bf8 Compile statements with variables 2017-09-19 22:10:57 -07:00
greg
db52f9b716 Package compilation context into one struct 2017-09-19 22:10:57 -07:00
greg
d3a743442b = should have high precedence 2017-09-19 22:10:57 -07:00
greg
e46d840d96 Move more code to llvm_wrap
And silence a few compiler warnings
2017-09-19 22:10:57 -07:00
greg
3d406f1dd2 Move llmv wrapper into separate file 2017-09-19 22:10:57 -07:00
greg
fca307d3ab Package more functions in LLVMWrapper 2017-09-19 22:10:57 -07:00