nit.git
8 years agoMerge: Work on the Curl module
Jean Privat [Wed, 10 Jun 2015 01:47:05 +0000 (21:47 -0400)]
Merge: Work on the Curl module

Changes:
* Simplify callbacks so they do not break light FFI only engines.
* Remove about 8 classes and 3 C structures.
* Remove the custom implementation of NativeFile.
* Update style to the latest best practices. Note that it was one of the first large module based on the FFI, a lot has changed since then.
* Revamp and rename CurlMail, its API is now nicer to use:
~~~
import curl

var mail = new CurlMail("sender@example.org", ["to@example.org"], cc=["bob@example.org"])

mail.subject = "Hello From My Nit Program"
mail.body = "<h1>Here you can write HTML stuff.</h1>"

mail.headers_body["Content-Type:"] = """text/html; charset="UTF-8""""
mail.headers_body["Content-Transfer-Encoding:"] = "quoted-printable"

# Set mail server
var error = mail.set_outgoing_server("smtps://smtp.example.org:465", "user@example.org", "mypassword")
assert error == null

# Send
error = mail.execute
assert error == null
~~~

Thoughts on what's to do next:

* Extract the request API so Curl is only an implementation. The abstract API could also be implemented on Android where we can use Java services instead.
* Clean up `CurlHTTPRequest`.
* Use `Error` and differentiate between internal Curl errors and normal transfert failures.
* Replace the C structure linked to reading data and add tests for its usage.
* Add dead simple services: `Text::download: nullable String`, `Text::download_to_file(filepath: Text)`, `Text::download_to_stream(stream: Writer)` or something like that.
* Make more classes of native_curl private as we cannot make the module private because it defines the user-customizable callbacks. Some modules (neo4j) use what would be private, so it requires updating them also.

---

Should fix #936 and other problems when importing but not using Curl.
Also helps #1443 correctly report unsupported programs.

Pull-Request: #1445
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Jean Privat <jean@pryen.org>

8 years agoMerge: Add some collections for java/collections.nit
Jean Privat [Wed, 10 Jun 2015 01:46:52 +0000 (21:46 -0400)]
Merge: Add some collections for java/collections.nit

This PR complete the java collections : ``` int[], short[], long[], boolean[], byte[], char[] ```

Pull-Request: #1435
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: ArthurDelamare <arthur.delamare@viacesi.fr>

8 years agoMerge: Attribute and autoinit annotations
Jean Privat [Wed, 10 Jun 2015 01:46:42 +0000 (21:46 -0400)]
Merge: Attribute and autoinit annotations

A big set of loosely coupled but related changed on the annotations on attributes and methods.
Here is a summary of the changes on the user-side:

* No more special case for the kind of classes, so you can use `autoinit` in interfaces.
* Explicit annotation `autoinit` is understood on attributes and is the default on value-less concrete attribute.
* Abstract attributes are `noautoinit` by default, if `autoinit` is given, it is applied on the setter. This way abstract attributes are basically just a couple of getter-setter. close #1311

This way there is less special cases and behaviors. Still more work is required to finish #1322.

Pull-Request: #1433
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

8 years agoMerge: nitvm: Basic blocks generation and SSA-algorithm
Jean Privat [Wed, 10 Jun 2015 01:46:34 +0000 (21:46 -0400)]
Merge: nitvm: Basic blocks generation and SSA-algorithm

This PR introduces a SSA-algorithm implementation in the nitvm.

First, basic blocks are generated. A basic block is a sequence of instructions without a jump inside.
In this version, basic blocks are generated from the AST and so they contain only the first instruction and the last one.

Then, SSA-algorithm (Single-Static Assignment) is implemented. In SSA algorithm, variables are renamed to have only one assignment per variable.
Each time an assignment is made, a new version of a variable is made.

Some variables (phi-functions) have several assignment and so, several dependances.

The basic block generation and SSA are computed for each method in a lazy way in the nitvm.
The main objective of SSA is to give the dependances for each variable (this will be used in further PR).
This module also collect all object-mechanisms sites during the visit of methods.

Pull-Request: #1425
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

8 years agoMerge: example: add 24 game task of Rosetta code
Jean Privat [Wed, 10 Jun 2015 01:46:20 +0000 (21:46 -0400)]
Merge: example: add 24 game task of Rosetta code

