Commit Graph

383 Commits

Author SHA1 Message Date
Marc Vertes
2ef6e459e3 feat: support func fields in literal struct (#103)
* test: make select2 deterministic
2019-02-22 15:44:36 +01:00
Marc Vertes
84baf50370 feat: handle literal composite for struct of imported binary type (#101)
A compositeBin function is added to handle the case of binary type.
2019-02-22 00:19:16 +01:00
Marc Vertes
abe384a765 fix: correct handling of func in struct fields (#99)
Wrap functions in struct fields in `reflect.Value` to have a consistent
representation of function inside and outside the interpreter.

Teach assign to wrap a function node if destination is reflect.Value

The same needs to be done for composite literal, in a next commit.
2019-02-21 14:03:28 +01:00
Marc Vertes
80527bb903 fix: correct handling of struct init from sparse composite (#98)
The field index computed from the key value expression in sparse
composite literal was stored in `node.findex`, corrupting the memory
allocation. It is now stored in a local variable for immediate use.
2019-02-21 11:26:27 +01:00
Marc Vertes
32e0be8b4e fix: improve use of explicit nil (#96)
Type category `UnsetT` is renamed in `NilT`.
Catch invalid use of untyped nil in `:=` expression.
Convert nil to output parameter type when used in `return` expression.
Improve and add relevant unit tests.
2019-02-20 15:44:44 +01:00
Marc Vertes
ef83e43bd7 feat: complete handling of switch case statements (#88) 2019-02-11 18:42:00 +01:00
Marc Vertes
17fa77c693 fix: implement handling of interface types (#80)
Methods are now resolved correctly on interface objects.
2019-02-06 10:21:25 +01:00
Marc Vertes
18330ad7f9 fix: function created by reflect.MakeFunc using closure had wrong type (#75)
Call genNodeWrapper on interpreted function returned by a closure,
itself being wrapped, to ensure that the function can be called from
binary, no matter the level of nesting closures.
2019-02-03 15:38:21 +01:00
Marc Vertes
e347d35c24 fix: correct handling of sparse values in struct of implicit types (#73) 2019-02-01 14:51:17 +01:00
Marc Vertes
1245e29a11 fix: handle implicit array types in composite litteral expressions (#66)
At CFG, in pre-order processing, determine the correct type of CompositeLitExpr from its first child (if it's a type) or from the ancestor node.
Make sure The type is propagated to children so the algorithm works recursively.

Fix also the isType() method to handle case of imported types,
either from source or binary packages.
2019-02-01 10:44:18 +01:00
Marc Vertes
83bc9c5f05 fix: correct wireChild() in case of interleaving of var and func declarations (#65) 2019-01-29 20:51:25 +01:00
Marc Vertes
63732d4326 fix: set type correctly for variable declaration with assignment (#59)
Do not ignore type node when used in a variable declaration with assign.
The source node in a assign node can be the 2nd or the 3rd (the 2nd being the type).
2019-01-28 16:00:15 +01:00
Marc Vertes
5c79a97543 feat: add support for comparison of multiple types (#42)
The code for comparison operators is now generated by genop.
The support for multiple type has been added.
Missing operators <= and >= are now implemented.
2019-01-24 19:13:30 +01:00
Marc Vertes
9c310f12ed feat: add multiple type support for inc, dec (#39) 2019-01-24 11:50:32 +01:00
Marc Vertes
fe8c5191cd fix: implement missing defer of binary method (#33)
If the function to defer is a method of a binary object, the method
function must be resolved during defer. All other cases are already
handled.
2019-01-23 14:30:24 +01:00
Ludovic Fernandez
ff4e9b1918 fix: typo. (#31) 2019-01-23 09:50:44 +01:00
Marc Vertes
2619434b64 feat: Add support for missing assign operators (#30) 2019-01-22 19:08:15 +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
2ef097e334 feat: better error handling in type parsing (#24)
When parsing types, instead of panic, set proper error and diagnostic with source location.
Propagate errors correctly.
2019-01-21 22:03:40 +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
098829d316 style: fix warnings from golangci-lint printed by make check (#11)
* style: fix warnings from golangci-lint printed by `make check`
* style: err assign in if block when possible. Better use of switch/case
* style: err assign in if block when possible
2019-01-16 18:59:24 +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
Fernandez Ludovic
3c00ca4469 fix: quick review. 2019-01-07 11:35:12 +01:00
Marc Vertes
27cbeef38d Methods created in the interpreter can now be used by runtime 2018-12-19 15:10:26 +01:00
Marc Vertes
6a397e2294 Fix golint warnings 2018-12-07 17:37:58 +01:00
Marc Vertes
ea07c12f56 Support incremental parse and eval, and interactive mode 2018-12-07 17:16:11 +01:00
Marc Vertes
6b013ffd35 Simplify export to runtime 2018-12-04 15:14:02 +01:00
Marc Vertes
e508591277 Compute frame types for binary wrapper around closures 2018-12-03 12:05:42 +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
658b32cf1e Handle branching in binary function calls 2018-11-29 16:59:14 +01:00
Marc Vertes
a0b659fa8a Handle branching in boolean functions 2018-11-29 16:36:21 +01:00
Marc Vertes
65933b2441 Test equality on interface, for compatibility with all comparable types.
This is slower than direct test on value, which requires code geneation
(next step).
2018-11-29 13:40:26 +01:00
Marc Vertes
7681be52ca Make values addressable in node wrapper 2018-11-29 10:35:04 +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
ae7515a189 Introduce convertLiteralValue() to simplify automatic type conversion 2018-11-27 14:24:42 +01:00
Marc Vertes
7898bd48e2 Automatic type conversion for literal values in composite expression 2018-11-27 11:29:16 +01:00
Marc Vertes
00d5cad47e Automatic type conversion for literal values in composite sparse assign 2018-11-27 10:55:38 +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