nit.git
4 years agoMerge: astbuilder: First implementation of clonable for ast nodes
Jean Privat [Mon, 16 Sep 2019 14:34:36 +0000 (10:34 -0400)]
Merge: astbuilder: First implementation of clonable for ast nodes

## Astbuilder

- Now all the nodes of the ast is cloneable. Currently just a part of node have an implemented clone method.If we clone a node by default (not implemented) the program abort and print the following message: `The clone method is not implemented for ATestNode class.`. Currently the library is in **test** phase. You can have "maybe" some bug with the clone.

- Add a method to make the creation of a callsite easier.

## Futur work

Currently i am working on a test to make sure the result clone is the same as the original.

Pull-Request: #2779
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoMerge: Callref types
Jean Privat [Mon, 16 Sep 2019 14:34:31 +0000 (10:34 -0400)]
Merge: Callref types

Extended the functional type hierarchy to include RoutineRef type (aka function pointer).
Added type resolution on callref expression :

```
import functional
fun toto(x: Int) do print x
var x = &toto
assert x isa ProcRef1[Int]
```

Pull-Request: #2791

4 years agotyping: Added typing resolution for `ACallrefExpr`
Louis-Vincent Boudreault [Tue, 27 Aug 2019 19:17:48 +0000 (15:17 -0400)]
typing: Added typing resolution for `ACallrefExpr`

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

4 years agotests: Add test_astbuilder to the skip list of nitcg niti nitvm
Florian Deljarry [Wed, 28 Aug 2019 13:41:16 +0000 (09:41 -0400)]
tests: Add test_astbuilder to the skip list of nitcg niti nitvm

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

4 years agotest_astbuilder: Add a testing tool for the astbuilder
Florian Deljarry [Mon, 26 Aug 2019 21:05:20 +0000 (17:05 -0400)]
test_astbuilder: Add a testing tool for the astbuilder

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

4 years agoastbuilder: First implementation of clonable for ast nodes
Florian Deljarry [Tue, 13 Aug 2019 16:46:35 +0000 (12:46 -0400)]
astbuilder: First implementation of clonable for ast nodes

Add implementation of `clone` method for the ast nodes.

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

4 years agoMerge: Can comment annotations
Jean Privat [Thu, 5 Sep 2019 19:54:04 +0000 (15:54 -0400)]
Merge: Can comment annotations

This was hard but the solution is easier than expected.
Annotations accepted documentation comments but other comments were refused. This should allow all configuration of comments.

close #2786

Pull-Request: #2789
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: model: Add `mpackage` importation hierarchy
Jean Privat [Thu, 5 Sep 2019 19:53:59 +0000 (15:53 -0400)]
Merge: model: Add `mpackage` importation hierarchy

Added a `mpackage_importation_hierarchy` graph to keep the hierarchy of packages. The packages relations are defined when the `set_imported_mmodules` is called.

This pr is related to the programming by contract. The objective is to determine when the use of a contract is necessary in a given context.

Note in this graph all the packages are in relation with themself.

example for all nitc package hierarchy :