Rosetta code example of 24 game
<http://rosettacode.org/wiki/24_game>

Pull-Request: #1372
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Ait younes Mehdi Adel <overpex@gmail.com>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>

8 years agoMerge: file: fix `simplify_path` behavior for path starting with `.`.
Jean Privat [Wed, 10 Jun 2015 01:46:14 +0000 (21:46 -0400)]
Merge: file: fix `simplify_path` behavior for path starting with `.`.

Before this PR `./` was simplified in `/` which was wrong.

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

Pull-Request: #1368
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>

8 years agoMerge: Date Lib
Jean Privat [Wed, 10 Jun 2015 01:46:08 +0000 (21:46 -0400)]
Merge: Date Lib

les fonctions ce trouve dans le module date_f.nit.

Pull-Request: #1100
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Jean Privat <jean@pryen.org>

8 years agonitvm: Using SSA module in the nitvm
Julien Pagès [Wed, 3 Jun 2015 18:35:06 +0000 (20:35 +0200)]
nitvm: Using SSA module in the nitvm

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agonitvm: A method compile offers a unique entry point for compilation-like mechanisms
Julien Pagès [Fri, 29 May 2015 13:57:53 +0000 (15:57 +0200)]
nitvm: A method compile offers a unique entry point for compilation-like mechanisms

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agofile: fix `simplify_path` behavior for path starting with `.`.
Alexandre Terrasa [Tue, 9 Jun 2015 17:20:34 +0000 (13:20 -0400)]
file: fix `simplify_path` behavior for path starting with `.`.

Before this PR `./` was simplified as `/` which is wrong.

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

8 years agotests: add base_attr_annot.nit
Jean Privat [Wed, 3 Jun 2015 15:23:39 +0000 (11:23 -0400)]
tests: add base_attr_annot.nit

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

8 years agotests: add base_attr_abstract[34].nit
Jean Privat [Wed, 3 Jun 2015 14:24:41 +0000 (10:24 -0400)]
tests: add base_attr_abstract[34].nit

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

8 years agotests: update other tests related to init with setters
Jean Privat [Wed, 27 May 2015 15:21:49 +0000 (11:21 -0400)]
tests: update other tests related to init with setters

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

8 years agotests: add base_init_setter.nit
Jean Privat [Wed, 27 May 2015 15:31:45 +0000 (11:31 -0400)]
tests: add base_init_setter.nit

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

8 years agotests: update base_attr_abstract[12].nit
Jean Privat [Wed, 27 May 2015 15:21:01 +0000 (11:21 -0400)]
tests: update base_attr_abstract[12].nit

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

8 years agomodelize: remove restriction on concrete class in intializer collect
Jean Privat [Wed, 3 Jun 2015 15:24:55 +0000 (11:24 -0400)]
modelize: remove restriction on concrete class in intializer collect

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

8 years agomodelize: error/warning if explicit autoinit on attributes
Jean Privat [Wed, 3 Jun 2015 14:04:55 +0000 (10:04 -0400)]
modelize: error/warning if explicit autoinit on attributes

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

8 years agomodelize: error in `autoinit` is used in class refinement
Jean Privat [Fri, 29 May 2015 16:05:42 +0000 (12:05 -0400)]
modelize: error in `autoinit` is used in class refinement

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

8 years agomodelize: move `autoinit` management on method into AMethPropdef
Jean Privat [Fri, 29 May 2015 16:05:17 +0000 (12:05 -0400)]
modelize: move `autoinit` management on method into AMethPropdef

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

8 years agomodelize: rely on `AAttrPropdef::mreadpropdef` to be the main property
Jean Privat [Wed, 27 May 2015 13:28:06 +0000 (09:28 -0400)]
modelize: rely on `AAttrPropdef::mreadpropdef` to be the main property

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

8 years agomodelize: add `AAttrPropdef::mtype` to factorize the type access
Jean Privat [Wed, 27 May 2015 13:27:12 +0000 (09:27 -0400)]
modelize: add `AAttrPropdef::mtype` to factorize the type access

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

8 years agoMerge: FFI clean up
Jean Privat [Mon, 8 Jun 2015 15:03:10 +0000 (11:03 -0400)]
Merge: FFI clean up

