Ayke van Laethem
ab3358e5a3
Add make fmt
2018-08-24 02:59:18 +02:00
Ayke van Laethem
fa12da95e2
Some documentation fixes
2018-08-24 02:56:09 +02:00
Ayke van Laethem
0defed9677
Resolve named types
2018-08-24 02:55:06 +02:00
Ayke van Laethem
1229667f7c
Support pointers in global variables
2018-08-24 02:54:37 +02:00
Ayke van Laethem
68b1100c89
Support maps bigger than 8 elements in .data
2018-08-24 02:53:23 +02:00
Ayke van Laethem
4ef271d4c6
Fix double addition in init map update
2018-08-24 02:48:59 +02:00
Ayke van Laethem
179cf74b01
Implement package-global maps (of max 8 entries)
2018-08-24 00:56:20 +02:00
Ayke van Laethem
2b78b6d7e8
Fix bug in runtime.memzero
...
Not the memory itself, but the byte after the memory was zeroed.
2018-08-23 23:45:39 +02:00
Ayke van Laethem
e884221fad
Implement len() for map types
2018-08-23 23:14:54 +02:00
Ayke van Laethem
005665aee6
Move hashmap creation to runtime
2018-08-23 23:13:38 +02:00
Ayke van Laethem
ae2fc3c8a7
Add support for package-level slice variables
...
They are initialized from .data and not at init time.
2018-08-23 22:08:03 +02:00
Ayke van Laethem
c99faf468d
Refactor initializing of global data
...
This makes it easier to add more types.
2018-08-23 22:04:48 +02:00
Ayke van Laethem
160d532498
Fix init functions
...
This was broken in commit 574c7ec047
and
broke the nrf port.
2018-08-23 21:59:09 +02:00
Ayke van Laethem
ea6355b39e
Make parseConvert not require frame parameter
2018-08-22 23:42:40 +02:00
Ayke van Laethem
d5c7c28135
Simplify some code
2018-08-22 05:14:15 +02:00
Ayke van Laethem
3a6ef38041
Preliminary implementation of a hashmap, unfinished
...
Missing features:
* keys other than strings
* more than 8 values in the hashmap
* growing a map when needed
* initial size hint
* delete(m, key)
* iterators (for range)
* initializing global maps
* ...more?
2018-08-22 04:50:24 +02:00
Ayke van Laethem
8fb9cd4e23
Implement shifting with a differently-sized integer
2018-08-22 04:35:25 +02:00
Ayke van Laethem
337e48270b
Implement comparing a pointer to nil
2018-08-22 04:33:09 +02:00
Ayke van Laethem
c3cb22030f
Implement == and != for strings
2018-08-22 00:56:11 +02:00
Ayke van Laethem
2777f8464e
Implement printing of booleans
2018-08-22 00:54:39 +02:00
Ayke van Laethem
a30ffa5c1e
Revert "Move coroutine passes from Makefile to compiler itself"
...
This reverts commit d9ca5f97fb
.
There is a problem with coroutines that I haven't solved yet. Reverting
makes it work, for now.
Also, use a better coroutines flag for the LLVM opt tool.
2018-08-20 20:24:54 +02:00
Ayke van Laethem
df4ee6e733
passes: Fix bug in SimpleDCE
...
Main was included twice, leading to problems with coroutines.
2018-08-20 20:08:11 +02:00
Ayke van Laethem
6739ad07b2
Update nrfx submodule
2018-08-20 05:21:48 +02:00
Ayke van Laethem
d9ca5f97fb
Move coroutine passes from Makefile to compiler itself
...
This is much more convenient.
2018-08-20 04:31:01 +02:00
Ayke van Laethem
03c8a8bd3a
README: Add build guide
2018-08-20 04:19:54 +02:00
Ayke van Laethem
7460e10894
Add dead code elimination (DCE) pass
...
This should make it much easier (in the future) to use the standard
library when unused functions contain unimplemented features. But more
importantly, it makes later passes better and makes compiling faster by
not having to scan dead code.
2018-08-19 20:47:58 +02:00
Ayke van Laethem
fae4c7f555
Better error messages
2018-08-19 20:43:39 +02:00
Ayke van Laethem
bce33bbf41
Rename {Function,Global}.Name -> LinkName
2018-08-19 20:42:24 +02:00
Ayke van Laethem
3146cc86d4
Move Compiler.program to Program.program
2018-08-19 20:41:05 +02:00
Ayke van Laethem
e18fd6da16
Rename analysis.go -> passes.go
2018-08-19 17:07:48 +02:00
Ayke van Laethem
29d601883b
Implement dummy GOMAXPROCS
...
This compiler targets single-core machines, GOMAXPROCS is thus fixed to
1.
2018-08-18 20:06:59 +02:00
Ayke van Laethem
8b6cb204cd
Basic support for slices
2018-08-18 20:06:35 +02:00
Ayke van Laethem
86a3aea868
Add a LICENSE file
2018-08-18 19:04:14 +02:00
Ayke van Laethem
9aaac8e17b
README: Describe supported targets
2018-08-18 15:59:12 +02:00
Ayke van Laethem
bfe9b52661
README: Mark a few features as supported
2018-08-18 15:58:22 +02:00
Ayke van Laethem
ad9a62f260
Make sure we handle all package members
2018-08-18 01:13:35 +02:00
Ayke van Laethem
a475233f36
Support recursive types
2018-08-18 01:12:52 +02:00
Ayke van Laethem
cad3e03f94
Allow imports from GOROOT
2018-08-18 01:11:50 +02:00
Ayke van Laethem
4af2bcb6a9
Split up tgo.go
2018-08-18 01:11:25 +02:00
Ayke van Laethem
0b98ec83ba
Remove unnecessary check for nil in parseExpr
2018-08-18 00:19:56 +02:00
Ayke van Laethem
70871c98f8
Improve print functions
2018-08-17 23:23:38 +02:00
Ayke van Laethem
62c4c5e90b
go fmt
2018-08-17 23:23:20 +02:00
Ayke van Laethem
574c7ec047
Refactor: Use our own types as much as possible from the analysis
...
Previously, mostly the types from the ssa package were used directly
with the types from analysis.go as an overlay. This commit uses these
types everywhere and renames a few things here and there to make things
clearer.
2018-08-17 23:13:32 +02:00
Ayke van Laethem
a97ca91c1f
compiler: Implement interface calls
...
This is a big combined change. Other changes in this commit:
* Analyze makeinterface and make sure type switches don't include
unnecessary cases.
* Do not include CGo wrapper functions in the analyzer callgraph.
This also avoids some unnecessary type IDs.
* Give all Go named structs a name in LLVM.
* Use such a named struct for compiler-generated task data.
* Use the type and function names defined by the ssa and types
package instead of generating our own.
* Some improvements to function pointers.
* A few other minor improvements.
The one thing lacking here is interface-to-interface assertions.
2018-06-17 15:50:19 +02:00
Ayke van Laethem
62325eab40
compiler: Improve IR/SSA printing
2018-06-09 22:34:46 +02:00
Ayke van Laethem
5acde63f88
compiler: Move isPointer out of Compiler object
2018-06-09 18:02:43 +02:00
Ayke van Laethem
56056934e3
README: expand a bit
2018-06-08 13:43:12 +02:00
Ayke van Laethem
6b3e394dce
compiler: Fix ChangeInterface
...
Keep the concrete type as interface type. Don't use the previous
interface type as type number.
2018-06-08 13:41:13 +02:00
Ayke van Laethem
9ad59bf001
Add README
2018-06-07 18:40:49 +02:00
Ayke van Laethem
90fb0ee4eb
Add AVR support
...
This requires support in LLVM, as AVR support is still experimental. For
example, in bindings/go/build.sh, add
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR to cmake_flags.
2018-06-07 18:35:54 +02:00