Commit Graph

81 Commits

Author SHA1 Message Date
Ayke van Laethem 320c583221 Implement printing of int8/uint8/pointers 2018-06-03 16:39:24 +02:00
Ayke van Laethem e171f32493 Implement minimal bump pointer allocator
Useful for MCUs, until a real garbage collector has been implemented.
2018-06-03 16:30:48 +02:00
Ayke van Laethem 16489c0df6 compiler: Workaround for runtime.boundsCheck in runtime dependencies 2018-05-05 19:18:53 +02:00
Ayke van Laethem 01602309fd compiler: Implement register loads and stores
The way it works is somewhat of a hack, though. But it works for now.
2018-05-05 19:17:23 +02:00
Ayke van Laethem 3b4621c215 compiler: Implement XOR (^x) 2018-05-05 18:33:32 +02:00
Ayke van Laethem 877d0817ea compiler: Comments 2018-05-05 18:32:58 +02:00
Ayke van Laethem 84b45a33f1 compiler: Implement initializers for arrays in global structs 2018-05-05 18:30:58 +02:00
Ayke van Laethem db8b6c6900 compiler: Fix package dependency order calculation
The algorithm is now simpler and seems to work better.
2018-05-05 18:29:23 +02:00
Ayke van Laethem 88f143f3e6 compiler: Implement initializers for global structs 2018-05-03 22:51:43 +02:00
Ayke van Laethem b0cb51bdd8 compiler: Do not pre-define runtime functions by the compiler 2018-05-03 21:15:29 +02:00
Ayke van Laethem b11a618d99 compiler: Set actual initializer for global variables
In the Go SSA, global variables are initialized in the init() function
instead of declaring them in the global itself. Work around this oddity
by simply setting the correct initializer when we find this global.

This should produce more efficient code, both in RAM and code size.
Apparently LLVM didn't optimize it away on it's own.
2018-04-29 00:59:28 +02:00
Ayke van Laethem c5a82bb916 compiler: Fix globals so they actually work 2018-04-29 00:49:33 +02:00
Ayke van Laethem 14cbc1555d compiler: Use zeroinitializer instead of memset 2018-04-29 00:49:07 +02:00
Ayke van Laethem 6ed1ca11c7 compiler: Use correct package path for global 2018-04-29 00:47:26 +02:00
Ayke van Laethem 2534111141 compiler: comments 2018-04-27 16:19:57 +02:00
Ayke van Laethem e895372918 compiler: Don't externally link runtime.init
There is no reason to make this exception.
2018-04-27 16:19:29 +02:00
Ayke van Laethem 5bbd41e9fb compiler: Implement -ffunction-sections work 2018-04-27 01:28:14 +02:00
Ayke van Laethem f7c2d0124d compiler: Support bitcasting non-integers 2018-04-27 00:59:27 +02:00
Ayke van Laethem bddb0c49b2 compiler: Add boolean constants 2018-04-27 00:59:01 +02:00
Ayke van Laethem 6ad451a582 compiler: Fix named global path 2018-04-27 00:58:28 +02:00
Ayke van Laethem 4491a63fe8 Add print() for 64-bit integers 2018-04-26 23:46:34 +02:00
Ayke van Laethem d17c21681b compiler: Accept more variable types in print() 2018-04-26 23:41:20 +02:00
Ayke van Laethem d13566b302 compiler: Don't ignore errors in parsePackage 2018-04-26 23:40:19 +02:00
Ayke van Laethem c940617849 compiler: Implement init() 2018-04-26 18:54:46 +02:00
Ayke van Laethem 9a988dd1d1 compiler: Refactor Compiler.Parse: extract parsePackage 2018-04-26 18:52:57 +02:00
Ayke van Laethem 2d19bb11ba compiler: Merge the runtime into the Go code, for better code size 2018-04-26 18:06:54 +02:00
Ayke van Laethem 775445cceb compiler: Reduce code size
Mark most Go functions as private (removing dead code) and configure to
optimize for size.
2018-04-26 17:16:54 +02:00
Ayke van Laethem a446b4de97 Be able to actually run the blinky example on an nRF
runtime.Sleep() doesn't work yet so it prints a lot of data. Also, this
depends on a small patch to nrfx.
2018-04-25 20:35:19 +02:00
Ayke van Laethem e80f06bc5e Implement more type casting 2018-04-25 19:50:46 +02:00
Ayke van Laethem 69140c240b Implement named binop types 2018-04-25 19:49:54 +02:00
Ayke van Laethem b4ba90d7f5 Implement uintptr type 2018-04-25 19:48:42 +02:00
Ayke van Laethem 51b947956f Use Clang as CGo compiler 2018-04-25 19:46:54 +02:00
Ayke van Laethem 93399c009e Emit textual LLVM IR 2018-04-25 19:46:03 +02:00
Ayke van Laethem cefce41df0 Correct function name for calls to other packages 2018-04-22 19:22:12 +02:00
Ayke van Laethem 9d3dfd8868 Make package process order deterministic: based on import order 2018-04-22 19:06:44 +02:00
Ayke van Laethem 03c6b7256e Simplify parseConstInt 2018-04-22 15:59:45 +02:00
Ayke van Laethem 5067891236 Implement unsigned integers 2018-04-22 15:59:17 +02:00
Ayke van Laethem cf9cea7a0d Implement array bounds check 2018-04-21 01:03:05 +02:00
Ayke van Laethem 1f0651c84c Implement string out of bounds checks 2018-04-21 00:40:21 +02:00
Ayke van Laethem db66039dfe Implement panic() 2018-04-21 00:26:14 +02:00
Ayke van Laethem d812873e60 Add support for (zero-initialized) arrays 2018-04-20 23:57:27 +02:00
Ayke van Laethem 02332080e6 Use LLVM API for type size calculations 2018-04-20 23:55:30 +02:00
Ayke van Laethem 217c48f933 Implement interfaces on the string type 2018-04-20 22:42:43 +02:00
Ayke van Laethem fc2eee4ee8 Better error checking on interface conversion 2018-04-20 17:22:20 +02:00
Ayke van Laethem 12eb9eec3c Store LLVM reference instead of function name in Frame 2018-04-20 17:04:06 +02:00
Ayke van Laethem 45e7376f39 Implement print() and println() in Go 2018-04-20 16:32:40 +02:00
Ayke van Laethem ff9e7a8b77 Implement CGo support
This mostly works around the default CGo support: this compiler doesn't
need special wrappers for C functions as it uses the C calling
convention by default.
2018-04-20 16:31:43 +02:00
Ayke van Laethem deadcb8dae Implement lookup on strings (extract byte values)
TODO: bounds checking
2018-04-20 16:20:13 +02:00
Ayke van Laethem 4d33d9d38b Implement -expr 2018-04-20 16:18:54 +02:00
Ayke van Laethem 01d2cc566e Fix type width for pointer types 2018-04-20 16:18:09 +02:00