scheme.git
15 months agoFix total pattern match verification master
Luke Lau [Sat, 17 Aug 2019 18:53:14 +0000 (19:53 +0100)]
Fix total pattern match verification

15 months agoStore ADTs with only singletons in registers
Luke Lau [Sat, 17 Aug 2019 18:43:44 +0000 (19:43 +0100)]
Store ADTs with only singletons in registers

Also define Bool as an ADT within the stdlib!

15 months agoCheck for complete pattern matches
Luke Lau [Fri, 16 Aug 2019 15:06:44 +0000 (16:06 +0100)]
Check for complete pattern matches

15 months agoAdd extra spicy test case
Luke Lau [Fri, 16 Aug 2019 00:19:00 +0000 (01:19 +0100)]
Add extra spicy test case

15 months agoFix typechecking with bindings
Luke Lau [Fri, 16 Aug 2019 00:12:54 +0000 (01:12 +0100)]
Fix typechecking with bindings

15 months agoStart work on collecting all bindings when typechecking nested pattern match
Luke Lau [Thu, 15 Aug 2019 16:36:32 +0000 (17:36 +0100)]
Start work on collecting all bindings when typechecking nested pattern match

15 months agoAdd more complicated pattern matching test case
Luke Lau [Thu, 15 Aug 2019 16:24:09 +0000 (17:24 +0100)]
Add more complicated pattern matching test case

15 months agoFix bindings in ADT pattern matching codegen
Luke Lau [Thu, 15 Aug 2019 16:21:13 +0000 (17:21 +0100)]
Fix bindings in ADT pattern matching codegen

15 months agoAdd case statement codegen and singleton ADTs
Luke Lau [Thu, 15 Aug 2019 15:51:36 +0000 (16:51 +0100)]
Add case statement codegen and singleton ADTs

15 months agoHandle pattern matching entire expressions
Luke Lau [Thu, 15 Aug 2019 12:45:53 +0000 (13:45 +0100)]
Handle pattern matching entire expressions

15 months agoAdd bindings to pattern matching in case statement typechecking
Luke Lau [Thu, 15 Aug 2019 11:14:35 +0000 (12:14 +0100)]
Add bindings to pattern matching in case statement typechecking

15 months agoFix up typechecking of case
Luke Lau [Thu, 15 Aug 2019 09:47:27 +0000 (10:47 +0100)]
Fix up typechecking of case

15 months agoWIP on typechecking case statements
Luke Lau [Thu, 15 Aug 2019 00:12:31 +0000 (01:12 +0100)]
WIP on typechecking case statements

15 months agoStart work on case statements
Luke Lau [Wed, 14 Aug 2019 15:08:31 +0000 (16:08 +0100)]
Start work on case statements

15 months agoFlesh out stack values within ADTs
Luke Lau [Wed, 14 Aug 2019 14:52:32 +0000 (15:52 +0100)]
Flesh out stack values within ADTs

15 months agoFix typo
Luke Lau [Wed, 14 Aug 2019 14:38:56 +0000 (15:38 +0100)]
Fix typo

15 months agoFix typo
Luke Lau [Wed, 14 Aug 2019 13:12:09 +0000 (14:12 +0100)]
Fix typo

15 months agoCan now pass about adts stored on the stack
Luke Lau [Wed, 14 Aug 2019 13:09:54 +0000 (14:09 +0100)]
Can now pass about adts stored on the stack

15 months agoMove utils into its onw file
Luke Lau [Tue, 13 Aug 2019 15:06:28 +0000 (16:06 +0100)]
Move utils into its onw file

15 months agoCheck for let pattern matches that they have only one sum
Luke Lau [Tue, 13 Aug 2019 13:09:45 +0000 (14:09 +0100)]
Check for let pattern matches that they have only one sum

15 months agoUpdate main.scm to properly read in multi-expression programs
Luke Lau [Tue, 13 Aug 2019 13:03:53 +0000 (14:03 +0100)]
Update main.scm to properly read in multi-expression programs

15 months agoCheck for the right number of bindings in pattern matching
Luke Lau [Tue, 13 Aug 2019 10:21:41 +0000 (11:21 +0100)]
Check for the right number of bindings in pattern matching

15 months agoMove expanding pattern matches to its own transformations
Luke Lau [Mon, 12 Aug 2019 15:26:21 +0000 (16:26 +0100)]
Move expanding pattern matches to its own transformations