Pull-Request: #1442
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

8 years agosrc/nitni: fix doc of `is_cprimitive`
Alexis Laferrière [Mon, 8 Jun 2015 14:40:35 +0000 (10:40 -0400)]
src/nitni: fix doc of `is_cprimitive`

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

8 years agolib/curl: nullable attributes of CurlHTTPRequest are optionnal
Alexis Laferrière [Mon, 8 Jun 2015 13:48:42 +0000 (09:48 -0400)]
lib/curl: nullable attributes of CurlHTTPRequest are optionnal

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

8 years agolib/curl: make `supporter_outgoing_protocols` public
Alexis Laferrière [Mon, 8 Jun 2015 13:48:12 +0000 (09:48 -0400)]
lib/curl: make `supporter_outgoing_protocols` public

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

8 years agoMerge: Fix support for Byte in the FFI
Jean Privat [Mon, 8 Jun 2015 10:05:21 +0000 (06:05 -0400)]
Merge: Fix support for Byte in the FFI

Pull-Request: #1441
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>

8 years agoMerge: More keep going
Jean Privat [Mon, 8 Jun 2015 10:05:14 +0000 (06:05 -0400)]
Merge: More keep going

This improve the robustness of tools when given --keep-going.
Tools like nitpick, that have --keep-going by default, are more robust and collect more errors.

Moreover, the compiler can now compile simple programs with instructions that fail during the typing phase (most errors like unknown method or bad type).

These instructions are compiled with a run time error instead so the program is still expected to behave in an reliable way.

~~~nit
print 1
fail now
print 2
~~~

~~~sh
$ nitc kg.nit --keep-going
kg.nit:2,1--4: Error: method or variable `fail` unknown in `Sys`.
$ ./kg
1
Runtime error: FATAL: bad statement executed. (kg.nit:1)
~~~

One usage would be to force `c_src` to compile things even if it lags behind.

Pull-Request: #1440
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>

8 years agoMerge: Warn useless do block
Jean Privat [Mon, 8 Jun 2015 10:05:05 +0000 (06:05 -0400)]
Merge: Warn useless do block

Warn useless do block, like

~~~nit
loop do
  print 1
end
~~~

Close #1437

Pull-Request: #1438
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

8 years agoMerge: Love contrib
Jean Privat [Mon, 8 Jun 2015 10:05:00 +0000 (06:05 -0400)]
Merge: Love contrib

One day, a package manager will simplify the installation and the maintenance of third-party projects, libraries and programs in Nit, so that `import foo` will import the project `foo` if installed.

Noways, `contrib` is used as a placeholder for some independent projects that are not mainly a library (or borderline). However, the nature of the Nit language, especially the refinement of class blurry the difference between libraries and programs and make it conceivable to extends an existing program by refining it (or just reuse its base libraries).
However, `import foo` will not work if foo is in contrib, this issue has two current workarounds:

* the user use `-I` with some relative path location in the Makefile, that is not practical because it should be used on each tools thus broke basic manual commands (like nitc on the command line) and automatic commands (like vim+nitpick).
* the project just move itself to lib/ so that client can easily import it, but this is hard to conceptualize for some project like `nitiwiki`

The easy solution to solve this issue is to add `contrib` to the libpath.

Note: the loader still has to be rewritten to be less buggy, more simple and saner. cf #1250

Pull-Request: #1436
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

8 years agolib/github: update use of Curl
Alexis Laferrière [Sun, 7 Jun 2015 18:43:11 +0000 (14:43 -0400)]
lib/github: update use of Curl

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

8 years agocontrib: update users of Curl
Alexis Laferrière [Sun, 7 Jun 2015 18:42:51 +0000 (14:42 -0400)]
contrib: update users of Curl

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

8 years agotests: update test_curl to latest API
Alexis Laferrière [Sun, 7 Jun 2015 16:19:28 +0000 (12:19 -0400)]
tests: update test_curl to latest API

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

8 years agolib/neo4j: fix and update usage of Curl
Alexis Laferrière [Sun, 7 Jun 2015 14:02:21 +0000 (10:02 -0400)]
lib/neo4j: fix and update usage of Curl

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

