Commit Graph

233 Commits

Author SHA1 Message Date
Ayke van Laethem a080ce26ef compiler: implement string slicing 2018-09-02 23:46:31 +02:00
Ayke van Laethem 1170cdc21f compiler: implement Field expression
This expression is used when calling a method on an embedded type in a
struct.
2018-09-02 21:14:33 +02:00
Ayke van Laethem 9519f989bc runtime/scheduler: make debugging easier + rename some functions
This shouldn't affect functionality but makes debugging a whole lot
easier. A scheduler is difficult so make it easy to debug.
2018-09-02 19:30:13 +02:00
Ayke van Laethem 8ba3fef7d7 runtime/scheduler: always update task state
Not updating it only saves 4 bytes and makes debugging harder.
2018-09-02 19:28:41 +02:00
Ayke van Laethem d183f12395 nrf: fix sleep
For some reason, the old behavior stopped working at some point (maybe
at the nrfx update?). Change sleep behavior to be more correct.
2018-09-02 19:20:05 +02:00
Ayke van Laethem 1e90858145 Fix blocking functions
Don't think they're blocking when the scheduler has been disabled.
2018-09-02 18:39:39 +02:00
Ayke van Laethem bfff0c33e4 Fix external globals
This broke the allocator on ARM, and with that the blinky example.
2018-09-02 18:37:28 +02:00
Ayke van Laethem 88b6b2e7f5 Optimize/eliminate bounds checking
TODO: do better at it by tracking min/max values of integers. The
following straightforward code doesn't have its bounds checks removed:

    for _, n := range slice {
        println(n)
    }
2018-09-02 16:28:46 +02:00
Ayke van Laethem 42cddd3260 Move runtime.TargetBits out of the compiler 2018-09-02 16:00:31 +02:00
Ayke van Laethem 9fca0e99b5 compiler: use InternalLinkage where appropriate
Internal linkage means that symbols show up in tools like objdump, which
is very useful for debugging.
2018-09-02 15:58:49 +02:00
Ayke van Laethem 58c87329d4 Implement closures and bound methods 2018-09-02 03:39:37 +02:00
Ayke van Laethem 58b853bbef Defer for trivial cases 2018-09-01 17:14:38 +02:00
Ayke van Laethem cd2a9d99a1 Add dummy runtime.SetFinalizer()
Requirement for the os package. The os package can't be compiled yet,
though.
2018-08-31 21:56:46 +02:00
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.
2018-08-31 21:30:21 +02:00
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.
2018-08-31 21:29:34 +02:00
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.
2018-08-31 21:29:13 +02:00
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.
2018-08-31 21:29:06 +02:00
Ayke van Laethem f057d612fc Add support for indexing in an array by a non-constant 2018-08-31 21:20:10 +02:00
Ayke van Laethem a1359d7f64 passes: small code cleanup 2018-08-30 22:54:44 +02:00
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.
2018-08-30 22:53:34 +02:00
Ayke van Laethem b13cfc5255 Be able to deal with anonymous functions 2018-08-30 22:52:00 +02:00
Ayke van Laethem 674b506bb2 Replace compiler hack for sync package with //go:linkname 2018-08-30 22:38:45 +02:00
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!
2018-08-30 22:30:16 +02:00
Ayke van Laethem 771f23e320 Implement //go:linkname pragma 2018-08-30 22:27:19 +02:00
Ayke van Laethem 906e061e37 Replace own dummy syscall with standard library syscall
This makes it easier to support other standard library packages.
2018-08-30 05:58:54 +02:00
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.
2018-08-30 05:54:40 +02:00
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!")
2018-08-30 05:53:22 +02:00
Ayke van Laethem 15f62b29cf Add runtime.GOOS 2018-08-30 05:48:16 +02:00
Ayke van Laethem 82d0d70ba2 Add (hardcoded) runtime.GOROOT()
Necessary for the time package.
2018-08-30 05:41:48 +02:00
Ayke van Laethem cfd20c7a12 Add a number for the "error" type by default 2018-08-30 05:40:11 +02:00
Ayke van Laethem a5252d07f0 Support zero-initialized pointers in globals 2018-08-30 05:38:27 +02:00
Ayke van Laethem 5edf94ea10 Fix named structs inside global named structs 2018-08-30 05:36:44 +02:00
Ayke van Laethem 7956ca2f29 Function pointers in global variables 2018-08-30 05:36:09 +02:00
Ayke van Laethem a4fd096393 Add dummy channel support 2018-08-30 05:32:18 +02:00
Ayke van Laethem 6e0c60a7a1 Some extra header docs 2018-08-30 02:36:13 +02:00
Ayke van Laethem 0b372ba5bd Support initialized map values in another global 2018-08-30 02:32:35 +02:00
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.
2018-08-30 02:26:48 +02:00
Ayke van Laethem d930a9ba16 Implement print() for interface values 2018-08-30 02:20:36 +02:00
Ayke van Laethem 25344bc08f Reorder Program.interpret cases 2018-08-30 02:09:02 +02:00
Ayke van Laethem 75477eb14e Implement global .data-initalized interfaces 2018-08-30 02:08:00 +02:00
Ayke van Laethem d13c124df9 Implement casting from (Unicode) integer to string 2018-08-30 00:36:54 +02:00
Ayke van Laethem fdc56d5940 Implement convert string <- []byte 2018-08-29 23:54:46 +02:00
Ayke van Laethem eed25c78df Clean up ssa.Convert and ssa.ChangeType 2018-08-29 23:36:58 +02:00
Ayke van Laethem 8b95b869ab Implement string concatenation 2018-08-29 22:10:46 +02:00
Ayke van Laethem c912091f8b Add integer key support to hashmap 2018-08-29 21:50:43 +02:00
Ayke van Laethem 8f7db8661b Move string type to runtime in separate file 2018-08-29 20:55:09 +02:00
Ayke van Laethem bf160d096b Move lenType definition to runtime (partially) 2018-08-29 20:48:56 +02:00
Ayke van Laethem abaae5b90d Remove unnecessary compiler workaround
This workaround isn't needed anymore: the feature has been implemented
now.
2018-08-29 20:45:50 +02:00
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.
2018-08-29 20:44:56 +02:00
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.
2018-08-29 20:01:33 +02:00