nit.git
6 years agoAdding code smell detection :
Florian Deljarry [Fri, 26 May 2017 18:39:47 +0000 (20:39 +0200)]
Adding code smell detection :

Long class
Long method parameter list
Long size method
Feature envy
Adding a visitor to analyse the contents of the methods

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

6 years agoMerge: Nitweb: api for code highlighter and nitpicker
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

7 years agoMerge: gamnit: fix nitunit compatibility
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>

7 years agoMerge: core & gamnit: basic support for the characters nbsp, pld and plu
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>

7 years agoMerge: gamnit: cache each camera matrix and avoid boxing floats in matrix operations
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>

7 years agoMerge: Nitlight: implement first_line and last_line
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

7 years agotests: update sav//test_highlight_args1.res
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>

7 years agomatrix: use a custom low-level C structure to avoid boxing of param types
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>

7 years agonitweb: add a low-level `api/light` with highlight
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>

7 years agopopcorn/pop_handlers: HttpResponse::json_* accepts any Serializable
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>

7 years agonitlight_aas: offer a low-level JSON service
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>

7 years agotests: add more tests for nitlight
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>

7 years agonitlight: implements --first-line and --last-line
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>

7 years agogamnit: intro cache for `Camera::mvp_matrix`
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>

7 years agotests: update error_class_glob
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>

7 years agogamnit: support partial line forward and backward
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>

7 years agocore: add non-breaking space to `is_whitespace`
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>

7 years agoMerge: Update legal stuff
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

7 years agoMerge: git-gen-version: Simplify a `if`
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

7 years agoMerge: makefiles: Remove dead code
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

7 years agoMerge: gamnit: make the template project friendlier for new users
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

7 years agoMerge: highlight: give more control to clients and fix regressions
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

7 years agoMerge: Makefile: Don’t invoke `src/Makefile` twice
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

7 years agoapp.nit: add default behavior to `TextAsset::load` for unit tests
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>

7 years agoapp.nit: exit and print an error if not bound to a platform
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>

7 years agoMakefile: Don’t invoke `src/Makefile` twice
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>

7 years agoapp.nit: id the platform at runtime
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>

7 years agogamnit: fix nitunit
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>

7 years agoMakefile: Document `full` more accurately
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>

7 years agohighlight: new_dropdown accepts raw html
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>

7 years agosrc: misc typos, doc and warning fixes
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>

7 years agohighlight: fix broken support for `MVirtualType`
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>

7 years agomodel: bring back call site doc to highlight as `CallSite::mdoc_or_fallback`
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>

7 years agogamnit: shorten template_flat to template and update namespace
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>

7 years agogamnit: add the check rule to the template makefile and remove all
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>

7 years agogamnit & contrib: lower the Android target API
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>

7 years agotinks/Makefile: Remove an undefined phony target
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>

7 years agotests/Makefile: Remove unused macro
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>

7 years agoMakefile: Remove unused macro
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>

7 years agogit-gen-version: Simplify a `if`
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>

7 years agogamnit: template use `mkdir bin` instead of a .gitignore for visibility
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>

7 years agoNOTICE: Update
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>

7 years agolicense: add GNU GPLv3
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>

7 years agoMerge: gamnit: fix gamepad path, pixelated minification, text X align and low-opacity...
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

7 years agoMerge: opportunity: official docker image
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>

7 years agogamnit: fix virtual gamepad asset name
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>

7 years agogamnit: lower transparency threshold to discard fragments
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>

7 years agogamnit: fix X position of first char of a TextSprites
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>

7 years agogamnit: fix pixelated changing only magnification behavior
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>

7 years agoMerge: Check binary files that might be wrongly commited
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>

7 years agoopportunity: official docker image
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>

7 years agoopportunity: optional argument is the iface
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>

7 years agopopcorn/README: remove a unexpected control character ^S
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>

7 years agoremove wrongly committed binary file `lib/core/collection/range`
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>

7 years agojenkins: add checkbinaryfiles.sh
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>

7 years agonitlight: move examples/nitlight_as_a_service stuff to highlight.nit
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>

7 years agoMerge: Nitin catches the runtime errors
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

7 years agonitin/README: runtime errors/aborts return to the interactive loop
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>

7 years agotests: add some runtime error in nitin.input
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>

7 years agonitin: use the secret `catch` block to intercept runtime errors
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>

7 years agoMerge: Catch em all
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

7 years agoMerge: Nitin tests
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

7 years agomisc: update highlighters and indenters
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>

7 years agotests: add test_catch_runtime
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>

7 years agonitc: add `add_raw_throw` so raw_abortions are caught
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>

7 years agonitc: document add_raw_abort
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>

7 years agoniti: make `catch_count` writable
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>

7 years agoniti: keep the fatal_error information
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>

7 years agoniti: all fatal errors are catchable, not just aborts
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>

7 years agotests: to add a nitin engine
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>