8 years agolib/curl: revamp the curl_http example
Alexis Laferrière [Sun, 7 Jun 2015 01:13:46 +0000 (21:13 -0400)]
lib/curl: revamp the curl_http example

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

8 years agolib/curl: update users of the custom class and fix wrong types
Alexis Laferrière [Sun, 7 Jun 2015 14:57:01 +0000 (10:57 -0400)]
lib/curl: update users of the custom class and fix wrong types

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

8 years agolib/curl: replace custom classes by containers
Alexis Laferrière [Sun, 7 Jun 2015 14:52:51 +0000 (10:52 -0400)]
lib/curl: replace custom classes by containers

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

8 years agolib/curl: fix implementation of `user_agent`
Alexis Laferrière [Sun, 7 Jun 2015 14:02:54 +0000 (10:02 -0400)]
lib/curl: fix implementation of `user_agent`

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

8 years agolib/curl: revamp and move the curl_mail example to a nitunit
Alexis Laferrière [Sun, 7 Jun 2015 13:29:06 +0000 (09:29 -0400)]
lib/curl: revamp and move the curl_mail example to a nitunit

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

8 years agolib/curl: implement `CurlResponseFailed::to_s`
Alexis Laferrière [Sun, 7 Jun 2015 13:26:17 +0000 (09:26 -0400)]
lib/curl: implement `CurlResponseFailed::to_s`

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

8 years agolib/curl: `CurlMail::execute` may return null
Alexis Laferrière [Sun, 7 Jun 2015 13:24:59 +0000 (09:24 -0400)]
lib/curl: `CurlMail::execute` may return null

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

8 years agolib/curl: use a cached instance of `Curl` in `Sys`
Alexis Laferrière [Sun, 7 Jun 2015 12:24:33 +0000 (08:24 -0400)]
lib/curl: use a cached instance of `Curl` in `Sys`

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

8 years agolib/curl: update module doc
Alexis Laferrière [Sun, 7 Jun 2015 12:24:05 +0000 (08:24 -0400)]
lib/curl: update module doc

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

8 years agolib/curl: make `Curl` a `Finalizable`
Alexis Laferrière [Sun, 7 Jun 2015 01:18:17 +0000 (21:18 -0400)]
lib/curl: make `Curl` a `Finalizable`

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

8 years agolib/curl: revamp CurlMailRequest and rename it CurlMail
Alexis Laferrière [Sun, 7 Jun 2015 01:17:52 +0000 (21:17 -0400)]
lib/curl: revamp CurlMailRequest and rename it CurlMail

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

8 years agolib/curl: remove `CurlMailRequest::add_conventional_space`
Alexis Laferrière [Sun, 7 Jun 2015 01:17:16 +0000 (21:17 -0400)]
lib/curl: remove `CurlMailRequest::add_conventional_space`

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

8 years agolib/curl: use local variable when attribute is nullable
Alexis Laferrière [Sun, 7 Jun 2015 01:16:37 +0000 (21:16 -0400)]
lib/curl: use local variable when attribute is nullable

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

8 years agolib/curl: update more classes to the new inits
Alexis Laferrière [Sun, 7 Jun 2015 01:15:34 +0000 (21:15 -0400)]
lib/curl: update more classes to the new inits

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

8 years agolib/curl: revamp style, doc and implementation of HeaderMap
Alexis Laferrière [Sun, 7 Jun 2015 01:15:00 +0000 (21:15 -0400)]
lib/curl: revamp style, doc and implementation of HeaderMap

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

8 years agolib/curl: make private and update init of HeaderMapIterator
Alexis Laferrière [Sun, 7 Jun 2015 01:14:25 +0000 (21:14 -0400)]
lib/curl: make private and update init of HeaderMapIterator

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

8 years agolib/curl: rename `i_file` to `file`
Alexis Laferrière [Sun, 7 Jun 2015 00:26:32 +0000 (20:26 -0400)]
lib/curl: rename `i_file` to `file`

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

8 years agolib/curl: remove the CurlCallbaksRegisterIntern class
Alexis Laferrière [Sun, 7 Jun 2015 00:24:16 +0000 (20:24 -0400)]
lib/curl: remove the CurlCallbaksRegisterIntern class

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