I think this will make it easier to understand how pattern matching
works

15 months agoADT codegen working for simple types
Luke Lau [Mon, 12 Aug 2019 12:54:44 +0000 (13:54 +0100)]
ADT codegen working for simple types

15 months agoA bit more work on ADT codegen
Luke Lau [Tue, 6 Aug 2019 15:06:29 +0000 (16:06 +0100)]
A bit more work on ADT codegen

15 months agoDenormalize the type annotated ast, and tag stack values
Luke Lau [Tue, 6 Aug 2019 14:27:58 +0000 (15:27 +0100)]
Denormalize the type annotated ast, and tag stack values

15 months agoAnnotate ast with types for adt codegen
Luke Lau [Tue, 6 Aug 2019 06:58:11 +0000 (07:58 +0100)]
Annotate ast with types for adt codegen

15 months agoFormulate destructors properly
Luke Lau [Sun, 4 Aug 2019 20:22:57 +0000 (21:22 +0100)]
Formulate destructors properly

15 months agoFix let-bindings
Luke Lau [Sun, 4 Aug 2019 18:23:09 +0000 (19:23 +0100)]
Fix let-bindings

15 months agoFix flat-map
Luke Lau [Sun, 4 Aug 2019 18:09:40 +0000 (19:09 +0100)]
Fix flat-map

15 months agoMerge branch 'master' of lukelau.me:/srv/git/scheme
Luke Lau [Sun, 4 Aug 2019 18:04:36 +0000 (19:04 +0100)]
Merge branch 'master' of lukelau.me:/srv/git/scheme

15 months agoAdd test case
Luke Lau [Sun, 4 Aug 2019 18:04:27 +0000 (19:04 +0100)]
Add test case

16 months agoRemove redundant range definition
Luke Lau [Fri, 2 Aug 2019 15:09:07 +0000 (16:09 +0100)]
Remove redundant range definition

16 months agoWIP in let-binding pattern match stuff
Luke Lau [Fri, 2 Aug 2019 15:08:37 +0000 (16:08 +0100)]
WIP in let-binding pattern match stuff

16 months agoStart work on ADTs
Luke Lau [Fri, 2 Aug 2019 14:45:26 +0000 (15:45 +0100)]
Start work on ADTs

16 months agoTidy up
Luke Lau [Fri, 2 Aug 2019 09:27:16 +0000 (10:27 +0100)]
Tidy up

16 months agoAdd clash constraints when merging typechecker-refactor
Luke Lau [Thu, 1 Aug 2019 15:35:05 +0000 (16:35 +0100)]
Add clash constraints when merging

16 months agoWIP on typechecker refactor
Luke Lau [Thu, 1 Aug 2019 15:19:56 +0000 (16:19 +0100)]
WIP on typechecker refactor

Need to figure out the best way to union merge constraints, where they
have the same key but one has a more concrete term

16 months agoFix starting off with the wrong stack index
Luke Lau [Tue, 30 Jul 2019 22:57:23 +0000 (23:57 +0100)]
Fix starting off with the wrong stack index

And thus fix botched backtraces

16 months agoMake base pointer to point to the previous frames base pointer
Luke Lau [Tue, 30 Jul 2019 22:26:41 +0000 (23:26 +0100)]
Make base pointer to point to the previous frames base pointer

Backtrace still looks kinda funny in lldb

16 months agoAdd notes on typechecking
Luke Lau [Tue, 30 Jul 2019 21:25:31 +0000 (22:25 +0100)]
Add notes on typechecking

16 months agoMerge branch 'master' of lukelau.me:/srv/git/scheme
Luke Lau [Tue, 30 Jul 2019 21:25:15 +0000 (22:25 +0100)]
Merge branch 'master' of lukelau.me:/srv/git/scheme

16 months agoAdd support for recursive let binding codegen
Luke Lau [Tue, 30 Jul 2019 21:24:41 +0000 (22:24 +0100)]
Add support for recursive let binding codegen

16 months agoAdd notes on ownership
Luke Lau [Tue, 30 Jul 2019 16:14:56 +0000 (17:14 +0100)]
Add notes on ownership

16 months agoAdd pow test
Luke Lau [Tue, 30 Jul 2019 00:06:10 +0000 (01:06 +0100)]
Add pow test

16 months agoAdd a test for equality
Luke Lau [Mon, 29 Jul 2019 23:49:40 +0000 (00:49 +0100)]
Add a test for equality