7 years agonitin: add option --no-prompt to ease testing
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>

7 years agotests: add tests for nitin
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>

7 years agoMerge: nitin, an interactive interpreter
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>

7 years agocontrib/nitin: new interactive interpreter proof of concept
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>

7 years agonitc/toolcontext: make error_count writable
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>

7 years agonitc/loader: always build the module importation
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>

7 years agonitc/loader: load_rt_module returns the MModule
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>

7 years agonitc/interpreter: NaiveInterpreter::mainmodule is writable
Jean Privat [Fri, 21 Apr 2017 18:56:07 +0000 (14:56 -0400)]
nitc/interpreter: NaiveInterpreter::mainmodule is writable

Signed-off-by: Jean Privat <jean@pryen.org>

7 years agoMerge: gamnit: virtual gamepad
Jean Privat [Tue, 11 Apr 2017 12:30:27 +0000 (08:30 -0400)]
Merge: gamnit: virtual gamepad

Intro an easy to use virtual gamepad for quick ports of desktop games to mobiles devices with a touchscreen only. The gamepad is composed of up to 2 d-pads and up to 6 action buttons. Each button and direction on the pad is mapped to customizable keyboard keys. As such, it is ideal to simulate keyboard inputs on mobile devices.

The `virtual_gamepad` module uses the `app_files` annotation which automatically includes the required PNG files in Android's APK files when the module is imported.

The virtual gamepad is derived from the one in Asteronits, which it replaced. It is now used in Asteronits and Action Nitro, and it will be added to Devil's Avocados as soon as this is merged. The gamepad comes with a selection of button allowing for some customization, however custom buttons are also supported.

Usage example from Devil's Avocados:
~~~
var gamepad = new VirtualGamepad
gamepad.add_dpad
gamepad.add_button("q", gamepad_spritesheet.turn_left)
gamepad.add_button("e", gamepad_spritesheet.turn_right)
gamepad.add_button("space", gamepad_spritesheet.star)
gamepad.visible = true
app.gamepad = gamepad
~~~

And the result, on Android:

