Commit Graph

85 Commits

Author SHA1 Message Date
Ludovic Fernandez
3c674c2cc4 fix: remove hardcoded port. (#27)
* fix: remove hardcoded port.

* fix: genop.
2019-01-22 15:31:28 +01:00
Marc Vertes
08f4aabdc0 feat: generate operator functions (#25)
Add `cmd/genop` program to generate operator functions in `interp/op.go`.

For each operator, determine its type, handle argument types conversion if necessary.

Arithmetic operators are added for now. Assign and comparison operators coming in a next commit.
2019-01-22 14:10:28 +01:00
Marc Vertes
015bff1599 feat: handle recover builtin (#13)
The recovered state is stored in `Frame`, and captured in `runCfg()`.
`assign()` has been modified to set handle `interface{}` type (not
possible with `reflect`.
2019-01-17 21:15:10 +01:00
Marc Vertes
f4490ff851 Fix: multi-assign expression panic (#15)
* Fix: multi-assign expression panic

The following corrections are done:
* interp/ast.go: in case of ast.ValueSpec node, fix the decision between
multi-assign or single assign
* interp/cfg.go: in multi-assign parse, skip type symbol if it is
present
2019-01-17 20:59:45 +01:00
Marc Vertes
7987a97847 feat(ast): handle defer statement (#8) 2019-01-15 12:33:02 +01:00
Marc Vertes
bd15f88be6 feat: add support for select statement (#5)
* ast: improve error handling
* ast: handle select
* dyngo: set filename of executed script
* cfg: improve error reporting
* Implement select for receiving channels
* feat(select): add support for sending channels in case clauses
* test: improve tests on select
* feat(select): add support for "default" case
2019-01-09 17:45:38 +01:00
Marc Vertes
42e891da02 Fix DO NOT EDIT comment on generated files 2018-12-19 11:41:48 +01:00
Marc Vertes
f8a4aba39b Add interpreter inception example 2018-12-11 17:23:24 -08:00
Marc Vertes
b0ef0a00db Interpreter now exports itself, so scripts can do Eval() too 2018-12-11 10:29:43 -08:00
Marc Vertes
befbe23695 Load binary dependencies with Import() 2018-12-06 16:16:54 +01:00
Marc Vertes
6b013ffd35 Simplify export to runtime 2018-12-04 15:14:02 +01:00
Marc Vertes
4eab01911e Fix range for slices of binary objects 2018-12-02 17:46:27 +01:00
Marc Vertes
487e24e829 Type assertion: add support for 2nd return value 2018-12-01 17:56:55 +01:00
Marc Vertes
c75807dec9 Fix type assertions for runtime objects. Work in progress.
Function typeAssert() now returns the concrete value of interface{}
object defined in the runtime.

What is missing is actual type checking against provided type, and
support for the variant returning 2 values, the concrete value and
boolean status.
2018-12-01 14:49:56 +01:00
Marc Vertes
8bc2f14b78 Fix make to handle both runtime and interpreter defined types 2018-11-30 15:13:05 +01:00
Marc Vertes
5143f37a86 Handle dereference of boolean pointer. Uniformize boolean builtins 2018-11-30 12:08:01 +01:00
Marc Vertes
5c7b669fcc Fix handling chan boolean values 2018-11-29 19:28:12 +01:00
Marc Vertes
eb56b7dbb1 Fix handling array boolean values 2018-11-29 19:15:53 +01:00
Marc Vertes
18258dcd75 Fix handling map boolean values 2018-11-29 18:58:42 +01:00
Marc Vertes
1552194f11 Fix handling of boolean struct fields 2018-11-29 18:28:44 +01:00
Marc Vertes
a0b659fa8a Handle branching in boolean functions 2018-11-29 16:36:21 +01:00
Marc Vertes
5d490cf22b Fix frame init in node wrapper 2018-11-29 09:45:19 +01:00
Marc Vertes
c8fa453ce4 Fix init of zero objects 2018-11-28 17:27:46 +01:00
Marc Vertes
3bd853988b Automatic type conversion for maps and arrays 2018-11-27 15:19:40 +01:00
Marc Vertes
b20edb3b02 Fix handling of variadic arguments 2018-11-26 19:05:29 +01:00
Marc Vertes
726a9e2606 Fix type propagation in context of nested range expressions 2018-11-26 17:33:48 +01:00
Marc Vertes
9cd312611c Fix type conversion and function wrapper 2018-11-23 15:48:22 +01:00
Marc Vertes
a86e5b43a7 Fix automatic type conversion for binary methods 2018-11-22 11:27:40 +01:00
Marc Vertes
d77e2e3f83 Support call to runtime in go statement 2018-11-21 18:06:20 +01:00
Marc Vertes
0e6d068a17 Code cleaning 2018-11-20 17:51:43 +01:00
Marc Vertes
84d8456b92 Fix solving selector expression on binary object 2018-11-20 12:21:01 +01:00
Marc Vertes
503b1d9119 Convert literal values to right type 2018-11-19 13:24:55 +01:00
Marc Vertes
0970329031 Convert literal values to right type 2018-11-19 10:27:54 +01:00
Marc Vertes
8a27260f27 Improve handling of pointer values 2018-11-13 17:56:39 +01:00
Marc Vertes
33c084f721 Fix negate operator 2018-11-13 15:47:54 +01:00
Marc Vertes
6637e21011 Fix a case where a global symbol was overwritten 2018-11-13 14:17:26 +01:00
Marc Vertes
059a071407 Fix calls of functions returning multiple values 2018-11-12 16:00:13 +01:00
Marc Vertes
c5abd4401d fix closure test 2018-11-08 11:35:28 +01:00
Marc Vertes
f2dccec382 Handle method call with receiver type conversion 2018-11-08 11:31:23 +01:00
Marc Vertes
80aa5f330d fix method assignement 2018-11-07 22:49:17 +01:00
Marc Vertes
314ceb15a7 Propagate method receiver info accross assignments 2018-11-05 15:55:14 +01:00
Marc Vertes
9b3c3f27b3 Improve embedded method support 2018-11-02 16:59:55 +01:00
Marc Vertes
20ce2a13dc Improve handling of source file names 2018-11-01 10:05:12 +01:00
Marc Vertes
1592679f36 Rework function calls, in progress 2018-10-31 19:35:26 +01:00
Marc Vertes
8261696d8b Fix closures 2018-10-24 18:41:12 +02:00
Marc Vertes
799e832193 improve handling of closures (in progress) 2018-10-24 15:13:21 +02:00
Marc Vertes
e1221600fd WIP handle runtime values as reflect.Value instead of interface{} 2018-10-04 11:46:07 +02:00
Marc Vertes
69d81e61ae fix import test 2018-10-03 17:24:57 +02:00
Marc Vertes
773aead09d Call closure generation after all CFGs are processed 2018-10-02 11:29:01 +02:00
Marc Vertes
81232a1fab Fix panic for empty statement block 2018-10-01 18:30:41 +02:00