405ee70db8
Change ADTs to generate a copy_construct() that returns this, which should be our new default. Fix storing functions in vectors (lots of bugs here, with funciton types in templates, sizeof, returned by ref, etc. might have missed a few more, put in some warning comments
Nathan Braswell
2018-06-12 23:29:39 -04:00
f209fad91e
Can generate bytecode for files that use a decent bit of the standard library now. Need to finish implementing the external functions, and check to see why we can't print integers. I think it might be that character values aren't being generated correctly
Nathan Braswell
2018-03-21 01:20:28 -04:00
8edfd88c28
Fix this handling, other bytecode fixes
Nathan Braswell
2018-03-21 00:00:06 -04:00
91768a042e
Fix/refactor value handling: value strings are now parsed in ast_transformation and re-escaped in c_generator, and used raw in bytecode_generator
Nathan Braswell
2018-03-19 21:03:06 -04:00
8907e44cad
Added support in bytecode for ext var, some more ext functions, and emitting char* values. These have extra quotes right now, as the value carries around the quotes. Should change that in ast_transformation and c_generator
Nathan Braswell
2018-03-19 00:57:33 -04:00
d5fee839f7
Add in calling of external functions (malloc and free for now), move memory addresses to be real memeory addresses, add support for sizeof compiler intrinsic
Nathan Braswell
2018-03-18 03:42:15 -04:00
5b9e9b61d1
It seems impossible, but I think I might have sucessfully implemented struct returning correctly, the first time, with no compile errors or runtime errors, after 45 minutes starting a little past 4am. Woo!
Nathan Braswell
2018-03-17 04:47:24 -04:00
10cad2ab74
Passing as param works too
Nathan Braswell
2018-03-16 01:31:03 -04:00
eaa22e1d11
Struct copying should work. Now it's just making them be parameters and return values
Nathan Braswell
2018-03-16 01:20:44 -04:00
5ebb6d5482
Start work on structs. Can declare structs and access members. Copying structs and passing them as parameters or returning them doesn't work yet
Nathan Braswell
2018-03-15 00:29:21 -04:00
8de92e1c3b
After reflecting on the difficulties of lowering the increment operators, decided just to implement them in bytecode
Nathan Braswell
2018-03-14 23:43:52 -04:00
c6a43728a5
Fix function calls by giving own reg for return and saving registers first. Use reset_reg more often to try to keep the number of registers that need to be saved down.
Nathan Braswell
2018-03-14 01:16:00 -04:00
364f4d8a3e
Sketch out places for struct involvement, write while and for loops
Nathan Braswell
2018-03-13 00:39:16 -04:00
3c4b1864c7
Add in addi to reduce use of imm, add and or and not to put in negate/subtract (might need it's own opcode, really) as well as and or and not themselves
Nathan Braswell
2018-03-10 00:27:16 -05:00
55a448a3b5
Small work towards operators. + workes now
Nathan Braswell
2018-03-08 23:25:48 -05:00
19e97113f1
Accidentally messed up bootstrapping by returning a long in a function with return type int, which was an error in earlier versions of kraken, but the type check got removed during one of the simplifications, so would error when bootstrapping. Really, this should still be an error - I will try to fix this tonight. To make the boostrap process work, though, I've added an extra bootstrapping stage that builds the version without the return type check along the way.
Nathan Braswell
2018-03-08 09:48:48 -05:00
fc67aa7ce8
Added support for parameters
Nathan Braswell
2018-03-07 22:57:46 -05:00
8da84b56c2
working bytecode with call and a real stack and psudo abi. Found a bug where -= doesn't behave correctly when the lhs is a function returning a reference because it's lowered to a = a - b where a is the same ast_node, I think
Nathan Braswell
2018-03-07 01:58:19 -05:00
5b46089694
Stop declaring variable before assignment - i don't think necessary for recursive closure, def not in current code, and messes up globals with values
Nathan Braswell
2018-03-06 23:30:00 -05:00
8a22263b1d
make JNZ JZ (if was backwards, and this is more convient right now
Nathan Braswell
2018-02-27 21:41:57 -05:00
dad97a25a5
If statements work with the addition of jmp and jnz
Nathan Braswell
2018-02-27 21:27:29 -05:00
adcebb3284
Move towards more legit stack setup api and registers as registers
Nathan Braswell
2018-02-27 23:53:08 +00:00
00bb4e928c
Can eval basic block with variables and return
Nathan Braswell
2018-02-03 22:47:21 -05:00
aad363f631
Bytecode work
Nathan Braswell
2018-02-03 18:53:13 -05:00
7850f11297
very basic groundwork for bytecode
Nathan Braswell
2018-02-02 00:26:31 -05:00
c0209118e5
Small cleanup
Nathan Braswell
2018-01-02 23:22:46 -05:00
241764f1f4
Clean up
Nathan Braswell
2017-12-27 16:49:08 -05:00
d414459313
Fixed it
Nathan Braswell
2017-12-27 16:10:36 -05:00
cb720e5cd6
working on moving rest of obj stuff into obj_lower
Nathan Braswell
2017-11-03 00:39:58 -04:00
5b8ef4ce2e
some cleanup
Nathan Braswell
2017-10-29 17:53:30 -04:00
0132ade7ed
10% or so speed up
Nathan Braswell
2017-10-28 15:28:34 -04:00
48b21c54ae
Missed a change last time - also made all_types in function_value_lower a hash_set for a ~20 sec speedup
Nathan Braswell
2017-10-23 09:50:18 -04:00
13f1e9df89
More clean up; need to add return type checking pass so that can clean up c_generator more.
Nathan Braswell
2017-10-23 01:08:25 -04:00
e70d31a51c
Add in address_of_ensure_variable_lower.krak that makes sure & can always take a reference, even of a constant, etc, and start the cleanup of c_generator that this allows
Nathan Braswell
2017-10-22 21:41:58 -04:00
1b0dce9ed1
Work on function value lower
Nathan Braswell
2017-02-02 00:46:36 -05:00
754ff41226
C_generator can call raw function pointers now
Nathan Braswell
2017-01-28 00:09:13 -05:00
dad0f780bb
Groundwork for closure lowering, run raw function pointer type
Nathan Braswell
2017-01-26 23:58:48 -05:00
caba8b310f
Small speed improvement int trim by using stack (and DFS) instead of queue (and BFS) for remove and collapse, finally fix the unknown escape '\*' error
Nathan Braswell
2017-01-25 01:47:05 -05:00
987e6eb9a5
Cleaning up to bring into main. Speed problem seems to have dissapeard, but we have fixes and the ^ operator in here
Nathan Braswell
2017-01-24 22:11:33 -05:00
ebb34d5ba3
Replace visited list for pass_common with hash_set (which isn't complete, but has the basics) for a massive speedup (6xish)
Nathan Braswell
2017-01-22 10:13:06 -05:00
21f957195a
Fix dreferencing function_call refs. Now need to make sure new pass method works with defer_lower, which currently does very crazy defer double stack chains
Nathan Braswell
2017-01-20 01:31:28 -05:00
e2639989c9
ref_lower now generates C, though a ton of syntax errors
Nathan Braswell
2017-01-20 01:11:06 -05:00
2a53d5539d
Modify captain.sh to use /usr/bin/env bash
Nathan Braswell
2016-11-23 23:57:01 +00:00
b0d2a6918d
Regex rewrite for big speed gain, some extras (--no-c-compile), -O2 is default now
Nathan Braswell
2016-08-02 01:33:16 -07:00
523526f40e
Improve arg parsing a bit, including parsing arbitrary flags for later use. Got (after a bunch of linker pain solved by just linking in LLVM-3.8 plain and not messing with llvm-config at all) a LLVM example working
Nathan Braswell
2016-07-09 23:52:32 -07:00
c633cb5b04
CTCE Pass first implementation, but it's very slow.
Nathan Braswell
2016-07-09 15:33:15 -07:00
fb63eee9e8
Commit pre enabling CTCE pass (which is quite slow, but does work). Had to add walking through cast nodes for finding variables to close over. Also had to remove the static in front of functions to prevent gcc compiling it so that it segfaults (doesn't segfault if compiled with clang, but wanted to make sure.)
Nathan Braswell
2016-07-09 15:08:57 -07:00
ddd250e7f3
Fixed baking the right integer types into values from #ctce, added the rest of the integer type literals (10ul, etc), fixed/added struct padding/alignment in interpreter
Nathan Braswell
2016-07-09 00:45:40 -07:00
dc5fe39083
Added static to non extern non main functions in c_generator giving a 12 second compilation speedup - added a nodes touched pass, commented out in main, and fixed the test_extern test to use the right printf arguments.
Nathan Braswell
2016-07-06 22:46:57 -07:00
a5deef8c30
Transitioned to using CTCE for Kraken compile information
Nathan Braswell
2016-07-06 00:22:33 -07:00
f71b5f3576
Init globals before lowering CTCE, allows CTCE to use imported functions, etc.
Nathan Braswell
2016-07-06 00:16:39 -07:00
cd21e7a1cc
Add in simple CTCE test
Nathan Braswell
2016-07-03 23:07:34 -07:00
067c72f77c
Finish transition to the new #link syntax
Nathan Braswell
2016-07-03 22:53:05 -07:00
0f2ac1421a
Basic CTCE working! In between commit because #link(a) syntax changed to #link(a)
Nathan Braswell
2016-07-03 22:50:42 -07:00
6fee942756
Refactored interpreter into just functions, added a REPL to the main kraken.
Nathan Braswell
2016-07-03 15:32:45 -07:00
87c2b1d2c1
Interpreter up to 71/73 tests passing, the only ones that don't yet are the future ones. Struct size is still wrong though
Nathan Braswell
2016-07-03 01:55:32 -07:00