8 years agolib/curl: replace the `C` prefix by `Native`
Alexis Laferrière [Sun, 7 Jun 2015 00:23:28 +0000 (20:23 -0400)]
lib/curl: replace the `C` prefix by `Native`

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

8 years agolib/curl: rename `prim_curl` to `native` per the nity/native pattern
Alexis Laferrière [Sun, 7 Jun 2015 00:20:11 +0000 (20:20 -0400)]
lib/curl: rename `prim_curl` to `native` per the nity/native pattern

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

8 years agolib/curl: use the prefix `native_` following the nity/native pattern
Alexis Laferrière [Sat, 6 Jun 2015 21:01:02 +0000 (17:01 -0400)]
lib/curl: use the prefix `native_` following the nity/native pattern

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

8 years agolib/curl: use File and NativeFile instead of the local OFile
Alexis Laferrière [Sat, 6 Jun 2015 20:55:43 +0000 (16:55 -0400)]
lib/curl: use File and NativeFile instead of the local OFile

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

8 years agolib/curl: update and clean up the callback system
Alexis Laferrière [Sat, 6 Jun 2015 20:28:05 +0000 (16:28 -0400)]
lib/curl: update and clean up the callback system

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

8 years agolib/curl: update style and add more space between properties
Alexis Laferrière [Sat, 6 Jun 2015 18:08:40 +0000 (14:08 -0400)]
lib/curl: update style and add more space between properties

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

8 years agosrc: prepare `MType::cname_blind` to be more customizable
Alexis Laferrière [Fri, 5 Jun 2015 20:58:05 +0000 (16:58 -0400)]
src: prepare `MType::cname_blind` to be more customizable

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

8 years agosrc/c_tools: don't declare the functions in the header
Alexis Laferrière [Fri, 5 Jun 2015 20:58:31 +0000 (16:58 -0400)]
src/c_tools: don't declare the functions in the header

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

8 years agosrc/java FFI: lib/jvm.nit already specify ldflags
Alexis Laferrière [Fri, 5 Jun 2015 22:31:52 +0000 (18:31 -0400)]
src/java FFI: lib/jvm.nit already specify ldflags

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

8 years agosrc: fix support of Byte in the FFI
Alexis Laferrière [Fri, 5 Jun 2015 17:47:59 +0000 (13:47 -0400)]
src: fix support of Byte in the FFI

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

8 years agotests: test Byte with the FFI
Alexis Laferrière [Sat, 6 Jun 2015 10:56:58 +0000 (06:56 -0400)]
tests: test Byte with the FFI

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

8 years agotests: update style of test_ffi_c_primitives
Alexis Laferrière [Sat, 6 Jun 2015 10:56:31 +0000 (06:56 -0400)]
tests: update style of test_ffi_c_primitives

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

8 years agotests: add test_keep_going.nit
Jean Privat [Fri, 5 Jun 2015 19:55:45 +0000 (15:55 -0400)]
tests: add test_keep_going.nit

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

8 years agorta: do not visit broken NExpr
Jean Privat [Fri, 5 Jun 2015 19:53:20 +0000 (15:53 -0400)]
rta: do not visit broken NExpr

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

8 years agorta: do no visit borken method
Jean Privat [Fri, 5 Jun 2015 19:52:55 +0000 (15:52 -0400)]
rta: do no visit borken method

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

8 years agocompiler: skip compilation of broken methods
Jean Privat [Fri, 5 Jun 2015 19:27:39 +0000 (15:27 -0400)]
compiler: skip compilation of broken methods

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

8 years agotransform: skip transformation of broken expr
Jean Privat [Thu, 4 Jun 2015 02:34:24 +0000 (22:34 -0400)]
transform: skip transformation of broken expr

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

8 years agotyping: improve reliability of `is_typed`.
Jean Privat [Thu, 4 Jun 2015 02:33:41 +0000 (22:33 -0400)]
typing: improve reliability of `is_typed`.

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

8 years agophase: continue the phase if errors occur.
Jean Privat [Thu, 4 Jun 2015 02:32:21 +0000 (22:32 -0400)]
phase: continue the phase if errors occur.

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