![](https://sendeyo.com/up/d/514e168e33)

This pr has a dependency with the #2784

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

4 years agoMerge: Functional api
Jean Privat [Thu, 5 Sep 2019 19:53:49 +0000 (15:53 -0400)]
Merge: Functional api

The functional API provides a type hierarchy for functional types, new `Iterator` services (like pipeline)
and in place `Map` manipulation through `Entry` API.

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

4 years agocheck_annotation: adding no_contract
Florian Deljarry [Sun, 26 May 2019 17:17:09 +0000 (13:17 -0400)]
check_annotation: adding no_contract

Adding option to remove contract on a specific annotated method

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

4 years agocheck_annotation: Adding ensures annotation
Florian Deljarry [Thu, 25 Apr 2019 20:24:03 +0000 (16:24 -0400)]
check_annotation: Adding ensures annotation

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

4 years agocheck_annotation: Adding expects annotation
Florian Deljarry [Fri, 19 Apr 2019 21:39:24 +0000 (17:39 -0400)]
check_annotation: Adding expects annotation

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

4 years agocode_gen: Adding contracts phase
Florian Deljarry [Fri, 19 Apr 2019 21:38:42 +0000 (17:38 -0400)]
code_gen: Adding contracts phase

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

4 years agoscope: Adding variable verification
Florian Deljarry [Fri, 19 Apr 2019 21:32:27 +0000 (17:32 -0400)]
scope: Adding variable verification

If the variable already exists it will be used

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

4 years agomodelize_property: Adding unsafe method to register an mpropdef
Florian Deljarry [Fri, 19 Apr 2019 21:25:02 +0000 (17:25 -0400)]
modelize_property: Adding unsafe method to register an mpropdef

Add method to register an MPropDef with an APropdef without verification

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

4 years agofunctional: Added universal types to callref
Louis-Vincent Boudreault [Tue, 27 Aug 2019 19:00:28 +0000 (15:00 -0400)]
functional: Added universal types to callref

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

4 years agofunctional: Added functional lib
Louis-Vincent Boudreault [Fri, 5 Jul 2019 14:02:18 +0000 (10:02 -0400)]
functional: Added functional lib

- New types hierarchy to manage functions.
- New Pipeline-like API for `Iterator` based on functional type.

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

4 years agonitweb: Update to use packages importation graph
Florian Deljarry [Wed, 28 Aug 2019 02:38:53 +0000 (22:38 -0400)]
nitweb: Update to use packages importation graph

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

4 years agonitdoc: Update to use packages importation graph
Florian Deljarry [Wed, 28 Aug 2019 01:56:10 +0000 (21:56 -0400)]
nitdoc: Update to use packages importation graph

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

4 years agotest_commands_catalog: Update to use packages importation graph
Florian Deljarry [Wed, 28 Aug 2019 01:12:32 +0000 (21:12 -0400)]
test_commands_catalog: Update to use packages importation graph

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

4 years agodoc/static_structure: Update package importation graph
Florian Deljarry [Tue, 27 Aug 2019 23:41:22 +0000 (19:41 -0400)]
doc/static_structure: Update package importation graph

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

4 years agonitx: Remove the construction of packages importation graph
Florian Deljarry [Tue, 27 Aug 2019 21:17:29 +0000 (17:17 -0400)]
nitx: Remove the construction of packages importation graph

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

4 years agonitcatalog: Update to use the package graph
Florian Deljarry [Mon, 26 Aug 2019 15:07:18 +0000 (11:07 -0400)]
nitcatalog: Update to use the package graph

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

4 years agocatalog: Update to use the package graph
Florian Deljarry [Mon, 26 Aug 2019 15:04:20 +0000 (11:04 -0400)]
catalog: Update to use the package graph

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

4 years agodigraph: Add feature to get all successors and predecessors
Florian Deljarry [Mon, 26 Aug 2019 14:56:13 +0000 (10:56 -0400)]
digraph: Add feature to get all successors and predecessors

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

4 years agommodule: Added support of package importation
Florian Deljarry [Sat, 17 Aug 2019 17:40:54 +0000 (13:40 -0400)]
mmodule: Added support of package importation

Now when the imported `mmodules` is added to the `mmodule_importation_hierarchy`,
the `mmodules` package it's also added to `mpackage_importation_hierarchy`.

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

4 years agompackage: Add `mpackage` importation graph
Florian Deljarry [Sat, 17 Aug 2019 17:34:29 +0000 (13:34 -0400)]
mpackage: Add `mpackage` importation graph

Add the attribute `mpackage_importation_graph`. Each package is in relation with itself.

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

4 years agotests: add comments in syntax_annotations2.nit
Jean Privat [Mon, 26 Aug 2019 21:09:44 +0000 (17:09 -0400)]
tests: add comments in syntax_annotations2.nit

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

4 years agoparser: regenerate with comments in line annotations
Jean Privat [Mon, 26 Aug 2019 21:05:20 +0000 (17:05 -0400)]
parser: regenerate with comments in line annotations

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

4 years agogrammar: enable full comments in line annotations (is ... end)
Jean Privat [Mon, 26 Aug 2019 21:04:57 +0000 (17:04 -0400)]
grammar: enable full comments in line annotations (is ... end)

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

4 years agoMerge: digraph: Implementation of a reflexive directed graph
Jean Privat [Mon, 26 Aug 2019 15:22:34 +0000 (11:22 -0400)]
Merge: digraph: Implementation of a reflexive directed graph

Add the implementation of a reflexive directed graph. Added element is in relation with itself (ie if the graph has `u` node is implies `self.has_arc(u,u) == true`)

Pull-Request: #2784
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: Proposal for lambda expression syntax
Jean Privat [Fri, 23 Aug 2019 13:25:28 +0000 (09:25 -0400)]
Merge: Proposal for lambda expression syntax

This extends the Nit syntax with lambdas expressions.

Lambdas are basically anonymous functions, so just accept functions without a name as expressions.

~~~nit
var x = fun(i: Int): Int do
    return i + 1
end
# or on a single line
var x = fun(i: Int): Int do return i + 1 end
~~~

`fun`, `do` and `end` are mandatory, the rest is optional

~~~nit
var x = fun do end
~~~

The main weirdness is the mandatory `end` that makes the following invalid

~~~nit
# invalid:
var x = (fun(i: Int): Int do return i + 1) # missing `end`, unexpected `)`
~~~

There is no semantic yet, nor implementation, this might come in some future PR

Pull-Request: #2758
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: Wrapper of ICU's UTF-16 encoded strings and conversion
Jean Privat [Fri, 23 Aug 2019 13:25:26 +0000 (09:25 -0400)]
Merge: Wrapper of ICU's UTF-16 encoded strings and conversion

### `u16_string` module
This module is meant to ease the use of complex string operations provided by the ICU library. The module provides a wrapper for ICU's string structure : `UChar *` as well as conversion fucntions to/from `String` and `CString`

### Remarks
- In order to convert a `String` to a `U16String`, the string must be converted to a `CString` first. Since `CString`'s are null temrinated, `U16String`'s also have to be null terminated and cannot have embedded termination characters.
- I am having some issues with DocUnits blocs thus there are no tests in the comments at the moment.
- I added an other `new` operator to the `CString` class which only returns a `null` string

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

4 years agoMerge: Adding a Windows build test
Jean Privat [Fri, 23 Aug 2019 13:25:22 +0000 (09:25 -0400)]
Merge: Adding a Windows build test

In parallel, a new Gitlab Runner tagged "windows" was added. This new test only builds the project.

Pull-Request: #2776
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoMerge: Abstract_text: Add a method to get string representation of float in scientifi...
Jean Privat [Fri, 23 Aug 2019 13:25:19 +0000 (09:25 -0400)]
Merge: Abstract_text: Add a method to get string representation of float in scientific notation

Add a method `to_se` to get the string representation of float in scientific notation.
```
123.45.to_se == "1.2345e+02"
0.001234.to_se  == "1.234e-03"
10860460000.0.to_se == "1.086046e+10"
```
The to_se method have a precision between 1 to 6 max decimal. The precision is adapted in function of the number.

Add a `to_precision_size_with_format` and `to_precision_fill_with_format` method to get the representation in a specific given format

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

4 years agodigraph: Implementation of a reflexive directed graph
Florian Deljarry [Fri, 16 Aug 2019 20:56:58 +0000 (16:56 -0400)]
digraph: Implementation of a reflexive directed graph

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

4 years agoabstract_text: Refactorisation of the to_s method
Florian Deljarry [Sun, 18 Aug 2019 20:24:47 +0000 (16:24 -0400)]
abstract_text: Refactorisation of the to_s method

Split the code of the `to_s` for use this in the `to_sci`. Now all conversion method uses the `to_precision_size_with_format` and `to_precision_fill_with_format`

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

4 years agoabstract_text: Add the `to_sci` to get the string representation of a float in scient...
Florian Deljarry [Sun, 18 Aug 2019 20:17:01 +0000 (16:17 -0400)]
abstract_text: Add the `to_sci` to get the string representation of a float in scientific notation

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

4 years ago.gitlab-ci.yml: adding a Windows build test
Ana Daouda [Tue, 20 Aug 2019 16:04:01 +0000 (12:04 -0400)]
.gitlab-ci.yml: adding a Windows build test

Signed-off-by: Ana Daouda <anadaouda@gmail.com>

4 years agolib/core/text: Wrapper of ICU's UTF-16 encoded strings and conversion
Ana Daouda [Fri, 16 Aug 2019 20:17:03 +0000 (16:17 -0400)]
lib/core/text: Wrapper of ICU's UTF-16 encoded strings and conversion

Signed-off-by: Ana Daouda <anadaouda@gmail.com>

4 years agoMerge: mongodb: Fixed failing test for `aggregate` method.
Jean Privat [Mon, 19 Aug 2019 18:43:08 +0000 (14:43 -0400)]
Merge: mongodb: Fixed failing test for `aggregate` method.

The test assumed the query would return in some order when it is not.
Added a "$sort" stage to the pipeline to avoid miss index asserts.

This PR fixed gitlab-ci test pipeline.

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

Pull-Request: #2783

4 years agoMerge: compiler: Refactored `AbstractRuntimeFunction`
Jean Privat [Mon, 19 Aug 2019 18:43:04 +0000 (14:43 -0400)]
Merge: compiler: Refactored `AbstractRuntimeFunction`

Removed duplicate code across all the compiler and made
`AbstractRuntimeFunction` implement Template Design pattern.
This allows for better code reuse and easier customization.

Removed the notion of "virtual function" and unified it with the concept
of thunk function. A thunk is an intermediary function between a caller
and a callee whose purpose is to compute thing before or after the
callee gets invoke. Currently, the only usages of thunks are to do conversions (casting)
before calling the actual callee. Thunks can be created by inheriting
`abstract_compiler::ThunkFunction` which provides a default
implementation. Furthermore, this class simplify the old code of
`SeparateRuntimeFunction` by replacing `if` with actual polymorphism.

Finally, thunks will be used to implement callref mechanics.

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

Pull-Request: #2782

4 years agotests: update error message of test_parser_args7.res
Jean Privat [Mon, 8 Jul 2019 19:08:57 +0000 (15:08 -0400)]
tests: update error message of test_parser_args7.res

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

4 years agotests: add syntax_lambda to check various forms
Jean Privat [Thu, 4 Jul 2019 19:36:10 +0000 (15:36 -0400)]
tests: add syntax_lambda to check various forms

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

4 years agoparser: regenerate with lambda
Jean Privat [Thu, 4 Jul 2019 19:35:00 +0000 (15:35 -0400)]
parser: regenerate with lambda

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

4 years agosyntax: add lambda construction with the fun keyword
Jean Privat [Thu, 4 Jul 2019 19:34:29 +0000 (15:34 -0400)]
syntax: add lambda construction with the fun keyword

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

4 years agomongodb: Fixed failing test for `aggregate` method.
Louis-Vincent Boudreault [Fri, 16 Aug 2019 13:56:36 +0000 (09:56 -0400)]
mongodb: Fixed failing test for `aggregate` method.

The test assumed the query would return in some order when it is not.
Added a "$sort" stage to the pipeline to avoid miss index asserts.

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

4 years agocompiler: Refactor `AbstractRuntimeFunction`
Louis-Vincent Boudreault [Thu, 15 Aug 2019 19:22:24 +0000 (15:22 -0400)]
compiler: Refactor `AbstractRuntimeFunction`

Removed duplicate code across all the compiler and made
`AbstractRuntimeFunction` implement Template Design pattern.
This allow for better code reuse and easier to customization.

Removed the notion of "virtual function" and unified it with the concept
of thunk function. A thunk is an intermediary function between a caller
and a callee whose purpose is to compute thing before or after the
callee gets invoke. Currently, the only usages of thunks is to do conversion (casting)
before calling the actual callee. Thunks can be created by inheriting
`abstract_compiler::ThunkFunction` which provides a default
implementation. Furthermore, this class simplify the old code of
`SeparateRuntimeFunction` by replacing `if` with actual polymorphism.

Finally, thunks will be used to implement callref mechanics.

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

4 years agoMerge: abstract_compiler: Replace the use of `n_float` by the `value`
Jean Privat [Wed, 14 Aug 2019 15:23:30 +0000 (11:23 -0400)]
Merge: abstract_compiler: Replace the use of `n_float` by the `value`

## Added methods
Add a little improvement of the abstract_compiler to generate a Float value by the usage of the `value` and not the `n_float`.

Add the float conversion in exponential hexadecimal notation.

```
assert 12.345.to_hexa_exponential_notation    == "0x1.8b0a3d70a3d71p+3"
assert 12.345.to_hexa_exponential_notation.to_f == 12.345
```

## Future work

Take into account the scientific notation for the display.

Pull-Request: #2778
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: MModule: new method `add_mclassdef` to avoid incoherent cache state.
Jean Privat [Wed, 14 Aug 2019 15:22:30 +0000 (11:22 -0400)]
Merge: MModule: new method `add_mclassdef` to avoid incoherent cache state.

Currently, the constructor of `MClassDef` would directly add itself in the `MModule`, like so:
`mmodule.mclassdefs.add(self)`. However, this could out of date `MModule:flatten_mclass_hierarchy`.
If we want better support for model manipulation after all the semantic phases, we need more logic when adding a new `MClassDef` in the hierarchy.

Moreover,  this allows better protection since `MClassDef` no longer needs to know `mmodule.mclassdefs`.

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

Pull-Request: #2777
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: Callref syntax
Jean Privat [Wed, 14 Aug 2019 15:22:26 +0000 (11:22 -0400)]
Merge: Callref syntax

Note: I forgot to independently PR the syntax for callrefs (used by #2774), so here it is.

Introduce the `&` syntax to capture and reference calls.
This is used to provide a simple *function pointer* construction that will be used later to implement full lambdas. However, this is not expected to be used by lambda programmers :)

```nit
var ref = &recv.foo
```

Currently, the syntax is analogous to a simple call (recv.foo) with a prefix `&`.

On chains, only the last call is captured (`.` have a higer precedence than `&`)

```nit
var r = &foo.bar.baz
# is equivalent with
var x = foo.bar
var r = &x.baz
```

Since the syntax is analogous to a call (except the &), there is always a receiver (including the implicit self or sys) and arguments are accepted by the parser.

```nit
var r = &foo
# is equivalent with
var r = &self.foo
```

There is no clear syntax proposal to avoid the capture of a receiver since a receiver is statically expected to resolve the method name.

Pull-Request: #2775
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: fix nitcc assert failure and nitcc continuous integration
Jean Privat [Wed, 14 Aug 2019 15:22:21 +0000 (11:22 -0400)]
Merge: fix nitcc assert failure and nitcc continuous integration

Since #2573, some nitcc tests failed on a self-check (because the trim function did not correctly remove tags on trimmed nodes).

The bug was benign and easily fixable, but the subversion of the expectation was that the script kind of forgot about correctly reporting the error (an error message was printed but a success error code was returned). So the whole CI job was a success as failed tests where unreported.

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

Pull-Request: #2772

4 years agotext/abstract_text: Adds the float conversion in exponential hexadecimal notation
Florian Deljarry [Mon, 12 Aug 2019 20:15:24 +0000 (16:15 -0400)]
text/abstract_text: Adds the float conversion in exponential hexadecimal notation

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

4 years agoastbuilder: Add a `create_callsite` method
Florian Deljarry [Tue, 13 Aug 2019 16:13:30 +0000 (12:13 -0400)]
astbuilder: Add a `create_callsite` method

Add a `create_callsite` method to facilitate the construction of callsite.

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

4 years agoastbuilder: Make the construction of the `AMethPropdef` more generic
Florian Deljarry [Tue, 13 Aug 2019 15:49:46 +0000 (11:49 -0400)]
astbuilder: Make the construction of the `AMethPropdef` more generic

Change the MMethodDef to nullable MMethodDef to reduce model dependency.

Change the APublicVisibility to AVisibility to be able to create private or protected method.

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

4 years agotests: add syntax_callref.nit
Jean Privat [Tue, 9 Jul 2019 15:11:03 +0000 (11:11 -0400)]
tests: add syntax_callref.nit

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

4 years agotyping: stub to handle callrefs
Jean Privat [Tue, 9 Jul 2019 15:11:18 +0000 (11:11 -0400)]
typing: stub to handle callrefs

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

4 years agoscope: refuse `&x` where x is a local variable
Jean Privat [Tue, 9 Jul 2019 15:10:23 +0000 (11:10 -0400)]
scope: refuse `&x` where x is a local variable

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

4 years agoparser: regenerate with callrefs
Jean Privat [Tue, 9 Jul 2019 15:09:49 +0000 (11:09 -0400)]
parser: regenerate with callrefs

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

4 years agosyntax: add call reference (funref+recv capture) `&x.foo`
Jean Privat [Tue, 9 Jul 2019 15:09:29 +0000 (11:09 -0400)]
syntax: add call reference (funref+recv capture) `&x.foo`

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

4 years agoabstract_compiler: Replace the use of `n_float` by the `value`
Florian Deljarry [Mon, 12 Aug 2019 20:22:11 +0000 (16:22 -0400)]
abstract_compiler: Replace the use of `n_float` by the `value`

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

4 years agoMModule: new method `add_mclassdef` to avoid incoherent cache state.
Louis-Vincent Boudreault [Mon, 12 Aug 2019 13:42:55 +0000 (09:42 -0400)]
MModule: new method `add_mclassdef` to avoid incoherent cache state.

Signed-off-by: Louis-Vincent Boudreault <lv.boudreault95@gmail.com>

4 years agoCI: nitunit_some skips contrib since some code might be generated
Jean Privat [Fri, 19 Jul 2019 00:59:11 +0000 (20:59 -0400)]
CI: nitunit_some skips contrib since some code might be generated

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

4 years agoMerge: Safe call operator
Jean Privat [Thu, 18 Jul 2019 18:39:57 +0000 (14:39 -0400)]
Merge: Safe call operator

A long time ago, there was a proposal to have a safe call operator in Nit #1274 `x?.foo` that executes the call if `x` is not null and returns null otherwise (instead of aborting).

This was refused because at the time, the syntax `x?.foo` was considered weird and not POLA.
Moreover, what was proposed was a more general version of the concept that could be used everywhere, not only as a receiver that made the semantic quite complex and even less POLA.

Nowadays, most languages have adopted it https://en.wikipedia.org/wiki/Safe_navigation_operator so the syntax and behavior is not as weird as before.

This operator is nice in the context of Nit with nullable types since if avoids to use chained `if x != null then x.foo` and plays nicely with the type system.

Currently, only explicit dotted calls are handled; e.g. `x?.foo`, I'm not sure if something should be done with other call constructions like `x + y` or `x[y]`.

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

4 years agonitcc: tests script return non-zero on failure (print is not enough)
Jean Privat [Thu, 18 Jul 2019 18:08:18 +0000 (14:08 -0400)]
nitcc: tests script return non-zero on failure (print is not enough)

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

4 years agonitcc: trim also remove tags on bad states
Jean Privat [Thu, 18 Jul 2019 18:06:52 +0000 (14:06 -0400)]
nitcc: trim also remove tags on bad states

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

4 years agoMerge: ci: generate metrics output in an artifact file
Jean Privat [Mon, 15 Jul 2019 15:08:16 +0000 (11:08 -0400)]
Merge: ci: generate metrics output in an artifact file

Results for nitmetrics should be easily available.

Pull-Request: #2771

4 years agoMerge: fix ci nitunit some
Jean Privat [Mon, 15 Jul 2019 15:08:12 +0000 (11:08 -0400)]
Merge: fix ci nitunit some

When there is no change in watched nit files, the job `nitunit_some` failed.

Pull-Request: #2770

4 years agoMerge: Introduce `test_frontend`
Jean Privat [Mon, 15 Jul 2019 15:08:09 +0000 (11:08 -0400)]
Merge: Introduce `test_frontend`

Sometimes we need to test things related to a model and it's not easy to do this with NitUnit since creating
a model by hand is tedious.

With the `TestModel` abstract suite it's easier:

```nit
module my_test is test

import test_frontend

class MyTest
   super TestModel
   test

   redef var test_src = "path/to/files"

   fun my_test is test do
       assert test_model.mmodules.length == 1
   end
end
```

Pull-Request: #2769
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoMerge: doc: Rename `synopsys` into `synopsis`
Jean Privat [Mon, 15 Jul 2019 15:08:04 +0000 (11:08 -0400)]
Merge: doc: Rename `synopsys` into `synopsis`

Typo found in a lot of places ported since the very first `nitdoc` version I think.

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

Pull-Request: #2768

4 years agoMerge: metrics: ReadmeMetrics uses markdown2
Jean Privat [Mon, 15 Jul 2019 15:08:00 +0000 (11:08 -0400)]
Merge: metrics: ReadmeMetrics uses markdown2

Some leftovers introducing the new markdown parser.

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

Pull-Request: #2767

4 years agoMerge: Update basic requirements and document them
Jean Privat [Mon, 15 Jul 2019 15:07:57 +0000 (11:07 -0400)]
Merge: Update basic requirements and document them

Since #2615 we broke the initial build according to the documentation since nitpm (picnit) requires libcurl.

To minimize the number of doc to update I just moved `nitpm` to the "more" set of tools and documented their requirements.
I also added a CI job to avoid future failures (note: I'm not sure how to adapt it on other docker-less platforms).

Pull-Request: #2766
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: Move back manual to the main repo
Jean Privat [Mon, 15 Jul 2019 15:07:28 +0000 (11:07 -0400)]
Merge: Move back manual to the main repo

The manual is slowly bit rotting in the wiki (the disclaimer in http://nitlanguage.org/manual/ and the link to the very old issue  #761 is not a nice thing to have).

The idea is to move back the documentation in the main repository so that PR that enhance the language should also update the manual.
We could add checks to ensure that new AST element or annotations implies some update in the manual.

It is what is currently done with the manpages of the tools, and they are quite complete and up to date.

Pull-Request: #2762

4 years agoMerge: Clean old projects from `contrib`
Jean Privat [Mon, 15 Jul 2019 15:07:24 +0000 (11:07 -0400)]
Merge: Clean old projects from `contrib`

This PR removes 3 old projects from `contrib` that are no more used nor interesting:

* `neo_doxygen`
* `refund`
* `wiringPi`

222 files and 25k LOC less :D

Pull-Request: #2764

4 years agoMerge: github: Summer cleaning
Jean Privat [Mon, 15 Jul 2019 15:07:20 +0000 (11:07 -0400)]
Merge: github: Summer cleaning

Some cleaning to the `github` lib.

Most interesting changes:

* kill `github_curl` and migrate clients (`github_merge`, `github_search_for_jni`)
* clean deserialization process heuristics for something more robust and readable (but a bit slower)
* array pagination
* kill `GithubEntity`
* remove ISO date methods
* mock testing for `github::wallet`
* `wallet` uses a `Logger`

This PR can be read commit by commit.

Pull-Request: #2765
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoci: generate metrics output in an artifact file
Jean Privat [Mon, 15 Jul 2019 15:05:18 +0000 (11:05 -0400)]
ci: generate metrics output in an artifact file

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

4 years agotests: error_syntax errors on `? now
Jean Privat [Mon, 15 Jul 2019 13:57:59 +0000 (09:57 -0400)]
tests: error_syntax errors on `? now

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

4 years agoindexing: Use `test_frontend`
Alexandre Terrasa [Sun, 14 Jul 2019 18:42:00 +0000 (14:42 -0400)]
indexing: Use `test_frontend`

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

4 years agodoc: Commands tests use `test_frontend`
Alexandre Terrasa [Sun, 14 Jul 2019 18:41:38 +0000 (14:41 -0400)]
doc: Commands tests use `test_frontend`

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

4 years agofrontend: Introduce `test_frontend` to easily test model related code
Alexandre Terrasa [Sun, 14 Jul 2019 18:01:30 +0000 (14:01 -0400)]
frontend: Introduce `test_frontend` to easily test model related code

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

4 years agodoc: Rename `synopsys` into `synopsis`
Alexandre Terrasa [Sun, 14 Jul 2019 16:55:45 +0000 (12:55 -0400)]
doc: Rename `synopsys` into `synopsis`

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

4 years agometrics: ReadmeMetrics uses markdown2
Alexandre Terrasa [Sun, 14 Jul 2019 15:37:52 +0000 (11:37 -0400)]
metrics: ReadmeMetrics uses markdown2

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

4 years agoMerge: ci: basic bench with old branch
Jean Privat [Fri, 12 Jul 2019 19:53:19 +0000 (15:53 -0400)]
Merge: ci: basic bench with old branch

This adds a job where a basic execution is compared against origin/master is order to catch important time or space regressions. Because the test machine is shared with many jobs, the results are not that reliable and some additional checks by the integrator might be required.

However, the script can help developers to do a basic check to document their PR.

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

4 years agoMerge: typing: get_method refactoring
Jean Privat [Fri, 12 Jul 2019 19:53:15 +0000 (15:53 -0400)]
Merge: typing: get_method refactoring

Split the get_method to three different entry points. These new entry points make it possible to adapt the treatment to the actual context. This avoids creating callsites manually and in the same time do the verification if the researched method exist (display an error if not exist)

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

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

4 years agoMerge: nitc: fix --keep-going in the compiler broken by 539ca148d
Jean Privat [Fri, 12 Jul 2019 19:53:10 +0000 (15:53 -0400)]
Merge: nitc: fix --keep-going in the compiler broken by 539ca148d

Also add tests to avoid that again

Pull-Request: #2763

4 years agoci: compile the manual
Jean Privat [Wed, 10 Jul 2019 14:59:09 +0000 (10:59 -0400)]
ci: compile the manual

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

4 years agoci: do not error when nothing with nitunit_some
Jean Privat [Fri, 12 Jul 2019 18:00:41 +0000 (14:00 -0400)]
ci: do not error when nothing with nitunit_some

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

4 years agoci: tests that requirements for tools are still OK
Jean Privat [Fri, 12 Jul 2019 19:11:57 +0000 (15:11 -0400)]
ci: tests that requirements for tools are still OK

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

4 years agoREADME: update the state of requirements
Jean Privat [Fri, 12 Jul 2019 19:09:34 +0000 (15:09 -0400)]
README: update the state of requirements

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

4 years agotools: move nitpm to more_tools since it requires libcurl
Jean Privat [Fri, 12 Jul 2019 18:23:12 +0000 (14:23 -0400)]
tools: move nitpm to more_tools since it requires libcurl

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

4 years agodoc/manual: put back the manual in the main repository
Jean Privat [Wed, 10 Jul 2019 14:58:57 +0000 (10:58 -0400)]
doc/manual: put back the manual in the main repository

Currently it bit rot in the wiki :(

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

4 years agonitc: fix --keep-going in the compiler broken by 539ca148d
Jean Privat [Wed, 10 Jul 2019 20:13:11 +0000 (16:13 -0400)]
nitc: fix --keep-going in the compiler broken by 539ca148d

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

4 years agotyping: get_method refactoring
Florian Deljarry [Tue, 9 Jul 2019 20:21:41 +0000 (16:21 -0400)]
typing: get_method refactoring

Split the get_method to three different entry points. These new entry points make it possible to adapt the treatment to the actual context.

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

4 years agotests: add base_safe.nit for safe calls
Jean Privat [Wed, 10 Jul 2019 14:06:22 +0000 (10:06 -0400)]
tests: add base_safe.nit for safe calls

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

4 years agotyping and engines: handle safe calls `x?.foo`
Jean Privat [Wed, 10 Jul 2019 13:59:27 +0000 (09:59 -0400)]
typing and engines: handle safe calls `x?.foo`

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

4 years agogithub: Remove old logging
Alexandre Terrasa [Thu, 11 Jul 2019 02:35:40 +0000 (22:35 -0400)]
github: Remove old logging

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

4 years agogithub: Clean `get_contributor_stats`
Alexandre Terrasa [Thu, 11 Jul 2019 02:35:19 +0000 (22:35 -0400)]
github: Clean `get_contributor_stats`

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

4 years agogithub: Kill `github_curl`
Alexandre Terrasa [Tue, 9 Jul 2019 03:15:31 +0000 (23:15 -0400)]
github: Kill `github_curl`

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

4 years agogithub_search_for_jni: Migrate to new Github API
Alexandre Terrasa [Tue, 9 Jul 2019 03:14:48 +0000 (23:14 -0400)]
github_search_for_jni: Migrate to new Github API

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

4 years agogithub_merge: Migrate to new Github API
Alexandre Terrasa [Tue, 9 Jul 2019 03:14:27 +0000 (23:14 -0400)]
github_merge: Migrate to new Github API

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