Ayke van Laethem
58c87329d4
Implement closures and bound methods
6 years ago
Ayke van Laethem
58b853bbef
Defer for trivial cases
6 years ago
Ayke van Laethem
cd2a9d99a1
Add dummy runtime.SetFinalizer()
Requirement for the os package. The os package can't be compiled yet,
though.
6 years ago
Ayke van Laethem
887814a69d
Be able to handle complex64 and complex128 types
No support for complex types yet, but at least be able to handle their
types.
6 years ago
Ayke van Laethem
94ce893ab4
Copy printfloat() from original runtime
I've tried writing my own, but I couldn't make it correct in all cases.
So just copy the one from upstream for now, hopefully to be replaced at
some point.
TODO: add a printfloat32() implementation, now it just casts to float64.
This will be useful for embedded systems that sometimes have float32 but
not float64.
6 years ago
Ayke van Laethem
46d2d2e777
Add support for floats
I'm not sure all operations are supported but the vast majority should
be supported now.
This commit also refactors binop translation.
6 years ago
Ayke van Laethem
3cdf606183
Improve runtime.printuint32: avoid recursion
This reduces size slightly at least on the PCA10040, and is probably
faster and probably uses less stack as well.
6 years ago
Ayke van Laethem
f057d612fc
Add support for indexing in an array by a non-constant
6 years ago
Ayke van Laethem
a1359d7f64
passes: small code cleanup
6 years ago
Ayke van Laethem
734b0cb6bc
Implement runtime functions for reflect
The reflect package isn't supported yet. But at least the Go
parser/typechecker can now deal with it.
6 years ago
Ayke van Laethem
b13cfc5255
Be able to deal with anonymous functions
6 years ago
Ayke van Laethem
674b506bb2
Replace compiler hack for sync package with //go:linkname
6 years ago
Ayke van Laethem
74bd378c29
Replace _llvm_* workaround in the scheduler with //go:linkname
This also removes the need for the _llvm_ special case in the compiler.
And it makes the scheduler code a whole lot nicer!
6 years ago
Ayke van Laethem
771f23e320
Implement //go:linkname pragma
6 years ago
Ayke van Laethem
906e061e37
Replace own dummy syscall with standard library syscall
This makes it easier to support other standard library packages.
6 years ago
Ayke van Laethem
e01259ba77
interpreter: string concatenation
Sometimes strings are concatenated in a way that isn't const-propagated
by the SSA transformation (e.g. the result of a function call).
Concatenate them during init() interpretation.
6 years ago
Ayke van Laethem
16cdffc367
Try to interpret simple function calls in init() functions
This is useful for example for globals like these:
import "errors"
var MyError = errors.New("mymodule: something went wrong!")
6 years ago
Ayke van Laethem
15f62b29cf
Add runtime.GOOS
6 years ago
Ayke van Laethem
82d0d70ba2
Add (hardcoded) runtime.GOROOT()
Necessary for the time package.
6 years ago
Ayke van Laethem
cfd20c7a12
Add a number for the "error" type by default
6 years ago
Ayke van Laethem
a5252d07f0
Support zero-initialized pointers in globals
6 years ago
Ayke van Laethem
5edf94ea10
Fix named structs inside global named structs
6 years ago
Ayke van Laethem
7956ca2f29
Function pointers in global variables
6 years ago
Ayke van Laethem
a4fd096393
Add dummy channel support
6 years ago
Ayke van Laethem
6e0c60a7a1
Some extra header docs
6 years ago
Ayke van Laethem
0b372ba5bd
Support initialized map values in another global
6 years ago
Ayke van Laethem
42711c11e9
Be able to print maps to some degree
Print the number of elements, or nil if it is a nil map.
6 years ago
Ayke van Laethem
d930a9ba16
Implement print() for interface values
6 years ago
Ayke van Laethem
25344bc08f
Reorder Program.interpret cases
6 years ago
Ayke van Laethem
75477eb14e
Implement global .data-initalized interfaces
6 years ago
Ayke van Laethem
d13c124df9
Implement casting from (Unicode) integer to string
6 years ago
Ayke van Laethem
fdc56d5940
Implement convert string <- []byte
6 years ago
Ayke van Laethem
eed25c78df
Clean up ssa.Convert and ssa.ChangeType
6 years ago
Ayke van Laethem
8b95b869ab
Implement string concatenation
6 years ago
Ayke van Laethem
c912091f8b
Add integer key support to hashmap
6 years ago
Ayke van Laethem
8f7db8661b
Move string type to runtime in separate file
6 years ago
Ayke van Laethem
bf160d096b
Move lenType definition to runtime (partially)
6 years ago
Ayke van Laethem
abaae5b90d
Remove unnecessary compiler workaround
This workaround isn't needed anymore: the feature has been implemented
now.
6 years ago
Ayke van Laethem
7991243554
Remove CGo from machine module
It isn't necessary anymore but apparently the Go importer didn't
complain about an unused import.
6 years ago
Ayke van Laethem
d4f5700625
Remove use of CGo in the runtime
CGo depends on syscall, which (in the standard library) depends on sync,
which depends on the runtime. There are also other import cycles. To be
able to use the syscall package from upstream, stop using CGo.
6 years ago
Ayke van Laethem
d620f0d188
Implement multiple return values from functions
Use structs in LLVM as it appears LLVM has no support for multiple
return values (I should look into how Rust does it...).
6 years ago
Ayke van Laethem
ee10162564
Extra check on interface asserts
Interface asserts haven't been implemented yet. Don't produce incorrect
code in that case.
6 years ago
Ayke van Laethem
0c71ed81a4
Rename runtime.itfmethod -> runtime.interfaceMethod
6 years ago
Ayke van Laethem
64e478ef36
Switch to 16-bit typecodes and method IDs
It took Android some time to even hit the 64K limit for regular method
calls, so switching to 16-bit IDs should be fine for method IDs of
interfaces. At least for the time being. When this limit is ever hit,
I'll think of another way, probably involving some platform-dependent
interface code (e.g. microcontrollers won't need 64K of methods) or
detecting the limit at build time.
https://android-developers.googleblog.com/2014/12/google-play-services-and-dex-method.html
Code size isn't changed, probably because the compiler optimizes away
all method calls.
6 years ago
Ayke van Laethem
539de9db9e
Move interface method calls in Go from LLVM IR + documentation
This commit moves the itfmethod call implemented directly in LLVM IR to
a Go implementation in the runtime. Additionally, it fixes variable
names to be more obvious and adds a lot of documentation to explain how
interfaces actually work in TinyGo.
Code size changes for src/examples/hello:
nrf: -144
unix: -93
I'm guessing this code size reduction is a result of removing the
'noinline' function attribute.
6 years ago
Ayke van Laethem
309de00fd6
Simplify function names by removing $async suffix
6 years ago
Ayke van Laethem
58e31fd470
Simplify a bit of code
6 years ago
Ayke van Laethem
de6c20f1bd
Implement untyped bool
6 years ago
Ayke van Laethem
c9e6a52d05
Implement constant slice
It's used somewhere in the sync package, but I'm not sure where.
6 years ago
Ayke van Laethem
9f2bcfe5e3
Implement global interface variable constant
6 years ago