8 years agocompiler: runtime error (instead of noop) on dead/invalid code
Jean Privat [Wed, 27 May 2015 20:05:41 +0000 (16:05 -0400)]
compiler: runtime error (instead of noop) on dead/invalid code

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

8 years agonitvm: SSA modules also gives all object-mechanisms sites after the computation
Julien Pagès [Sun, 31 May 2015 17:28:31 +0000 (19:28 +0200)]
nitvm: SSA modules also gives all object-mechanisms sites after the computation

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agonitvm: Utility class for printing basic blocks and SSA to dot files
Julien Pagès [Wed, 29 Apr 2015 15:10:36 +0000 (17:10 +0200)]
nitvm: Utility class for printing basic blocks and SSA to dot files

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agonitvm: Computation of SSA-algorithm after the basic block generation
Julien Pagès [Mon, 1 Jun 2015 13:14:49 +0000 (15:14 +0200)]
nitvm: Computation of SSA-algorithm after the basic block generation

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agonitvm: The position of a Variable in the environment is writable
Julien Pagès [Thu, 23 Apr 2015 15:14:43 +0000 (17:14 +0200)]
nitvm: The position of a Variable in the environment is writable

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agonitvm: Generation of basic blocks from an AST
Julien Pagès [Mon, 1 Jun 2015 13:13:46 +0000 (15:13 +0200)]
nitvm: Generation of basic blocks from an AST

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agonitvm: Class Basic block for preparing SSA
Julien Pagès [Mon, 1 Jun 2015 10:27:30 +0000 (12:27 +0200)]
nitvm: Class Basic block for preparing SSA

Signed-off-by: Julien Pagès <julien.projet@gmail.com>

8 years agoexample: add 24 game task of Rosetta code
Arthur Delamare [Thu, 21 May 2015 19:35:08 +0000 (15:35 -0400)]
example: add 24 game task of Rosetta code

Signed-off-by: Arthur Delamare <arthur.delamare@viacesi.fr>

8 years agoAdd some collections for java/collections.nit
Mehdi [Wed, 3 Jun 2015 18:12:23 +0000 (14:12 -0400)]
Add some collections for java/collections.nit

Signed-off-by: Mehdi <overpex@gmail.com>

8 years agoMerge: Opportunity: Adds total number of participants to a meetup
Jean Privat [Thu, 4 Jun 2015 10:35:16 +0000 (06:35 -0400)]
Merge: Opportunity: Adds total number of participants to a meetup

As requested in #1431, this PR adds the total number of participants in a Meetup, as a number aside from the Total, like:

`Total(nb)`

Closes #1431

Pull-Request: #1432
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>

8 years agoMerge: Floats in exponent notation
Jean Privat [Thu, 4 Jun 2015 10:35:10 +0000 (06:35 -0400)]
Merge: Floats in exponent notation

As a new addition to the parser, as requested in #1261, literal floating-point values in exponent notation.

Pull-Request: #1427
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

8 years agoMerge: Portable stack-traces
Jean Privat [Thu, 4 Jun 2015 10:34:57 +0000 (06:34 -0400)]
Merge: Portable stack-traces

Most detection of the availability of libunwind and the flags to use is moved at the C compilation time (in the Makefile) instead at the Nit compilation time.

Moreover, if libunwind is not available, then stacktraces are just disabled (instead of aborting).