16 months agoReset label and lambda counters on compile
Luke Lau [Mon, 29 Jul 2019 23:49:14 +0000 (00:49 +0100)]
Reset label and lambda counters on compile

Also emit some comments in the assembly for debugging

16 months agoFix = codegen
Luke Lau [Mon, 29 Jul 2019 23:48:00 +0000 (00:48 +0100)]
Fix = codegen

Use the sete instruction instead of the just plain wrong subtraction
method

16 months agoFix graph not considering original binds when recursing
Luke Lau [Mon, 29 Jul 2019 13:20:47 +0000 (14:20 +0100)]
Fix graph not considering original binds when recursing

16 months agoUpdate recursive test to simpler example
Luke Lau [Mon, 29 Jul 2019 13:00:00 +0000 (14:00 +0100)]
Update recursive test to simpler example

16 months agoSubstitute constraints after recursive call
Luke Lau [Mon, 29 Jul 2019 12:55:23 +0000 (13:55 +0100)]
Substitute constraints after recursive call

Now it typechecks! Also fix type-equal? being too lenient

16 months agoAdd ast-find
Luke Lau [Mon, 29 Jul 2019 12:44:23 +0000 (13:44 +0100)]
Add ast-find

16 months agoRefactor unify
Luke Lau [Mon, 29 Jul 2019 12:27:38 +0000 (13:27 +0100)]
Refactor unify

16 months agoAlways use PIC for static string codegen
Luke Lau [Mon, 29 Jul 2019 12:18:11 +0000 (13:18 +0100)]
Always use PIC for static string codegen

16 months agoStart thinking about heap allocation
Luke Lau [Mon, 29 Jul 2019 09:20:58 +0000 (10:20 +0100)]
Start thinking about heap allocation

16 months agoAdd dodgy uname based host OS detection
Luke Lau [Mon, 29 Jul 2019 09:08:47 +0000 (10:08 +0100)]
Add dodgy uname based host OS detection

16 months agoSubstitute only the variables in the scc
Luke Lau [Sun, 28 Jul 2019 23:40:30 +0000 (00:40 +0100)]
Substitute only the variables in the scc

This preserves the most generic possible type

Also add a test for type equality (unifies, but only type variable
substitutions)
Fix graph when there's no bindings

16 months agoBreak up lets into SCCs before typechecking
Luke Lau [Sun, 28 Jul 2019 22:56:37 +0000 (23:56 +0100)]
Break up lets into SCCs before typechecking

This means each binding gets the most general type possible.
Part of the work towards supporting typechecking recursive functions

16 months agoAdd some documentation to the abi
Luke Lau [Sun, 28 Jul 2019 12:07:00 +0000 (13:07 +0100)]
Add some documentation to the abi

16 months agoAdd a bunch more tests
Luke Lau [Sat, 27 Jul 2019 23:04:49 +0000 (00:04 +0100)]
Add a bunch more tests

16 months agoFill in missing builtin lambda info
Luke Lau [Sat, 27 Jul 2019 23:04:36 +0000 (00:04 +0100)]
Fill in missing builtin lambda info

16 months agoFix overwriting preserved base pointer in prolog
Luke Lau [Sat, 27 Jul 2019 22:54:16 +0000 (23:54 +0100)]
Fix overwriting preserved base pointer in prolog

Also fix illegal instruction copying over captives

16 months agoAdd new test
Luke Lau [Sat, 27 Jul 2019 22:53:51 +0000 (23:53 +0100)]
Add new test

16 months agoAllocate and pass closures on the heap
Luke Lau [Sat, 27 Jul 2019 22:18:01 +0000 (23:18 +0100)]
Allocate and pass closures on the heap

16 months agoMerge branch 'master' of lukelau.me:/srv/git/scheme
Luke Lau [Wed, 24 Jul 2019 23:59:30 +0000 (00:59 +0100)]
Merge branch 'master' of lukelau.me:/srv/git/scheme

16 months agoMore WIP on closures
Luke Lau [Wed, 24 Jul 2019 15:36:58 +0000 (16:36 +0100)]
More WIP on closures

16 months agoAdd WIP on passing about closures
Luke Lau [Wed, 24 Jul 2019 15:20:12 +0000 (16:20 +0100)]
Add WIP on passing about closures

