Ayke van Laethem
13633133a5
Makefile: simplify `make fmt`
There is no C source file anymore `go fmt` will complain about.
6 years ago
Ayke van Laethem
09cbd223c3
compiler: remove -runtime flag
It is not necessary anymore.
6 years ago
Ayke van Laethem
c763e9f1a6
compiler: produce .hex files directly
6 years ago
Ayke van Laethem
f41a8032e7
machine/dummy: add fake button pins
6 years ago
Ayke van Laethem
752332ff13
machine/nrf: implement reading GPIO pins
6 years ago
Ron Evans
ab6757fe11
avr: implement Get() function on AVR, and leave stubs for NRF and dummy machines
Signed-off-by: Ron Evans <ron@hybridgroup.com>
6 years ago
Ayke van Laethem
ec50db729d
compiler: implement slicing slices
6 years ago
Ayke van Laethem
5b3ef2c02f
compiler: fix unreachable type assert
The unreachable instruction is actually a block terminator so may only
be inserted at the end of a basic block. This is not always the case for
type asserts, so don't insert this instruction.
LLVM will hopefully optimize it anyway when it realizes anything after
the panic() call is unreachable.
6 years ago
Ayke van Laethem
9cd7c7f0ba
compiler: fix phi nodes for type asserts
Type asserts insert more basic block, causing phi node values to be
invalid. Fix this by remembering the outgoing LLVM basic block.
6 years ago
Ayke van Laethem
57661a3c76
compiler: fix typeassert without comma-ok for unused types
6 years ago
Ron Evans
d948abdf82
avr: correct register for Set() operation on pins 0-7
Signed-off-by: Ron Evans <ron@hybridgroup.com>
6 years ago
Ayke van Laethem
76e77917d8
targets: move target-specific files to this directory
6 years ago
Ayke van Laethem
e389d38dec
Makefile: improve gen-device* commands
6 years ago
Ayke van Laethem
18b3e8d156
gen-device: move to new tools directory
6 years ago
Ayke van Laethem
a46ed465c5
README: defer has been fully implemented
6 years ago
Ayke van Laethem
422c848163
README: fix nrf example and add arduino example
6 years ago
Ayke van Laethem
7e7502a990
README: update build instructions
6 years ago
Ayke van Laethem
5e9e3bd1a0
Makefile: use the compiler driver directly
6 years ago
Ayke van Laethem
76a513802f
targets/pca10040: support linking from within the compiler
This is kind of dirty with that huge list of linker params, but it works
and it produces smaller object files (probably because GCC is better
optimized for size).
6 years ago
Ayke van Laethem
8ce139284a
all: remove last traces of the C runtime
This increases code size on the nrf, but it is a fixed increase and can
hopefully be reduced in the future.
The Makefile gets a lot smaller with this which is a huge advantage
(less build time complexity).
6 years ago
Ayke van Laethem
f7f7d4cbbc
runtime/nrf: translate nrf sleep function from C to Go
This is the last critical part of the C runtime.
Code size is reduced by 4 bytes for examples/blinky2 (probably due to
inlining) and is unchanged for examples/test.
6 years ago
Ayke van Laethem
67e33ac30e
gen-device-svd: add _Pos and _Msk fields
Without these extra fields, it is impossible to read/write some register
bits correctly.
6 years ago
Ayke van Laethem
2788ab0172
all: rename __reg to __volatile
It is less magical now: it only marks loads and stores as volatile. So
the name '__reg' is a bit wrong now.
6 years ago
Ayke van Laethem
914cd56ca5
all: support Arduino in the compiler driver
This makes sure the compiler itself can build/link an ELF file that
works on an Arduino.
6 years ago
Ayke van Laethem
865520b571
compiler: act as a compiler driver (on unix systems)
As a final step, link the object file with the system compiler/linker.
TODO: cross compiling.
6 years ago
Ayke van Laethem
6ab2b30984
compiler: move output file type selection to main.go
6 years ago
Ayke van Laethem
9bec479041
all: make targets configurable with a JSON file
This is intentionally similar to the target specifications in Rust:
https://doc.rust-lang.org/nightly/nightly-rustc/rustc_target/spec/struct.TargetOptions.html
6 years ago
Ayke van Laethem
20c2552f8a
compiler: add 'run' command for bytecode interpretation
6 years ago
Ayke van Laethem
8362751590
compiler: use runtime.GOOS/GOARCH instead of hardcoding build tags
6 years ago
Ayke van Laethem
e9b0a7d2ae
compiler: improve command line errors
6 years ago
Ayke van Laethem
0779ee6088
compiler: improve command line argument parsing
To get more compatibility with the go command, implement a similar
command line interface (with "tinygo build <package>" etc.).
Other than that, an all-round cleanup of command parsing.
6 years ago
Ayke van Laethem
81b9edbe65
compiler: print() doesn't print spaces between arguments
6 years ago
Ayke van Laethem
8675025fc8
compiler: implement type assert without comma-ok
6 years ago
Ayke van Laethem
31e0662856
runtime: use a specialized runtime panic function
This specifically fixes unix alloc(): previously when allocation fails
it would (recursively) call alloc() again to create an interface due to
lacking escape analysis.
Also, all other cases shouldn't try to allocate just because something
bad happens at runtime.
TODO: implement escape analysis.
6 years ago
Ayke van Laethem
4ad6df3227
all: complete the implementation of interface asserts
Because a few things were left unimplemented it only happened to kind-of
work before in my test cases.
This commit should complete interface-to-interface type asserts.
6 years ago
Ayke van Laethem
61e6f7cf5b
compiler: add debug information for function parameters
Add 'optimized-out' parameters to functions. This might make debugging
slightly easier by showing parameter names.
Sadly I din't get setting variables to work. It might be a bug in
CreateExpression.
6 years ago
Ayke van Laethem
43b8c24226
compiler: implement interface assertions
This is a lot harder than 'regular' type assertions as the actual
methods need to be checked.
6 years ago
Ayke van Laethem
30ac6ec281
compiler: don't try to get pointer methods
I don't know why this was ever needed, but it seems to be incorrect and
unnecessary.
6 years ago
Ayke van Laethem
0f83c3b3c6
compiler: allow copying a string to a slice
Now that strings and slices are similar, this just works.
6 years ago
Ayke van Laethem
41a50ec336
compiler: simplify code for builtin len()
Strings and slices now have the len element at the same location.
6 years ago
Ayke van Laethem
31f494e611
all: swap string from {len, ptr} to {ptr, len} for slice compatibility
Having slices and strings be similar makes other code simpler.
6 years ago
Ayke van Laethem
5aa8b71ae1
compiler: implement builtin copy(dst, src []T)
Not implemented: copying a string into a []byte slice.
6 years ago
Ayke van Laethem
fd9fa038a9
compiler: fix make([]T, ...) type
6 years ago
Ayke van Laethem
01635b5efd
runtime: move panic functions to a separate file
6 years ago
Ayke van Laethem
65358ed3c9
interpreter: don't panic on a nil (*ssa.Call).Object()
6 years ago
Ayke van Laethem
094c5561b6
compiler: implement make([]T, ...)
6 years ago
Ayke van Laethem
ef2c406127
compiler: implement comparing a pointer against nil
6 years ago
Ayke van Laethem
f44d2f718f
compiler: rewrite defer support to better support them
This costs a bit in code size, but should be more flexible for the
future to implement recover() and running deferred functions while
panicking.
6 years ago
Ayke van Laethem
87dd1a1fe5
compiler: fix debug metadata
Not setting the correct debug location at function entry leads to
instructions getting the address of the previously emitted function,
which is of course wrong. LLVM complains about it when validating a
module.
6 years ago
Ayke van Laethem
9101ea11bf
examples: clean up examples and add blinky1 for Arduino
Arduino has trouble supporting anything that's not extremely simple, so
add a simple blinky example for it. Also, it may be useful anyway.
6 years ago