Commit Graph

846 Commits

Author SHA1 Message Date
greg 1d5e5aa735 Some type renaming in builtins
Builtins will remain entirely separate from the actual type
representation, whatever that ends up being
2018-08-19 22:00:20 -07:00
greg 2c298c7247 Add warning for undefined operator
In practice this will probably always not typecheck, but it's a valid
parse
2018-08-19 21:40:30 -07:00
greg f00fee0e37 Rename StateStack -> ScopeStack 2018-08-19 21:31:45 -07:00
greg 0d13b5e3bc Preliminary support for binops in if-discriminators
The BNF grammar is a bit more liberal than any successfully-compiled
schala program should be, in that it allows things like `if x < is
pattern`. It's okay if that parses successfully and then is an error at
typechecking.
2018-08-19 21:25:07 -07:00
greg 98f597f00a Implement comparison operators correctly 2018-08-19 21:11:43 -07:00
greg fb71881409 Refactor binop parsing 2018-08-19 20:33:50 -07:00
greg d1c3b4a81b Starting on halfexprs / binops 2018-08-19 18:44:54 -07:00
greg f9181b5786 use expr_or_block where appropriate 2018-08-19 15:58:31 -07:00
greg 0e914cf057 Error message for parsing guards 2018-08-19 15:12:34 -07:00
greg 04ea8c5ebc More unused code removal 2018-08-19 15:06:01 -07:00
greg 492ef4ae19 Clear up some unused code to reduce compile noise
And add some notes to the README
2018-08-19 15:03:41 -07:00
greg 75a7a4499d Added some more cases to the match handling 2018-08-19 10:53:43 -07:00
greg 97bee58fbe More work with guards 2018-08-15 22:34:04 -07:00
greg 34c2b43371 More work on if matching 2018-08-15 18:32:44 -07:00
greg 88b617de52 More atlernatives work 2018-08-15 11:44:55 -07:00
greg 482674b19a Start on expr_or_block
WIP doesn't work yet
2018-08-15 09:34:00 -07:00
greg a72b387ceb Remove some more dead code warnings 2018-08-14 23:19:27 -07:00
greg 864e932e9f Getting rid of more unused items 2018-08-14 23:09:11 -07:00
greg d7e73be44c Getting rid of some unused warnings 2018-08-14 23:07:00 -07:00
greg 0c0690e86e Provide error message here 2018-08-14 21:53:57 -07:00
greg 6d18f80185 Use Result in test 2018-08-14 21:46:48 -07:00
greg 6825de3916 new_frame -> new_scope 2018-08-14 21:45:45 -07:00
greg 1b78fbff82 Tests for basic pattern matching 2018-08-14 21:39:33 -07:00
greg 897c1181a9 Basic pattern matching working 2018-08-14 21:17:43 -07:00
greg 6833bc4f00 Start on CaseMatch eval 2018-08-14 12:43:06 -07:00
greg f2ded78776 ReducedAST: Match -> CaseMatch
makes it easier to grep for
2018-08-14 12:37:18 -07:00
greg 9debdd8d66 Primitive tuple 2018-08-14 02:03:05 -07:00
greg 8067c862f3 Switch out types for evaluator 2018-08-14 00:11:13 -07:00
greg f9c2fc3f9d Make code more concise 2018-08-07 17:09:53 -07:00
greg 5ead1e5d44 NewConstructor -> Constructor 2018-08-05 19:14:02 -07:00
greg 348a6f7c76 More work on pattern-matching
I think I need to entirely change the types in the evaluator.
ReducedAST should only care about NewConstructor (which I gotta rename),
and the evaluator is the only place that an implementation of a
primitive constructed type should live (see Peyton-Jones implementing a
functional langauge p. 70)
2018-08-05 19:11:42 -07:00
greg 5f336ec1a9 Add lookup_by_name to symbol table 2018-08-05 18:19:48 -07:00
greg da59fae0d3 More work on pattern-matching 2018-08-05 18:01:42 -07:00
greg 5b5689accf Changing representation of primitive objects 2018-08-05 17:15:58 -07:00
greg 32acf89814 New Constructor 2018-08-05 16:04:52 -07:00
greg c637a922a9 Start implementing constructors/matches
as per Implementing Functional Programming Languages by Peyton-Jones
2018-08-05 14:23:08 -07:00
greg 42d0aba21c Add index of variants to symbol table
Also new prelude type, just for testing
2018-08-05 13:59:13 -07:00
greg bc6d4d19b5 reduced ast match 2018-07-26 00:52:46 -07:00
greg a2b1b0f953 Pattern-matching in reduced AST 2018-07-26 00:52:46 -07:00
greg 75bf4b5697 Fill out variants to be reduced 2018-07-26 00:52:46 -07:00
greg 98e812968b Fix parsing additional options 2018-07-26 00:52:46 -07:00
greg 250c486143 Fix derive code 2018-07-26 00:52:46 -07:00
greg 38eb065511 Broken proc macro custom derive code 2018-07-26 00:52:46 -07:00
greg 4ca57e4aea Change name of debug options struct 2018-07-26 00:52:46 -07:00
greg 82502ad0ad Move some parsing code around 2018-07-26 00:52:46 -07:00
greg 7d68b2a05a Get rid of code related to old match stuff 2018-07-26 00:52:46 -07:00
greg c2db212c78 Some more guard arm stuff + dealing with split binexp
... in if-blocks. Need to do some re-architecture I think
2018-07-26 00:52:46 -07:00
greg 837a180b09 Starting work on guard arms 2018-07-26 00:52:46 -07:00
greg 5ecd298e6a Record Pattern 2018-07-26 00:52:46 -07:00
greg 8aa33d0872 Starting on guards 2018-07-26 00:52:46 -07:00
greg 21a8868bcf Fixed test 2018-07-26 00:52:46 -07:00
greg 5a91957fa1 Some incomplete parse work 2018-07-26 00:52:46 -07:00
greg 176d43e56f Remove old comment 2018-07-26 00:52:46 -07:00
greg 90ecde89c9 Mutable types 2018-07-26 00:52:46 -07:00
greg 65c2cd521b Mutable types
This bit of syntax is meant for extendable enum types
2018-07-26 00:52:46 -07:00
greg f7dbbddad1 Let and let mut syntax 2018-07-26 00:52:46 -07:00
greg 43ff08b04c Add some debugging info around parse error 2018-07-26 00:52:46 -07:00
greg 00692aa89e Support for underscores 2018-07-26 00:52:46 -07:00
greg 5e48eb2dee Broken - some pass abstraction work 2018-07-26 00:52:46 -07:00
greg 3597ad4eef Compact parsing 2018-07-26 00:52:46 -07:00
greg 072eab1a80 Thread debug opts around where they need to be 2018-07-26 00:52:46 -07:00
greg 55a8cabd7c Some basic pattern stuff 2018-07-26 00:52:46 -07:00
greg 3c022fc4ef Clarified BNF 2018-07-26 00:52:46 -07:00
greg 0a02c21e70 Some more Patterns work
-at first brush, a pattern is like a single Variant with a list of free
vars
2018-07-26 00:52:46 -07:00
greg 927f427a86 Starting work on patterns 2018-07-26 00:52:46 -07:00
greg 005aba7a10 Test alt form 2018-07-26 00:52:46 -07:00
greg 7882e92ab5 Fix old style if 2018-07-26 00:52:46 -07:00
greg f582ab4eaa Test for new style parsing 2018-07-26 00:52:46 -07:00
greg f2dce38647 Broken, but compiling, move to new if paradigm 2018-07-26 00:52:46 -07:00
greg ba4cd9da39 Kill match keyword + data structures
And add new unified keywords
2018-07-26 00:52:46 -07:00
greg 654eeef428 Clarified grammar BNF some 2018-07-26 00:52:46 -07:00
greg a96fbc9592 Fix match expression parsing 2018-07-26 00:52:46 -07:00
greg 196954326e Print bare data constructor 2018-07-26 00:52:46 -07:00
greg 3f2fff276c Constructor eval 2018-07-26 00:52:46 -07:00
greg ebcea685f3 Fix looking up functions 2018-07-26 00:52:46 -07:00
greg 3b9084810e Add constructor reduced ast node; fix test 2018-07-26 00:52:46 -07:00
greg 7809cda240 Pass symbol_table to ast reduce
To distinguish between values and data constructors
2018-07-26 00:52:46 -07:00
greg f1679e83b7 Start trying to fix tests 2018-07-26 00:52:46 -07:00
greg f98d8e2bb0 Move AST into its own module 2018-07-26 00:52:46 -07:00
greg d0a0cc8209 Rename ast_reducing -> reduced_ast 2018-07-26 00:52:46 -07:00
greg 5aa0e10e7a Some ADT work 2018-07-26 00:52:46 -07:00
greg 27729cefdf Some improvements to the thing 2018-07-26 00:52:46 -07:00
greg df76e7c120 Pretty-print type table 2018-07-26 00:52:46 -07:00
greg 889610f0b0 Pretty-print Symbol Table 2018-07-26 00:52:46 -07:00
greg 3beabf4678 Start eval-ing data constructors 2018-07-26 00:52:46 -07:00
greg 25790f8643 Added super-janky prelude capability 2018-07-26 00:52:46 -07:00
greg ff5446af3f Add symbols from symbol table into global type context 2018-07-26 00:52:46 -07:00
greg 5d84153c9e Want bin expressions typed soon 2018-07-26 00:52:46 -07:00
greg 0b0f6b6b50 Symbol table handles functions better 2018-07-26 00:52:46 -07:00
greg 856a360aba Types need handle to symbol table 2018-07-26 00:52:46 -07:00
greg 81ca9ee20f Add some data structures back 2018-07-26 00:52:46 -07:00
greg 4caf8096b3 Add Scheme, TypeEnv, Substitution data structs 2018-07-26 00:52:46 -07:00
greg c65907388d Some ADT work 2018-07-26 00:52:46 -07:00
greg 33c22c8bbc Typecheck values 2018-07-26 00:52:46 -07:00
greg 4a27af2136 Add a super-basic test 2018-07-26 00:52:46 -07:00
greg 07af54b78a More work 2018-07-26 00:52:46 -07:00
greg c4666b82ec Basics 2018-07-26 00:52:46 -07:00
greg 274dd1ccb0 Basic stuff 2018-07-26 00:52:46 -07:00
greg 70ec79c4b3 Lol starting over from scratch again
H-M is hard :/
2018-07-26 00:52:46 -07:00
greg f88d2331e3 printf debugs for problems with function typing 2018-07-26 00:52:46 -07:00
greg c8f961abbf Functions 2018-07-26 00:52:46 -07:00
greg d040d76bfa Start handling function case 2018-07-26 00:52:46 -07:00
greg 887ba46b0b Fix this thing 2018-07-26 00:52:46 -07:00
greg a80db9e4c2 Debug types
WIP
2018-07-26 00:52:46 -07:00
greg c986233a95 Adding bindings seems to work?
I'm playing real fast and loose though
2018-07-26 00:52:46 -07:00
greg bb29df4a73 Variable binding insertion infrastructure 2018-07-26 00:52:46 -07:00
greg 4db3595d7c More work on variables 2018-07-26 00:52:46 -07:00
greg 217ee73fc9 Literals 2018-07-26 00:52:46 -07:00
greg 93309c025e Some work 2018-07-26 00:52:46 -07:00
greg b67512a9e1 Add Infer struct 2018-07-26 00:52:46 -07:00
greg 8e6f605fab Type alias "TypeName" 2018-07-26 00:52:46 -07:00
greg ba4185b0fb Back to including typechecking code in pipeline 2018-07-26 00:52:46 -07:00
greg 7a2a4df297 Clearing out most of the cruft from typechecking 2018-07-26 00:52:46 -07:00
greg 642e9da8ee Move everything symbol-table-related into a separate module 2018-07-26 00:52:46 -07:00
greg cea7427847 put TypeEnvironment on TypeContext 2018-07-26 00:52:46 -07:00
greg 3156c31dfc Variable lookup 2018-07-26 00:52:46 -07:00
greg 2e457cd5e8 First real inferring 2018-07-26 00:52:46 -07:00
greg 843d895f2b infer infra 2018-07-26 00:52:46 -07:00
greg 734c53ce0d Starting to deal with actual expr inferring 2018-07-26 00:52:46 -07:00
greg 3a3b8dd440 TypeEnvironment lives in Infer 2018-07-26 00:52:46 -07:00
greg c96a56a7ac fresh 2018-07-26 00:52:46 -07:00
greg 4017857a3a Unification 2018-07-26 00:52:46 -07:00
greg 9e0f8b8a14 InferError 2018-07-26 00:52:46 -07:00
greg 7121624f77 Type Env 2018-07-26 00:52:46 -07:00
greg 48e795decc apply_substitution for PolyTypes
If I made an error it's likely here...
2018-07-26 00:52:46 -07:00
greg a26da934f4 Substitution monotypes 2018-07-26 00:52:46 -07:00
greg 1de1cd9cfd For H-M, add types and some impls 2018-07-26 00:52:46 -07:00
greg 6f639b9030 Type type structure 2018-07-26 00:52:46 -07:00
greg 8f0104ebc7 Deletion 2018-07-26 00:52:46 -07:00
greg 36cd7e080d Even more deletions 2018-07-26 00:52:46 -07:00
greg f48a25779c Lol just get rid of all the old code, start from scratch again 2018-07-26 00:52:46 -07:00
greg 808a1bfc98 Still more deletions 2018-07-26 00:52:46 -07:00
greg c7e46c1cfa KIll any commented code 2018-07-26 00:52:46 -07:00
greg 98cfcfc18d Eval shouldn't be aware of types 2018-07-26 00:52:46 -07:00
greg b4c7ea3d02 Show bindings too in debug 2018-07-26 00:52:46 -07:00
greg e7c89ed840 Some more refactoring 2018-07-26 00:52:46 -07:00
greg b0e38f7f5b Refactor 2018-07-26 00:52:46 -07:00
greg 276662d98a Some code rearrangements 2018-07-26 00:52:46 -07:00
greg e8e9265b26 Use less verbose match syntax 2018-07-26 00:52:46 -07:00
greg cb316a973e Getting back to hindley-milner
First, clear out some of this cruft in the compiler warnings
2018-07-26 00:52:46 -07:00
greg e64861b602 Some eval tests 2018-07-26 00:52:46 -07:00
greg 1673fd1cf9 Fix test 2018-07-26 00:52:46 -07:00
greg c00effcbdd Add _ 2018-07-26 00:52:46 -07:00
greg 8378170fbd Kill comments 2018-07-26 00:52:46 -07:00
greg 7ab385d398 Bring custom ADTs to the repl 2018-07-26 00:52:46 -07:00
greg 9fb148bb02 Make compile again 2018-07-26 00:52:46 -07:00
greg 97df2fa344 I dunno 2018-07-26 00:52:46 -07:00
greg a08134a747 Delete old code in eval 2018-07-26 00:52:46 -07:00
greg 3ac50f974d Pass around reference to type context in evaluator 2018-07-26 00:52:46 -07:00
greg afc4281e7f Evaluate function arguments in context before applying them 2018-07-26 00:52:46 -07:00
greg 8d6fea942f Handle function definition before use
And some other ReducedAST - Evaluation niceties
2018-07-26 00:52:46 -07:00
greg 6d93c758a2 Add function to symbol table 2018-07-26 00:52:46 -07:00
greg aff421cd99 Working with symbol table
Note that symbol table is a different object now than the previous
binding table that was used for type-checking. That binding table is not
currently debugged and should be debugged in a separate debug output with
typechecking proper.
2018-07-26 00:52:46 -07:00
greg 493d76da0b Add symbol table data structure to typechecking 2018-07-26 00:52:46 -07:00
greg eb681fbff9 Make parse error message nicer 2018-07-26 00:52:46 -07:00
greg f3e3843528 Decomplexify delimited! 2018-07-26 00:52:46 -07:00
greg 6b90e19eb1 Simplify expect! macro
Ends up printing a debug print, but whatever, will fix later
2018-07-26 00:52:46 -07:00
greg 210ae47c8b Get rid of lambda 2018-07-26 00:52:46 -07:00
greg 70794d8ff1 For expression parsing 2018-07-26 00:52:46 -07:00
greg 532c8c45b4 Parse while expressions
Decided to add while expressions to the language to make for-parsing
easier. Plus some other random notes
2018-07-26 00:52:46 -07:00
greg 24b532df06 This doesn't need to be a closure 2018-07-26 00:52:46 -07:00
greg ac576be604 Trim newline in getline()
Ineffiicent but whatever
2018-07-26 00:52:46 -07:00
greg 6bf106a1a3 Equality 2018-07-26 00:52:46 -07:00
greg 44e585fca2 Conditionals 2018-07-26 00:52:46 -07:00
greg 3f836eb74f Kill some warnings 2018-07-26 00:52:46 -07:00
greg abf25d648d Change repl behavior of strings 2018-07-26 00:52:46 -07:00
greg 1f6e6d9b31 Tuples 2018-07-26 00:52:46 -07:00
greg e2703121d8 Kill unneeded import 2018-07-26 00:52:46 -07:00
greg e5b6b41422 Error msg 2018-07-26 00:52:46 -07:00
greg 6c5e3dea5d Assignment 2018-07-26 00:52:46 -07:00
greg bd8bf1945c Super simple janky input 2018-07-26 00:52:46 -07:00
greg 9e393d2753 Kill old type structure 2018-07-26 00:52:46 -07:00
greg 822420a9d5 Add an eval test 2018-07-26 00:52:46 -07:00
greg 6f8dc9bedd rename IntLiteral -> NatLiteral 2018-07-26 00:52:46 -07:00
greg e0cec8b8a6 print, println as builtins 2018-07-26 00:52:46 -07:00
greg 1a84f62818 Kill some old code, make very_simple example print 2018-07-26 00:52:46 -07:00
greg b1966d7199 Function calling works kind of 2018-07-26 00:52:46 -07:00
greg fdbb21990d Retrieve function from memory when called 2018-07-26 00:52:46 -07:00
greg 1011ff08f3 Use new rust 1.26 less verbose syntax 2018-07-26 00:52:46 -07:00
greg 6d8d2aecbd Functions 2018-07-26 00:52:46 -07:00
greg 848306ad1a Reduce defined function 2018-07-26 00:52:46 -07:00
greg e6f0710e41 Debug ast rewrite 2018-07-26 00:52:46 -07:00
greg 78ba4e1ed3 Variable lookup 2018-07-26 00:52:46 -07:00
greg 481afb0f87 Fix debugging and debug eval 2018-07-26 00:52:46 -07:00
greg 01986e7474 starting bindings 2018-07-26 00:52:46 -07:00
greg 9cf5260d4b Use impl Trait to simplify type signatures 2018-07-26 00:52:46 -07:00
greg 18c8176134 Get rid of unneeded imports 2018-07-26 00:52:46 -07:00
greg 2cb7d35008 Use EvalResult type 2018-07-26 00:52:46 -07:00
greg bd1eed884f State type manipulations 2018-07-26 00:52:46 -07:00
greg 67917612e6 Swap over eval code to new paradigm
While keeping the old code commented for reference
2018-07-26 00:52:46 -07:00
greg b4a16cdc55 Prefix ops 2018-07-26 00:52:46 -07:00
greg 4d5ab95946 Fix bug with / parsing 2018-07-26 00:52:46 -07:00
greg ce71254b69 Implement a lot more ops 2018-07-26 00:52:46 -07:00
greg 065e58f87e Successfully interpreting addition 2018-07-26 00:52:46 -07:00
greg 6768cebc48 Literals 2018-07-26 00:52:46 -07:00
greg ec5580d20b prefix op reduction 2018-07-26 00:52:46 -07:00
greg 9de66a9af3 Unimplemented sigil 2018-07-26 00:52:46 -07:00
greg 633b4fe7a4 Nats, some binop reduction 2018-07-26 00:52:46 -07:00
greg 87c3b8e234 Some work 2018-07-26 00:52:46 -07:00
greg 16a463b1a0 Method-style 2018-07-26 00:52:46 -07:00
greg c3be644133 Optional scope name 2018-07-26 00:52:46 -07:00
greg e7615fda8b Add new_frame method 2018-07-26 00:52:46 -07:00
greg 111657b567 Add generic stack data structure
I'll want to use this soon enough
2018-07-26 00:52:46 -07:00
greg c5e8d3e080 Random notes re: symbol table
I'm proably gonna want to redo the symbol table stuff after reading Language
Implementation Patterns, esp. to accomodate scopes
2018-07-26 00:52:46 -07:00
greg 4f49c183b0 Float + reduce binop/prefixop 2018-07-26 00:52:46 -07:00
greg 81368179bb More boilerplate 2018-07-26 00:52:46 -07:00
greg 30128d7d34 Easy work 2018-07-26 00:52:46 -07:00
greg 6c718e5d4f Start AST-reducing 2018-07-26 00:52:46 -07:00
greg 774ddd665b Infrastructure to evaluate reduced AST 2018-07-26 00:52:46 -07:00
greg 0bb0ecea76 Add new ast reducing pass 2018-07-26 00:52:46 -07:00
greg 7686707602 Type alias Vec<String> -> Block 2018-07-26 00:52:46 -07:00
greg 890e6bd4c5 Minor wording changes 2018-07-26 00:52:46 -07:00
greg 8826d5b0d4 For now, don't error out with typechecking 2018-07-26 00:52:46 -07:00
greg 8ad5dd9056 Rename passes 2018-07-26 00:52:46 -07:00
greg fb168da8bd Kill comments 2018-07-26 00:52:46 -07:00
greg 86e88ee1bf Greatly fleshed out custom derive 2018-07-26 00:52:46 -07:00
greg d1a2473bb2 More derive work 2018-07-26 00:52:46 -07:00
greg e498e19ffc Use extra attribute 2018-07-26 00:52:46 -07:00
greg 51cdedb9cc Actually autogenerate the trait 2018-07-26 00:52:46 -07:00
greg 50236ac942 Kill unused mut 2018-07-26 00:52:46 -07:00
greg 7ba8c9dab9 Tokenize errors 2018-07-26 00:52:46 -07:00
greg 774ab5f72e Token errors WIP 2018-07-26 00:52:46 -07:00
greg a10df92ab8 Debug work 2018-07-26 00:52:46 -07:00
greg 27885500fd Show debug stages 2018-07-26 00:52:46 -07:00
greg 5d69b530c5 Remove comments 2018-07-26 00:52:46 -07:00
greg 832d0d4ee3 Add more debug jank entries 2018-07-26 00:52:46 -07:00
greg 2c5ebd636f Pass EvalOptions to macro 2018-07-26 00:52:46 -07:00
greg 06638dc030 Minor syntax changes 2018-07-26 00:52:46 -07:00
greg 3a181dd0ac Add passing debug into via &mut pointer 2018-07-26 00:52:46 -07:00
greg 1d1a5fb6fc Pass mutable handle to unfinishedcomputation 2018-07-26 00:52:46 -07:00
greg 3d960d5697 Implement most of pipeline 2018-07-26 00:52:46 -07:00
greg 1f4228b887 Successfully passing state handle to pass functions 2018-07-26 00:52:46 -07:00
greg 5abaadc0ca Add self 2018-07-26 00:52:46 -07:00
greg fd89de77cc Making pipeline macro nicer 2018-07-26 00:52:46 -07:00
greg a305610a39 Some kind of pipeline working
thanks to the rust syn crate guy for the macro idea
2018-07-26 00:52:46 -07:00
greg 14f31a5186 Adding proc macro for codegen
This should hopefully make the compiler pass thing I want to do possible
2018-07-26 00:52:46 -07:00
greg b936132ca6 Backtick operators supported in tokenizing 2018-07-26 00:52:46 -07:00
greg 65f42981ff Trait -> Interface 2018-07-26 00:52:46 -07:00
greg e2970dbc42 Kill old advanced_slice_patterns 2018-07-26 00:52:46 -07:00
greg 7d2bc4188d Debug stages from command line 2018-07-26 00:52:46 -07:00
greg ecebbb2eae Fix interspersing of newlines in tokenizer infra 2018-07-26 00:52:45 -07:00
greg 78f12c8f1d Show err output when evaluating non-interactively 2018-07-26 00:52:45 -07:00
greg 819a06503f Hook schala function up to debug booleans
Not sure if I like this API, but eh, it's what I've got
2018-07-26 00:52:45 -07:00
greg 6f43c3b81d move schala into separate crate 2018-07-26 00:52:45 -07:00
greg 7730457878 Revert "Starting to split project into multiple crates"
This reverts commit e3b0f4a51e.
Bah, this was a bad idea, wrong way to do it
2018-07-26 00:52:45 -07:00
greg 46dbac7f69 Starting to split project into multiple crates 2018-07-26 00:52:45 -07:00