16 months agoAllocate heap at the start
Luke Lau [Wed, 24 Jul 2019 13:30:34 +0000 (14:30 +0100)]
Allocate heap at the start

16 months agoFix string addressing and clobbered register
Luke Lau [Wed, 24 Jul 2019 13:29:45 +0000 (14:29 +0100)]
Fix string addressing and clobbered register

16 months agoFix static string addressing
Luke Lau [Wed, 24 Jul 2019 12:21:09 +0000 (13:21 +0100)]
Fix static string addressing

16 months agoAdd darwin target support
Luke Lau [Tue, 23 Jul 2019 22:52:21 +0000 (23:52 +0100)]
Add darwin target support

16 months agoMake the ABI respect stack etc.
Luke Lau [Tue, 23 Jul 2019 16:12:18 +0000 (17:12 +0100)]
Make the ABI respect stack etc.

16 months agoUpdate main for codegen changes
Luke Lau [Tue, 23 Jul 2019 10:14:20 +0000 (11:14 +0100)]
Update main for codegen changes

16 months agoAdd strings and print primitive
Luke Lau [Tue, 23 Jul 2019 10:13:51 +0000 (11:13 +0100)]
Add strings and print primitive

16 months agoRemove C dependency, directly emit _start
Luke Lau [Tue, 23 Jul 2019 07:57:52 +0000 (08:57 +0100)]
Remove C dependency, directly emit _start

16 months agoCodegen if statements
Luke Lau [Tue, 23 Jul 2019 00:36:06 +0000 (01:36 +0100)]
Codegen if statements

16 months agoAdd ast-traverse helper
Luke Lau [Tue, 23 Jul 2019 00:35:16 +0000 (01:35 +0100)]
Add ast-traverse helper

16 months agoRefactor ast "pattern matching" to a single function
Luke Lau [Mon, 22 Jul 2019 23:03:24 +0000 (00:03 +0100)]
Refactor ast "pattern matching" to a single function

16 months agoAdd recursive let-bindings
Luke Lau [Mon, 22 Jul 2019 19:41:24 +0000 (20:41 +0100)]
Add recursive let-bindings

16 months agoFix some normalization issues, add codegen tests
Luke Lau [Mon, 22 Jul 2019 01:37:02 +0000 (02:37 +0100)]
Fix some normalization issues, add codegen tests

16 months agoFirst pass at lambdas and closures
Luke Lau [Mon, 22 Jul 2019 00:28:50 +0000 (01:28 +0100)]
First pass at lambdas and closures

16 months agoAdd pretty printing for types
Luke Lau [Sun, 21 Jul 2019 22:49:41 +0000 (23:49 +0100)]
Add pretty printing for types

16 months agoAdd more binary ops
Luke Lau [Sun, 21 Jul 2019 00:40:02 +0000 (01:40 +0100)]
Add more binary ops

16 months agoResolve types in lambda arguments, recursively substitute
Luke Lau [Sat, 20 Jul 2019 16:48:01 +0000 (17:48 +0100)]
Resolve types in lambda arguments, recursively substitute

Also add test

16 months agoNormalize lambdas to be single arguments only
Luke Lau [Sat, 20 Jul 2019 16:02:28 +0000 (17:02 +0100)]
Normalize lambdas to be single arguments only

16 months agoSplit out compiler into codegen and main
Luke Lau [Wed, 17 Jul 2019 23:35:35 +0000 (00:35 +0100)]
Split out compiler into codegen and main

16 months agoFix up codegen-add for vars
Luke Lau [Wed, 17 Jul 2019 22:23:16 +0000 (23:23 +0100)]
Fix up codegen-add for vars

16 months agoAdd let bindings
Luke Lau [Wed, 17 Jul 2019 22:15:15 +0000 (23:15 +0100)]
Add let bindings

Also split out some helpers into a separate ast file
Need to split compiler out into codegen and main

16 months agoAdd .gitignore
Luke Lau [Wed, 17 Jul 2019 20:54:13 +0000 (21:54 +0100)]
Add .gitignore

16 months agoAdd consolidation, tie up with typechecker
Luke Lau [Wed, 17 Jul 2019 20:53:26 +0000 (21:53 +0100)]
Add consolidation, tie up with typechecker

Also normalize program before typechecking

16 months agoStart typechecker
Luke Lau [Wed, 17 Jul 2019 14:07:58 +0000 (15:07 +0100)]
Start typechecker