Jean-Christophe Beaupré [Thu, 18 May 2017 16:39:30 +0000 (12:39 -0400)]
model: Fix minor documentation mistakes
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean Privat [Tue, 16 May 2017 13:28:22 +0000 (09:28 -0400)]
Merge: nitcorn: fix HttpRequest::int_arg
Before this commit, sending `?n=9.5` to a nitcorn application using `int_arg`
caused the app to crash (see the following to_i).
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Pull-Request: #2414
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Tue, 16 May 2017 13:28:17 +0000 (09:28 -0400)]
Merge: Custom serializer
This is an old attempt to add the possibility to have a custom serializer. The idea is that a same set of objects can be serialized in different ways if different serializers are used.
Most of what is needed to do that is already present; the main contribution of this PR is the example that tries to propose a way to do that. The example focuses on 3 simples needs:
* inject a phantom attribute.
when serializing, the custom serializer inject new attributes.
* hide a normally serialized attribute.
when serializing, the custom serializer hides some specific attributes.
* replace a full business object.
instead of serializing an attribute, the custom serializer use a different representation
Pull-Request: #2426
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Tue, 16 May 2017 13:28:15 +0000 (09:28 -0400)]
Merge: lib/core/time: more time related services
Three things here:
* Introduce `Int::sleep` because of my hatred for `1.0.sleep`
* Introduce `get_microtime` because timestamp are better in microseconds
* Introduce `get_millitime` because sometimes, god forbid, we have to deal with Javascript
Also, I'm using `sys/time`, pretty sure I'm doing something that should not be in the core library.
Pull-Request: #2436
Jean Privat [Tue, 16 May 2017 13:28:13 +0000 (09:28 -0400)]
Merge: lib/popcorn: replace json_error method by something more useful
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Pull-Request: #2438
Jean Privat [Tue, 16 May 2017 13:28:10 +0000 (09:28 -0400)]
Merge: lib/json: remove Jsonable and replace it by Serializable
Remove the now useless Jsonable class.
Let's see if something is broken.
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Pull-Request: #2439
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 16 May 2017 13:28:07 +0000 (09:28 -0400)]
Merge: Sha1 is digest
Change receiver of Sha1 methods from String to Text since no service was specific to immutable instances, and add a sha1_is_digest method to Text, to check whether an instance matches the signature of a SHA-1 digest or not.
Pull-Request: #2440
Jean Privat [Tue, 16 May 2017 13:28:00 +0000 (09:28 -0400)]
Merge: separate_compiler: Fix a spelling mistake in a comment
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Pull-Request: #2443
Jean Privat [Tue, 16 May 2017 13:27:58 +0000 (09:27 -0400)]
Merge: Makefile: Fix glob patterns
Forgot the call to `$(wildcard)`.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Pull-Request: #2444
Alexandre Terrasa [Mon, 15 May 2017 23:16:11 +0000 (19:16 -0400)]
examples: rename Int::sleep from FFI examples to Int::sleep_seconds
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean-Christophe Beaupré [Sun, 14 May 2017 22:26:24 +0000 (18:26 -0400)]
Makefile: Fix glob patterns
Forgot the call to `$(wildcard)`.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean-Christophe Beaupré [Sun, 14 May 2017 16:46:43 +0000 (12:46 -0400)]
separate_compiler: Fix a spelling mistake in a comment
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Lucas Bajolet [Sat, 13 May 2017 17:15:20 +0000 (13:15 -0400)]
lib/sha1: add Text::is_sha1_digest
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Sat, 13 May 2017 17:16:21 +0000 (13:16 -0400)]
lib/sha1: replace String by Text for sha1 methods
Since SHA-1 methods might be applied on any kind of Text entity,
we replace the receiver class by Text.
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Alexandre Terrasa [Fri, 12 May 2017 05:29:32 +0000 (01:29 -0400)]
tests: update test for nitserial
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Fri, 12 May 2017 05:29:21 +0000 (01:29 -0400)]
lib/json: remove Jsonable and replace it by Serializable
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Fri, 12 May 2017 01:47:58 +0000 (21:47 -0400)]
lib/popcorn: replace json_error method by something more useful
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Fri, 12 May 2017 00:08:19 +0000 (20:08 -0400)]
lib/core/time: also sleep on integers
It always bothered me to write `1.0.sleep`...
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Fri, 12 May 2017 00:07:33 +0000 (20:07 -0400)]
lib/core/time: introduce get_millitime and get_microtime
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 11 May 2017 22:24:59 +0000 (18:24 -0400)]
nitcorn: fix HttpRequest::int_arg
Before this commit, sending `?n=9.5` to a nitcorn application using `int_arg`
caused the app to crash (see the following to_i).
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 10 May 2017 13:28:41 +0000 (09:28 -0400)]
Merge: nitc: add option --run to execute after a successful compilation.
When the naive interpreter is tooo slooooow but you are too lazy to run the binary yourself.
Pull-Request: #2432
Jean Privat [Wed, 10 May 2017 13:20:53 +0000 (09:20 -0400)]
Merge: Nitweb: api for code highlighter and nitpicker
Only the low-level JSON-REST API is provided. Someone should have to do the rendering.
ping @Morriar
Pull-Request: #2198
Jean Privat [Wed, 10 May 2017 13:20:50 +0000 (09:20 -0400)]
Merge: gamnit: fix nitunit compatibility
Unit tests in the gamnit module were not executed because Sys::setup exited right away when detecting NIT_TESTING. It affected all gamnit games. This PR check is a platform is bound at the beginning of `Sys::main`, allowing unit tests to run (whether they redef `main` or not).
The check is made possible by the new `bound_platform` which tells what platform is currently bound. This value can be useful in some other cases.
This is an alternative to #2394.
Pull-Request: #2420
Reviewed-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 10 May 2017 13:20:49 +0000 (09:20 -0400)]
Merge: core & gamnit: basic support for the characters nbsp, pld and plu
Detect non-breaking spaces in `is_whitespace`, and extend `TextSprites` to accept partial line skips, for sub/superscripts or simple half line skip.
Pull-Request: #2427
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 10 May 2017 13:20:47 +0000 (09:20 -0400)]
Merge: gamnit: cache each camera matrix and avoid boxing floats in matrix operations
Optimize the gamnit framework to avoid excessive garbage collection and a general speedup.
Replace the use of a generic `Array[E]` to implement matrices of floats, as it caused the boxing of each floats at each access. The new custom extern class does not suffer from the boxing and allow for some optimization in C code. This structure is allocated in the Nit GC (hackishly), and doesn't need an explicit liberation. A limitation of the current solution is about the size of the floating points in C, `matrix` uses doubles and `glesv2` floats, the data is copied and cast in C code, this could be optimized further as needed.
Caching each camera matrix avoids recreating them at each frame, which was quite costly, especially for the UI camera that rarely moves. The caching logic is implemented as a distinct class allowing easy debugging.
Pull-Request: #2428
Reviewed-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 10 May 2017 13:20:46 +0000 (09:20 -0400)]
Merge: Nitlight: implement first_line and last_line
The existing implementation was silently droped by a previous refactorization.
Reimplement-it and add regression tests
close #2417
Pull-Request: #2429
Jean Privat [Wed, 10 May 2017 12:51:50 +0000 (08:51 -0400)]
tests: update sav//test_highlight_args1.res
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 9 May 2017 19:27:28 +0000 (15:27 -0400)]
nitc: add option --run to execute after a successful compilation.
Signed-off-by: Jean Privat <jean@pryen.org>
Alexis Laferrière [Sat, 22 Apr 2017 18:36:04 +0000 (14:36 -0400)]
matrix: use a custom low-level C structure to avoid boxing of param types
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Mon, 8 May 2017 19:52:38 +0000 (15:52 -0400)]
serialization: add an example of a custom serializer
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 27 Apr 2017 13:02:37 +0000 (09:02 -0400)]
nitweb: add a low-level `api/light` with highlight
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 5 May 2017 19:23:28 +0000 (15:23 -0400)]
popcorn/pop_handlers: HttpResponse::json_* accepts any Serializable
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 27 Apr 2017 13:00:24 +0000 (09:00 -0400)]
nitlight_aas: offer a low-level JSON service
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 9 May 2017 17:38:03 +0000 (13:38 -0400)]
tests: add more tests for nitlight
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 9 May 2017 17:37:17 +0000 (13:37 -0400)]
nitlight: implements --first-line and --last-line
Signed-off-by: Jean Privat <jean@pryen.org>
Alexis Laferrière [Sat, 22 Apr 2017 17:52:40 +0000 (13:52 -0400)]
gamnit: intro cache for `Camera::mvp_matrix`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Tue, 9 May 2017 12:15:34 +0000 (08:15 -0400)]
tests: update error_class_glob
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Mon, 8 May 2017 23:44:56 +0000 (19:44 -0400)]
gamnit: support partial line forward and backward
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Mon, 8 May 2017 23:43:30 +0000 (19:43 -0400)]
core: add non-breaking space to `is_whitespace`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Mon, 8 May 2017 20:05:35 +0000 (16:05 -0400)]
Merge: Update legal stuff
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Pull-Request: #2416
Jean Privat [Mon, 8 May 2017 20:05:34 +0000 (16:05 -0400)]
Merge: git-gen-version: Simplify a `if`
Extracted from PR #2201.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Pull-Request: #2418
Jean Privat [Mon, 8 May 2017 20:05:33 +0000 (16:05 -0400)]
Merge: makefiles: Remove dead code
Extracted from PR #2201.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Pull-Request: #2419
Jean Privat [Mon, 8 May 2017 20:05:32 +0000 (16:05 -0400)]
Merge: gamnit: make the template project friendlier for new users
The `template` project (previously `template_flat`) is a basic project stub that can be built upon to create a gamnit game. This PR should make it a bit easier to copy and rename the project, ensure compatibility with the nit:latest-full Docker, rely on a visible `mkdir` instead of a hidden `.gitignore`, provide a positive first `make` and suggest to implement unit tests.
Pull-Request: #2421
Jean Privat [Mon, 8 May 2017 20:05:31 +0000 (16:05 -0400)]
Merge: highlight: give more control to clients and fix regressions
Allow clients to send HTML to `new_dropdown`. Fix two regression bugs introduced by #2231: support for `CallSite` and `MVirtualType`. And as usual, also fix a few local warnings and typos.
This is used by my landing page generator script.
Pull-Request: #2423
Jean Privat [Mon, 8 May 2017 20:05:30 +0000 (16:05 -0400)]
Merge: Makefile: Don’t invoke `src/Makefile` twice
Extracted from PR #2201.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Pull-Request: #2424
Jean Privat [Mon, 8 May 2017 19:51:21 +0000 (15:51 -0400)]
serialization: add hooks for a custom serializer
Signed-off-by: Jean Privat <jean@pryen.org>
Alexis Laferrière [Mon, 8 May 2017 00:22:19 +0000 (20:22 -0400)]
app.nit: add default behavior to `TextAsset::load` for unit tests
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sun, 7 May 2017 22:34:37 +0000 (18:34 -0400)]
app.nit: exit and print an error if not bound to a platform
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean-Christophe Beaupré [Mon, 8 May 2017 00:18:20 +0000 (20:18 -0400)]
Makefile: Don’t invoke `src/Makefile` twice
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Alexis Laferrière [Mon, 27 Mar 2017 16:28:49 +0000 (12:28 -0400)]
app.nit: id the platform at runtime
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 6 May 2017 14:15:55 +0000 (10:15 -0400)]
gamnit: fix nitunit
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean-Christophe Beaupré [Sun, 7 May 2017 21:32:21 +0000 (17:32 -0400)]
Makefile: Document `full` more accurately
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Alexis Laferrière [Sat, 6 May 2017 19:32:22 +0000 (15:32 -0400)]
highlight: new_dropdown accepts raw html
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sun, 7 May 2017 17:30:53 +0000 (13:30 -0400)]
src: misc typos, doc and warning fixes
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 6 May 2017 19:29:27 +0000 (15:29 -0400)]
highlight: fix broken support for `MVirtualType`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 6 May 2017 19:27:16 +0000 (15:27 -0400)]
model: bring back call site doc to highlight as `CallSite::mdoc_or_fallback`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sun, 7 May 2017 16:23:03 +0000 (12:23 -0400)]
gamnit: shorten template_flat to template and update namespace
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 6 May 2017 13:49:19 +0000 (09:49 -0400)]
gamnit: add the check rule to the template makefile and remove all
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 6 May 2017 13:44:56 +0000 (09:44 -0400)]
gamnit & contrib: lower the Android target API
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean-Christophe Beaupré [Mon, 22 Aug 2016 15:46:22 +0000 (11:46 -0400)]
tinks/Makefile: Remove an undefined phony target
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean-Christophe Beaupré [Wed, 22 Jun 2016 21:12:49 +0000 (17:12 -0400)]
tests/Makefile: Remove unused macro
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean-Christophe Beaupré [Wed, 22 Jun 2016 21:12:11 +0000 (17:12 -0400)]
Makefile: Remove unused macro
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean-Christophe Beaupré [Wed, 22 Jun 2016 21:10:59 +0000 (17:10 -0400)]
git-gen-version: Simplify a `if`
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Alexis Laferrière [Sat, 6 May 2017 13:36:15 +0000 (09:36 -0400)]
gamnit: template use `mkdir bin` instead of a .gitignore for visibility
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean-Christophe Beaupré [Wed, 3 May 2017 15:30:51 +0000 (11:30 -0400)]
NOTICE: Update
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean-Christophe Beaupré [Wed, 3 May 2017 15:30:26 +0000 (11:30 -0400)]
license: add GNU GPLv3
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean Privat [Mon, 1 May 2017 15:49:51 +0000 (11:49 -0400)]
Merge: gamnit: fix gamepad path, pixelated minification, text X align and low-opacity textures
A few fixes to gamnit:
* Fix path of virtual gamepad texture.
* Fix the look of `pixelated` textures when minified (zoomed out).
* Fix X align of `TextSprites` so the first letter starts from the given coordinate.
* Lower the threshold to discard transparent fragments.
Pull-Request: #2415
Jean Privat [Mon, 1 May 2017 15:49:04 +0000 (11:49 -0400)]
Merge: opportunity: official docker image
Now that nitcorn can listen on any interface, why not having lightweight standalone web applications?
How to build?
1. install docker
2. cd nit/contrib/opportunity/docker
3. docker build --tag opportunity .
How to run?
1. docker run -d -p 8080:8080 --name opportunity opportunity
2. xdg-open http://localhost:8080
3. docker stop opportunity
or just get it from the [hub](https://hub.docker.com/r/nitlang/opportunity/tags/)
1. docker run -d -p 8080:8080 --name opportunity nitlang/opportunity
Pull-Request: #2284
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Jean-Philippe Caissy <jpcaissy@piji.ca>
Alexis Laferrière [Thu, 13 Apr 2017 17:37:33 +0000 (13:37 -0400)]
gamnit: fix virtual gamepad asset name
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 15 Apr 2017 14:33:25 +0000 (10:33 -0400)]
gamnit: lower transparency threshold to discard fragments
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 29 Apr 2017 12:56:38 +0000 (08:56 -0400)]
gamnit: fix X position of first char of a TextSprites
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 29 Apr 2017 12:56:13 +0000 (08:56 -0400)]
gamnit: fix pixelated changing only magnification behavior
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Thu, 27 Apr 2017 20:07:37 +0000 (16:07 -0400)]
Merge: Check binary files that might be wrongly commited
Pull-Request: #2273
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Sat, 20 Aug 2016 01:16:01 +0000 (21:16 -0400)]
opportunity: official docker image
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 27 Apr 2017 14:47:20 +0000 (10:47 -0400)]
opportunity: optional argument is the iface
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 17 Aug 2016 15:04:19 +0000 (11:04 -0400)]
popcorn/README: remove a unexpected control character ^S
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 17 Aug 2016 15:00:34 +0000 (11:00 -0400)]
remove wrongly committed binary file `lib/core/collection/range`
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 17 Aug 2016 14:56:15 +0000 (10:56 -0400)]
jenkins: add checkbinaryfiles.sh
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 27 Apr 2017 12:59:41 +0000 (08:59 -0400)]
nitlight: move examples/nitlight_as_a_service stuff to highlight.nit
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 27 Apr 2017 12:43:38 +0000 (08:43 -0400)]
Merge: Nitin catches the runtime errors
~~~
-->abort
1,1--5: Runtime error: Aborted
abort
^
,---- Stack trace -- - - -
| input-1$Sys$main (1,1--5)
`------------------- - - -
-->fun toto is abstract
-->toto
1,1--20: Runtime error: Abstract method `toto` called on `Sys`
fun toto is abstract
^
,---- Stack trace -- - - -
| input-2$Sys$toto (1,1--20)
| input-3$Sys$main (1,1--4)
`------------------- - - -
-->class A
...var a: String is noautoinit
...fun foo do print a
...end
-->(new A).foo
3,18: Runtime error: Uninitialized attribute _a
fun foo do print a
^
,---- Stack trace -- - - -
| input-4$A$foo (3,18)
| input-5$Sys$main (1,1--11)
`------------------- - - -
-->
~~~
Pull-Request: #2413
Jean Privat [Wed, 26 Apr 2017 19:47:06 +0000 (15:47 -0400)]
nitin/README: runtime errors/aborts return to the interactive loop
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 25 Apr 2017 18:24:56 +0000 (14:24 -0400)]
tests: add some runtime error in nitin.input
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Mon, 24 Apr 2017 20:01:44 +0000 (16:01 -0400)]
nitin: use the secret `catch` block to intercept runtime errors
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 26 Apr 2017 14:38:26 +0000 (10:38 -0400)]
Merge: Catch em all
Extends the `do catch` construct to catch all run time errors.
The interpreter also keep the error information if one wants it.
Pull-Request: #2411
Jean Privat [Wed, 26 Apr 2017 14:38:25 +0000 (10:38 -0400)]
Merge: Nitin tests
Add a basic test for the nit interactive interpreter.
I also added a new engine but most test fails because:
Local variables in main are too much local, so the following fail because `a` is unknown in the second line. I plan to solve this problem.
~~~
var a = 1
print a
~~~
Classes and top-level methods are analysed one after the other so the following fails because `B` is unknown while processing the first class. I do not plan to solve this problem as I think this is the expected behavior when interactive.
~~~
class A
var b: B
end
class B
end
~~~
Pull-Request: #2410
Jean Privat [Tue, 25 Apr 2017 16:42:42 +0000 (12:42 -0400)]
misc: update highlighters and indenters
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 25 Apr 2017 16:40:24 +0000 (12:40 -0400)]
tests: add test_catch_runtime
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 25 Apr 2017 16:04:12 +0000 (12:04 -0400)]
nitc: add `add_raw_throw` so raw_abortions are caught
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 25 Apr 2017 16:02:25 +0000 (12:02 -0400)]
nitc: document add_raw_abort
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Mon, 24 Apr 2017 20:00:24 +0000 (16:00 -0400)]
niti: make `catch_count` writable
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Mon, 24 Apr 2017 19:59:29 +0000 (15:59 -0400)]
niti: keep the fatal_error information
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Mon, 24 Apr 2017 19:58:46 +0000 (15:58 -0400)]
niti: all fatal errors are catchable, not just aborts
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 25 Apr 2017 11:20:55 +0000 (07:20 -0400)]
tests: to add a nitin engine
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 25 Apr 2017 11:20:42 +0000 (07:20 -0400)]
nitin: add option --no-prompt to ease testing
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 25 Apr 2017 00:17:17 +0000 (20:17 -0400)]
tests: add tests for nitin
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Mon, 24 Apr 2017 20:04:40 +0000 (16:04 -0400)]
Merge: nitin, an interactive interpreter
# An experimental Nit interactive interpreter
This tool is outside src/ because:
1. Is is greatly experimental
2. It can depend on readline (GPL3) whereas the rest of nitc is Apache2.
Both are compatible but the final binary result is GLP3.
## Features
* use GNU readline to read lines
* use importation/refinement to handle incremental execution (so basically everything works out of the box)
* maintain an interpreter and live objects (the model grows but the interpreter and runtime data are reused)
Main missing features
* top-level variables are local
* runtime error/aborts just abort the interactive loop
* FFI is strange
* No model/object inspection
## Examples
`-->` is the prompt, `...` the continuation prompt. What follows is the user input.
The rest is the output.
### Basic instructions
~~~raw
$ nitin
--> print 5+2
7
~~~
### Complex and control statements
~~~raw
-->for i in [0..5[ do
...print i
...end
0
1
2
3
4
~~~
You can use `do` blocks to delay the execution and control the scope of variables.
~~~raw
-->do
...var sum=0
...for i in [0..50[ do
...sum += i
...end
...print sum
...end
1225
~~~
### Classes and methods
~~~raw
-->class A
...fun foo do
...print "hello"
...end
...end
-->(new A).foo
hello
~~~
### Error management
In case of static errors, the history (up arrow) can be reused and updated.
~~~raw
-->class
...end
end
^: Syntax Error: unexpected keyword 'end'.
-->class A **up arrow and update, thanks readline**
end
1,7: Redef Error: `A` is an imported class. Add the `redef` keyword to refine it.
class A
^
-->redef class A **up arrow and update again, thanks readline**
redef fun foo do print "Bye"
end
-->(new A).foo
bye
~~~
### Class refinement
Already instantiated objects gain the new methods, attributes and specializations.
However, the new attributes are left uninitialized (default values or init are not recomputed on existing objects)
Top-level methods automatically refine Sys.
~~~raw
-->foo
1,1--3: Error: method or variable `foo` unknown in `Sys`.
foo
^
-->fun foo do
...print "I'm sys"
...end
-->foo
I'm sys
~~~
You can store global variables as attributes of Sys
~~~raw
-->redef class Sys
...var my_int: Int is writable
...end
-->my_int = 5
-->print my_int
5
~~~
### Dynamic importation
~~~
-->print([0..10[.to_a.to_json)
1,20--26: Error: method `to_json` does not exists in `Array[Int]`.
print([0..10[.to_a.to_json)
^
-->import json
-->print([0..10[.to_a.to_json)
[0,1,2,3,4,5,6,7,8,9]
~~~
Pull-Request: #2409
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Fri, 21 Apr 2017 19:01:29 +0000 (15:01 -0400)]
contrib/nitin: new interactive interpreter proof of concept
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 21 Apr 2017 18:59:13 +0000 (14:59 -0400)]
nitc/toolcontext: make error_count writable
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 21 Apr 2017 18:57:08 +0000 (14:57 -0400)]
nitc/loader: always build the module importation
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 21 Apr 2017 18:56:47 +0000 (14:56 -0400)]
nitc/loader: load_rt_module returns the MModule
Signed-off-by: Jean Privat <jean@pryen.org>