Another advantage is that the generated C is more portable and can be compiled in a different system.
Thus, this will help cross-compilation and should even enable the bootstrap on libunwind-less system like raspberrypi once c_src is regenerated (cf #1149).

The option `--stacktrace` is also replaced with a simpler `--no-stacktrace` for people that want to disable it completely at C-compile time.

Close #1357 and an item in #864.

Pull-Request: #1419
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

8 years agoMerge: Loose Tokens
Jean Privat [Thu, 4 Jun 2015 10:34:34 +0000 (06:34 -0400)]
Merge: Loose Tokens

Another step to simplify the clients of AST: loose tokens.

Some tokens, correctly lexed by the lexer, are discarded by the parser because of (thanks to?) sablecc transformations. Mainly comments and new-lines (EOL) are lost but some other tokens might be also discarded (currently, commas and dots are still lost).

Previously, the full sequence of tokens can still be accessed trough `next_token` and `prev_token` but this mean that tools like nitprettty and nitlight have to maintain two cursors, one on the AST and one on this linked list of tokens and try to keep these two cursors synchronized.

This PR names the concept of *loose* tokens that are lexed tokens but absent from the AST, and attach to each (non-loose) token in the AST a list of loose tokens that precede it (`prev_looses`) and that follow it (`next_looses`).
This way, a visit on the AST can be used to also easily process all the tokens from the source.

Future PRs will try to use this new thing to improve/simplify/whatever nitpretty and nitlight.

Pull-Request: #1346
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>

8 years agomksrc: remove --stacktrace
Jean Privat [Thu, 4 Jun 2015 10:34:02 +0000 (06:34 -0400)]
mksrc: remove --stacktrace

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

8 years agotests: update error message when module not found
Jean Privat [Thu, 4 Jun 2015 00:58:25 +0000 (20:58 -0400)]
tests: update error message when module not found

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

8 years agotests: add base_do_block.nit
Jean Privat [Wed, 3 Jun 2015 23:40:14 +0000 (19:40 -0400)]
tests: add base_do_block.nit

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

8 years agofrontend: warn useless `do` blocks
Jean Privat [Wed, 3 Jun 2015 23:39:48 +0000 (19:39 -0400)]
frontend: warn useless `do` blocks

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

8 years agoloader: teach it to search in src subdirectories
Jean Privat [Wed, 3 Jun 2015 18:47:48 +0000 (14:47 -0400)]
loader: teach it to search in src subdirectories

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

8 years agoloader: add contrib to the default path of projects
Jean Privat [Wed, 3 Jun 2015 18:26:12 +0000 (14:26 -0400)]
loader: add contrib to the default path of projects

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

8 years agoloader: use join_path to search the lib directory
Jean Privat [Wed, 3 Jun 2015 18:25:39 +0000 (14:25 -0400)]
loader: use join_path to search the lib directory

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

8 years agoparser: ComputeProdLocationVisitor also compute *_looses tokens
Jean Privat [Wed, 3 Jun 2015 00:42:03 +0000 (20:42 -0400)]
parser: ComputeProdLocationVisitor also compute *_looses tokens

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

8 years agoparser: the parent of EOF is Start
Jean Privat [Wed, 3 Jun 2015 00:41:13 +0000 (20:41 -0400)]
parser: the parent of EOF is Start

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

8 years agoparser: ComputeProdLocationVisitor remember the last token instead of the location
Jean Privat [Thu, 14 May 2015 23:18:15 +0000 (19:18 -0400)]
parser: ComputeProdLocationVisitor remember the last token instead of the location

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

8 years agoparser: add `is_loose`, `prev_looses` and `next_looses`
Jean Privat [Thu, 14 May 2015 23:17:11 +0000 (19:17 -0400)]
parser: add `is_loose`, `prev_looses` and `next_looses`

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

fixup loos in nodes

8 years agotests: Updated test_float for new literals
Lucas Bajolet [Wed, 3 Jun 2015 15:38:50 +0000 (11:38 -0400)]
tests: Updated test_float for new literals

Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

8 years agoparser: Regenerated for new floats
Lucas Bajolet [Wed, 3 Jun 2015 15:37:41 +0000 (11:37 -0400)]
parser: Regenerated for new floats

Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

8 years agoparser: Updated to support float with exponent part
Lucas Bajolet [Wed, 3 Jun 2015 15:37:24 +0000 (11:37 -0400)]
parser: Updated to support float with exponent part

Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

8 years agoOpportunity: Adds total number of participants to a meetup
Lucas Bajolet [Wed, 3 Jun 2015 15:28:48 +0000 (11:28 -0400)]
Opportunity: Adds total number of participants to a meetup

Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

8 years agoMerge: Manage errors on reading binary data
Jean Privat [Wed, 3 Jun 2015 02:00:06 +0000 (22:00 -0400)]
Merge: Manage errors on reading binary data

Pull-Request: #1430
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>

8 years agoMerge: Better error handling in Socket
Jean Privat [Wed, 3 Jun 2015 02:00:01 +0000 (22:00 -0400)]
Merge: Better error handling in Socket

Errors on both finding a host by its name and on connection are reported with all available details as an `Error`.

Pull-Request: #1428
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>