405ee70db8Change 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
f209fad91eCan 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
8edfd88c28Fix this handling, other bytecode fixes
Nathan Braswell
2018-03-21 00:00:06 -04:00
91768a042eFix/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
8907e44cadAdded 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
d5fee839f7Add 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
5b9e9b61d1It 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
10cad2ab74Passing as param works too
Nathan Braswell
2018-03-16 01:31:03 -04:00
eaa22e1d11Struct copying should work. Now it's just making them be parameters and return values
Nathan Braswell
2018-03-16 01:20:44 -04:00
5ebb6d5482Start 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
8de92e1c3bAfter 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
c6a43728a5Fix 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
364f4d8a3eSketch out places for struct involvement, write while and for loops
Nathan Braswell
2018-03-13 00:39:16 -04:00
5464555e0daddressof, dereference, and [] implemented
Nathan Braswell
2018-03-10 15:32:51 -05:00
3c4b1864c7Add 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
55a448a3b5Small work towards operators. + workes now
Nathan Braswell
2018-03-08 23:25:48 -05:00
19e97113f1Accidentally 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
fc67aa7ce8Added support for parameters
Nathan Braswell
2018-03-07 22:57:46 -05:00
8da84b56c2working 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
5b46089694Stop 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
8a22263b1dmake JNZ JZ (if was backwards, and this is more convient right now
Nathan Braswell
2018-02-27 21:41:57 -05:00
dad97a25a5If statements work with the addition of jmp and jnz
Nathan Braswell
2018-02-27 21:27:29 -05:00
adcebb3284Move towards more legit stack setup api and registers as registers
Nathan Braswell
2018-02-27 23:53:08 +00:00
00bb4e928cCan eval basic block with variables and return
Nathan Braswell
2018-02-03 22:47:21 -05:00
aad363f631Bytecode work
Nathan Braswell
2018-02-03 18:53:13 -05:00
7850f11297very basic groundwork for bytecode
Nathan Braswell
2018-02-02 00:26:31 -05:00
0132ade7ed10% or so speed up
Nathan Braswell
2017-10-28 15:28:34 -04:00
48b21c54aeMissed 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
13f1e9df89More 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
e70d31a51cAdd 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
1b0dce9ed1Work on function value lower
Nathan Braswell
2017-02-02 00:46:36 -05:00
754ff41226C_generator can call raw function pointers now
Nathan Braswell
2017-01-28 00:09:13 -05:00
dad0f780bbGroundwork for closure lowering, run raw function pointer type
Nathan Braswell
2017-01-26 23:58:48 -05:00
caba8b310fSmall 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
987e6eb9a5Cleaning 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
f0a657e80fFix invalid malloc on slice
Nathan Braswell
2017-01-23 23:00:26 -05:00
ebb34d5ba3Replace 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
21f957195aFix 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
e2639989c9ref_lower now generates C, though a ton of syntax errors
Nathan Braswell
2017-01-20 01:11:06 -05:00
2a53d5539dModify captain.sh to use /usr/bin/env bash
Nathan Braswell
2016-11-23 23:57:01 +00:00
b0d2a6918dRegex rewrite for big speed gain, some extras (--no-c-compile), -O2 is default now
Nathan Braswell
2016-08-02 01:33:16 -07:00
523526f40eImprove 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
c633cb5b04CTCE Pass first implementation, but it's very slow.
Nathan Braswell
2016-07-09 15:33:15 -07:00
fb63eee9e8Commit 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
ddd250e7f3Fixed 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
dc5fe39083Added 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
a5deef8c30Transitioned to using CTCE for Kraken compile information
Nathan Braswell
2016-07-06 00:22:33 -07:00
f71b5f3576Init globals before lowering CTCE, allows CTCE to use imported functions, etc.
Nathan Braswell
2016-07-06 00:16:39 -07:00
cd21e7a1ccAdd in simple CTCE test
Nathan Braswell
2016-07-03 23:07:34 -07:00
067c72f77cFinish transition to the new #link syntax
Nathan Braswell
2016-07-03 22:53:05 -07:00
0f2ac1421aBasic CTCE working! In between commit because #link(a) syntax changed to #link(a)
Nathan Braswell
2016-07-03 22:50:42 -07:00
6fee942756Refactored interpreter into just functions, added a REPL to the main kraken.
Nathan Braswell
2016-07-03 15:32:45 -07:00
87c2b1d2c1Interpreter 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