![screenshot_20170404-125407](https://cloud.githubusercontent.com/assets/208057/24668912/641d091a-1936-11e7-81ff-eaf026540db6.png)

This version should manage quite well the edge cases of touchscreen controls, which explains the complexity of `virtual_gamepad.nit`. However it is still limited, future work could add:
- Virtual analog joystick, it would be easier to code than the d-pad.
- Abstraction for gamepads (and analog joysticks). This would require unification with the current Android physical gamepad support and implementing desktop physical gamepad support with SDL2.

Pull-Request: #2405
Reviewed-by: Romain Chanoir <romain.chanoir@viacesi.fr>
Reviewed-by: Jean Privat <jean@pryen.org>

7 years agoMerge: gamnit: abstract camera scroll and zoom service
Jean Privat [Tue, 11 Apr 2017 12:30:26 +0000 (08:30 -0400)]
Merge: gamnit: abstract camera scroll and zoom service

The new service `accept_scroll_and_zoom` lets the user adjust the camera using platform specific controls. On desktop computers, the mouse wheel controls the zoom and the middle mouse button drags the world/camera. On Android, a pinch gesture controls the zoom and 2 fingers slide the scroll.

This reuse the previous `accept_two_fingers_motion` and intro an implementation for desktop computers. It will be used by, at least, Sputnit in which it will replace the current implementation which is broken since the upgrade to SDL2.

Pull-Request: #2407

7 years agoMerge: gamnit: intro dynamic resolution support
Jean Privat [Tue, 11 Apr 2017 12:30:24 +0000 (08:30 -0400)]
Merge: gamnit: intro dynamic resolution support

The dynamic resolution can change while the game is running to reduce the load on the GPU when more performance is needed. So an action scene may display tons of explosions and maintain a good framerate by reducing the number of pixels on screen, and a calm scene may gain back the full resolution to better show details.

At this point, the dynamic resolution must be set manually by the user (using something like a video quality slider) or by some heuristic. Future improvement could autodetect skipped frame and set the resolution accordingly.

While the current set of gamnit games rarely overload a GPU, there is many scenarios where a dynamic resolution can be useful: mobile device with a high-resolution display and a limited battery, 4K Android TVs and a VR headset that must maintain 90 FPS.

In Asteronits, the keys `, and .` change the dynamic resolution. Here are a few screenshots of the results.

At 1.0, the native resolution:
![screenshot from 2017-04-06 13 14 08](https://cloud.githubusercontent.com/assets/208057/24768761/cfd3bd6a-1ad1-11e7-993b-5f2e76034a31.png)

At 0.25:
![screenshot from 2017-04-06 13 14 25](https://cloud.githubusercontent.com/assets/208057/24768762/d2292b36-1ad1-11e7-84b2-7b3ab602cd67.png)

At 0.03: (I wouldn't recommend using this value by default)
![screenshot from 2017-04-06 13 14 34](https://cloud.githubusercontent.com/assets/208057/24768771/df0ac0d0-1ad1-11e7-8493-7efb2e7c30fc.png)

Pull-Request: #2408

7 years agogamnit: world_camera position defaults to 1080 pixels in height
Alexis Laferrière [Fri, 31 Mar 2017 16:37:03 +0000 (12:37 -0400)]
gamnit: world_camera position defaults to 1080 pixels in height

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoasteronits: change dynamic resolution with , and .
Alexis Laferrière [Fri, 31 Mar 2017 16:36:16 +0000 (12:36 -0400)]
asteronits: change dynamic resolution with , and .

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agogamnit: intro dynamic resolution support
Alexis Laferrière [Fri, 31 Mar 2017 02:15:23 +0000 (22:15 -0400)]
gamnit: intro dynamic resolution support

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoglesv2: intro param to get names of bound entities
Alexis Laferrière [Fri, 31 Mar 2017 20:27:56 +0000 (16:27 -0400)]
glesv2: intro param to get names of bound entities

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoglesv2: small (but important) fixes
Alexis Laferrière [Fri, 31 Mar 2017 20:07:33 +0000 (16:07 -0400)]
glesv2: small (but important) fixes

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agogamnit: implement `camera_control` for linux
Alexis Laferrière [Wed, 5 Apr 2017 19:10:22 +0000 (15:10 -0400)]
gamnit: implement `camera_control` for linux

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agogamnit: intro `camera_control` an abstraction of `accept_two_fingers_motion`
Alexis Laferrière [Wed, 5 Apr 2017 19:05:45 +0000 (15:05 -0400)]
gamnit: intro `camera_control` an abstraction of `accept_two_fingers_motion`

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agosdl2 & gamnit: add mouse wheel events
Alexis Laferrière [Wed, 5 Apr 2017 19:05:30 +0000 (15:05 -0400)]
sdl2 & gamnit: add mouse wheel events

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoaction_nitro: add f-droid package description file
Alexis Laferrière [Wed, 5 Apr 2017 14:42:16 +0000 (10:42 -0400)]
action_nitro: add f-droid package description file

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agogamnit: fix clearing reference to context in sprites too
Alexis Laferrière [Tue, 4 Apr 2017 21:52:48 +0000 (17:52 -0400)]
gamnit: fix clearing reference to context in sprites too

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agogamnit: add example to `gamnit::keys`
Alexis Laferrière [Sun, 2 Apr 2017 20:48:41 +0000 (16:48 -0400)]
gamnit: add example to `gamnit::keys`

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoMerge: inkscape_tools: support Inkscape versions before and after 0.92
Jean Privat [Wed, 5 Apr 2017 00:30:35 +0000 (20:30 -0400)]
Merge: inkscape_tools: support Inkscape versions before and after 0.92

Inkscape changed the default DPI at version 0.92. This PR improves `svg_to_png_and_nit` to set the default DPI according to the detected Inkscape version, 90 DPI up until version 0.92 and 96 DPI for version 0.92 and later.

Reference: http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92#Important_changes

This is a more portable solution than #2374.

Pull-Request: #2406

7 years agoMerge: GC now collect cycles
Jean Privat [Wed, 5 Apr 2017 00:30:07 +0000 (20:30 -0400)]
Merge: GC now collect cycles

This fixes an issue with the actor model where the GC is unable to collect cycles associated with actors objects and printing an annoying warning

Theses modifs should fix the tests in #2401

The downside is that the finalization is no longer in topological order

Pull-Request: #2404

7 years agoMerge: Some minor fixes to actors examples
Jean Privat [Wed, 5 Apr 2017 00:30:03 +0000 (20:30 -0400)]
Merge: Some minor fixes to actors examples

Tried to follow @tremblay-guy commentaries on #2361  to improve the code of the actors examples

Pull-Request: #2401
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoaction_nitro: intro Android client with gamepad and icon
Alexis Laferrière [Sun, 2 Apr 2017 04:06:43 +0000 (00:06 -0400)]
action_nitro: intro Android client with gamepad and icon

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoaction_nitro: general gameplay tweaks
Alexis Laferrière [Sun, 2 Apr 2017 04:06:29 +0000 (00:06 -0400)]
action_nitro: general gameplay tweaks

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoasteronits: use the new touch gamepad
Alexis Laferrière [Sun, 2 Apr 2017 17:38:28 +0000 (13:38 -0400)]
asteronits: use the new touch gamepad

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agogamnit: intro virtual gamepad
Alexis Laferrière [Sun, 2 Apr 2017 04:05:42 +0000 (00:05 -0400)]
gamnit: intro virtual gamepad

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

7 years agoinkscape_tools: support Inkscape versions before and after 0.92
Alexis Laferrière [Tue, 4 Apr 2017 20:06:41 +0000 (16:06 -0400)]
inkscape_tools: support Inkscape versions before and after 0.92

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>