Jean Privat [Thu, 28 May 2015 00:19:00 +0000 (20:19 -0400)]
Merge: Improve internal mechanisms of the nitvm
This PR fixes a bug that was hidden in the nitvm for a too long time, the recursion in class loading was bad and is now corrected.
Then a more accurate mechanism is introduce to deal with positions of methods and attributes in internal structures of classes and objects.
When a method dispatch is performed, this mechanism allows to ask precisely for a class the position of a block of methods (or attributes). This should increase the proportion of object mechanisms "compiled" in an efficient way.
Finally, the class loading is optimized: an indirectly loaded class is not fully constructed and allocated.
Instead, its identifier is computed to allow subtyping tests.
For now, these more accurate mechanisms need recompilations of callsite. This sould be done in further PR.
Pull-Request: #1398
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Thu, 28 May 2015 00:18:53 +0000 (20:18 -0400)]
Merge: Markdown location
Introduce location in markdown parser so tools can easily retrieve the original position of a block or a token in the input file/string.
Commits:
* 2d139eb introduces de Location concept and update the parser
* fda150d isn't interesting since it only update signature in the test file
* dacc7ba adds some test suites for the locations
Pull-Request: #1397
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Thu, 28 May 2015 00:18:39 +0000 (20:18 -0400)]
Merge: contrib/header_static: a cog in the toolchains to generate Objcwrapper
### Filters preprocessed C-like header files to remove static code and keep their signatures.
This tool is used in the process of parsing header files to extract
information on the declared services (the functions and structures).
This information is then used to generate bindings for Nit code
to access these services.
The C header sometimes contains static code. It deletes static code of
headers, but keep their signatures. This tool is an extension of
header_keeper. It searches the keyword static to identify
the static code, and ignore the code into their brackets. The result is
printed to sdtout.
~~~sh
cat Pre-Processed/CGGeometry.h | header_static Pre-Processed/CGGeometry.h > Pre-Processed/static_header.h
~~~
This module can also be used as a library.
The main service is the method `header_static`
Pull-Request: #1396
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 27 May 2015 10:12:32 +0000 (06:12 -0400)]
Merge: sepcomp: fix hardening related to the instantiation of dead types
The bug was revelated by #1385
Pull-Request: #1402
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 27 May 2015 00:55:15 +0000 (20:55 -0400)]
Merge: `Int::times`: clean nitunit and expose negative behavior
I tried to use `Int::times` but the nitunit wasn't clear enough on the expected behavior.
Thanks at @BlackMinou for is moral support on this.
Pull-Request: #1393
Reviewed-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 27 May 2015 00:55:03 +0000 (20:55 -0400)]
Merge: Rename all REAMDE to README.md
Close #1382
Pull-Request: #1383
Reviewed-by: Alexandre Blondin Massé <alexandre.blondin.masse@gmail.com>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 27 May 2015 00:54:56 +0000 (20:54 -0400)]
Merge: Intro an unrolled linked list, and fix `List::insert`
An unrolled list is a sequence implemented by a linked list of arrays.
I use this list for a very long FIFO. `Array::shift` is very slow and a large `List` can create too many small nodes for the GC.
The test compares the behavior of `UnrolledList` with `List` on random data sets. It allowed me to find a bug in `List::insert`.
Pull-Request: #1379
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Jean Privat [Wed, 27 May 2015 00:54:46 +0000 (20:54 -0400)]
Merge: Binary/Octal literal Ints
For long now we could express an `Int` in both decimal and hexadecimal form, however binary and octal forms were lacking.
This PR fixes it.
Pull-Request: #1378
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Julien Pagès [Thu, 21 May 2015 14:29:34 +0000 (16:29 +0200)]
nitvm: Optimize the loading of classes
Signed-off-by: Julien Pagès <julien.projet@gmail.com>
Julien Pagès [Wed, 13 May 2015 13:28:29 +0000 (15:28 +0200)]
nitvm: Deleting absolute offset for properties
Signed-off-by: Julien Pagès <julien.projet@gmail.com>
Julien Pagès [Tue, 26 May 2015 09:32:15 +0000 (11:32 +0200)]
nitvm: Optimizing subtyping tests with new mechanisms
Signed-off-by: Julien Pagès <julien.projet@gmail.com>
Julien Pagès [Tue, 26 May 2015 13:06:19 +0000 (15:06 +0200)]
nitvm: The positions of methods and attributes are now more accurate
Signed-off-by: Julien Pagès <julien.projet@gmail.com>
Julien Pagès [Tue, 5 May 2015 15:16:29 +0000 (17:16 +0200)]
nitvm: Bug fixe in the recursion of class loading
Signed-off-by: Julien Pagès <julien.projet@gmail.com>
Jean Privat [Tue, 26 May 2015 18:43:16 +0000 (14:43 -0400)]
sepcomp: fix hardening related to the instantiation of dead types
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 26 May 2015 17:52:49 +0000 (13:52 -0400)]
Rename REAMDE to README.md
And a small whitespace fix
Signed-off-by: Jean Privat <jean@pryen.org>
Alexis Laferrière [Tue, 26 May 2015 17:16:45 +0000 (13:16 -0400)]
tests: update sav of nitserial to latest changes
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Lucas Bajolet [Mon, 25 May 2015 20:34:58 +0000 (16:34 -0400)]
tests: Added tests for literal bases
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Mon, 25 May 2015 20:33:09 +0000 (16:33 -0400)]
src/literal: Support for the new binary and octal literals
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Mon, 25 May 2015 20:32:51 +0000 (16:32 -0400)]
src/parser: Regenerated parser
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Mon, 25 May 2015 20:32:39 +0000 (16:32 -0400)]
src/parser: Updated grammar and parser_nodes
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Mon, 25 May 2015 20:13:14 +0000 (16:13 -0400)]
lib/standard/string: Added to_oct and to_bin functions to Text
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Tue, 26 May 2015 10:12:35 +0000 (06:12 -0400)]
Merge: Binary over network
Add services to write strings in binary streams and better support for binary in network modules.
Pull-Request: #1390
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 26 May 2015 10:12:01 +0000 (06:12 -0400)]
Merge: nitx: finish migration to new nitdoc architecture
`nitx` is now part of the `doc` group using the same architecture as `nitdoc`.
This PR also add two new features:
* locate calls to a MProperty
* search pieces of code
Fixes #262
Pull-Request: #1369
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Tue, 26 May 2015 12:37:54 +0000 (08:37 -0400)]
Merge: Nitiwiki next
Some fixes for `nitiwiki`.
Preparing for nitlanguage.org migration from ikiwiki to nitiwiki.
Pull-Request: #1367
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Jean Privat [Tue, 26 May 2015 10:09:51 +0000 (06:09 -0400)]
Merge: Apply serialization in calculator, a_star, more_collections, Couple and Container
Use `auto_serialize` in the calculator example, and remove the old custom JSON serialization.
The `a_star` module needed special care and could not rely only on `auto_serialize`. This was to avoid serializing graphs as a deep tree, instead we serialize the nodes first, then the links and we rebuild the graph at deserialization.
Besides that, more collections support the serialization.
Pull-Request: #1364
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Tue, 26 May 2015 10:09:33 +0000 (06:09 -0400)]
Merge: File and Bytes
A bit of a fix in the context of issues #1267 and #1262.
The bytes module has a `ByteBuffer` class, while it is still working with `Int` at the moment, when Nit correctly supports `Bytes`, we can change it to a real `ByteBuffer`
This class is highly recommended when working with byte streams and collections.
As such, file operations are related to this module since most of the operations are working on bytes, what they mean is up to the end-user to figure.
Pull-Request: #1309
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Ait younes Mehdi Adel <overpex@gmail.com>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexandre Terrasa [Tue, 26 May 2015 02:44:33 +0000 (22:44 -0400)]
lib/markdown: add MDLocation tests
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Tue, 26 May 2015 02:44:09 +0000 (22:44 -0400)]
lib/markdown: fix tests
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Tue, 26 May 2015 02:43:44 +0000 (22:43 -0400)]
lib/markdown: introduce MDLocation
MDLocation is defined on MDBlocks and Tokens to help tool retrieve the location of an element in the original input.
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 25 May 2015 16:20:09 +0000 (12:20 -0400)]
range: better nitunit on `Int::times`
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexis Laferrière [Mon, 25 May 2015 15:42:08 +0000 (11:42 -0400)]
lib/serialization: intro the shortcut `CachingSerializer::link`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Mon, 25 May 2015 15:41:45 +0000 (11:41 -0400)]
lib/serialization: intro DuplexCache
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 23 May 2015 19:31:50 +0000 (15:31 -0400)]
lib/serialization: extract caches from json_serialization
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Fri, 22 May 2015 15:37:23 +0000 (11:37 -0400)]
tests: test UnrolledList
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Thu, 21 May 2015 17:08:18 +0000 (13:08 -0400)]
lib/more_collections: intro `UnrolledLinkList`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexandre Terrasa [Mon, 25 May 2015 16:20:26 +0000 (12:20 -0400)]
range: remove white space in license
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexis Laferrière [Sun, 24 May 2015 17:24:33 +0000 (13:24 -0400)]
lib/binary: intro read/write strings as blocks
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sun, 24 May 2015 17:24:10 +0000 (13:24 -0400)]
lib/binary: intro services to read/write null terminated strings
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sun, 24 May 2015 17:26:46 +0000 (13:26 -0400)]
lib/socket: fix `NativeSocket::write_byte`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sun, 24 May 2015 17:25:52 +0000 (13:25 -0400)]
lib/libevent: implement `write_byte`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sun, 24 May 2015 17:25:16 +0000 (13:25 -0400)]
lib/libevent: `Connection` subclass `Writer`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 23 May 2015 17:51:57 +0000 (13:51 -0400)]
lib/serialization: optimize `StrictHashMap` as a subclass of `HashMap`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Sat, 23 May 2015 17:51:19 +0000 (13:51 -0400)]
lib/serialization: intro `serialization_hash` to complement `is_same_serialized`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 20 May 2015 19:54:03 +0000 (15:54 -0400)]
lib/json: fix json serialization to play well with other engines
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexandre Terrasa [Mon, 25 May 2015 15:23:50 +0000 (11:23 -0400)]
debugger: remove dependency to `nitx`
Since the debugger is broken, we will redo the nitx command when it will be fixed.
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 21 May 2015 18:12:24 +0000 (14:12 -0400)]
nitiwiki: use `InlineDecorator` for markdown titles in TOC
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 21 May 2015 18:11:44 +0000 (14:11 -0400)]
markdown: add misc decorators
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexis Laferrière [Sun, 17 May 2015 01:58:24 +0000 (21:58 -0400)]
examples/calculator: use serialization
This becomes a good example of a normal extra simple use of the
`auto_serializable` with `app::data_store`.
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 20 May 2015 11:46:01 +0000 (07:46 -0400)]
lib/serialization: support serializing Couple and Container
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Mon, 18 May 2015 18:38:51 +0000 (14:38 -0400)]
lib/more_collections: update classes as serializable
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Mon, 18 May 2015 18:34:30 +0000 (14:34 -0400)]
lib/a_star: update `a_star` to be serializable
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Fri, 22 May 2015 14:36:14 +0000 (10:36 -0400)]
lib/collections: fix `List::insert` to insert at the right index
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Sat, 23 May 2015 01:01:37 +0000 (21:01 -0400)]
Merge: metrics: `--nullables` distinguishes safe and unsafe calls on `null`
In reaction of recent updates on #394 I wanted to have some up-to-date numbers.
`nitmetrics --nullable` can count the sends on nullable receivers but safe and unsafe calls where merged. Note: safe calls on nullable are things like `x == null`, that is safe even if `x` is a nullable thing.
So this PR distinguishes safe and unsafe calls.
Some numbers:
~~~
nitmetrics --nullables ../lib ../src/nit*.nit
Total number of sends: 60262
Number of sends on a unsafe nullable receiver: 1750 (2.90%)
Number of sends on a safe nullable receiver: 2639 (4.37%)
~~~
Pull-Request: #1375
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Sat, 23 May 2015 01:01:31 +0000 (21:01 -0400)]
Merge: model: introduce the bottom type
An old branch that was on some disk that I forgot to PR.
While the bottom type is useless now, it should be useful on future PR.
Type theorists and lattice fanboys might like it.
Pull-Request: #1374
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Sat, 23 May 2015 01:01:25 +0000 (21:01 -0400)]
Merge: Markdown: some improvement and fixes
Misc modification to markdown lib to facilitate custon Markdown parsing from external tools.
Pull-Request: #1371
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Sat, 23 May 2015 01:01:18 +0000 (21:01 -0400)]
Merge: Missing a unboxing when compiling a call to `new NativeArray`
In the following code,
~~~nit
var i
i = 4
var na = new NativeArray[Object](i)
~~~
the declaration type of `i` is `nullable Object`, so the C-type of `i` is `val*` (and not `int`).
Therefore, in the `new NativeArray`, it should be unboxed because the C signature expect a `int`.
Pull-Request: #1365
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Sat, 23 May 2015 01:01:14 +0000 (21:01 -0400)]
Merge: lib/standard: reimplement `files` with light FFI
So I can use it during the bootstrap (thanks #1323)
Pull-Request: #1363
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Sat, 23 May 2015 01:01:11 +0000 (21:01 -0400)]
Merge: Nit objects to plain JSON
Adds an option to write Nit objects to plain JSON in `JsonSerializer`, and the shortcut `Serializable::to_plain_json`. This format lacks the meta-data necessary for the full deserialization but it is easier to read for non-Nit programs and humans.
You can see an example in the doc of `json::serialization` and here, taken from the tests. The following class uses "complex" Nit data structures and serialize them to the closest available structure in JSON.
~~~nit
class G
auto_serializable
var hs = new HashSet[Int]
var s = new ArraySet[String]
var hm = new HashMap[String, Int]
var am = new ArrayMap[String, String]
init
do
hs.add -1
hs.add 0
s.add "one"
s.add "two"
hm["one"] = 1
hm["two"] = 2
am["three"] = "3"
am["four"] = "4"
end
end
var g = new G
g.to_plain_json # ...
~~~
~~~json
{"hs": [-1, 0], "s": ["one", "two"], "hm": {"one": 1, "two": 2}, "am": {"three": "3", "four": "4"}}
~~~
Of course, when writing to a file or in a socket, it is better to use `JsonSerializer` as the `to_plain_json` version uses a string.
Pull-Request: #1360
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Fri, 22 May 2015 19:25:56 +0000 (15:25 -0400)]
lib/standard: reimplement `files` with basic FFI (so can be used in bootstraped)
Signed-off-by: Jean Privat <jean@pryen.org>
Lucas Bajolet [Thu, 21 May 2015 18:23:02 +0000 (14:23 -0400)]
lib: Various fixes on lib with the new file and stream API
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Thu, 21 May 2015 14:49:20 +0000 (10:49 -0400)]
lib/standard/stream: Doc fixes
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Thu, 21 May 2015 14:48:58 +0000 (10:48 -0400)]
lib/standard: Updated stream and file to support byte-oriented manipulations
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Fri, 22 May 2015 19:14:00 +0000 (15:14 -0400)]
tests: update sav/nitmetrics_args1.res
Signed-off-by: Jean Privat <jean@pryen.org>
Alexandre Terrasa [Mon, 4 May 2015 15:41:29 +0000 (11:41 -0400)]
nitx: update man page
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 15:04:56 +0000 (11:04 -0400)]
nitx: introduce code search
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 14:47:07 +0000 (10:47 -0400)]
nitx: introduce search calls to MProperty
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 14:46:36 +0000 (10:46 -0400)]
nitx: redo search for MType in new calls
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Thu, 21 May 2015 23:39:22 +0000 (19:39 -0400)]
metrics: `--nullables` distinguishes safe and unsafe calls on `null`
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 21 May 2015 23:28:48 +0000 (19:28 -0400)]
model: introduce the bottom type
Signed-off-by: Jean Privat <jean@pryen.org>
Alexandre Terrasa [Thu, 14 May 2015 06:23:12 +0000 (02:23 -0400)]
lib/markdown: force write on current_buffer
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 14 May 2015 01:31:20 +0000 (21:31 -0400)]
lib/markdown: introduce markdown to markdown decorator
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 14 May 2015 01:30:24 +0000 (21:30 -0400)]
lib/markdown: use virtual type to make subclassing easier
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 21 May 2015 19:38:30 +0000 (15:38 -0400)]
lib/markdown: move wikilinks parsing to lib/markdown
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 14:45:18 +0000 (10:45 -0400)]
nitx: redo search for MType in returns
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 14:44:48 +0000 (10:44 -0400)]
nitx: redo search for MType in params
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 14:43:59 +0000 (10:43 -0400)]
nitx: introduce doc page search
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 15:12:03 +0000 (11:12 -0400)]
nitx: update tests
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Mon, 4 May 2015 14:42:18 +0000 (10:42 -0400)]
nitx: migrate to new Nitdoc architecture
Some features are still missing, will be redone in further commits.
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 21 May 2015 18:11:04 +0000 (14:11 -0400)]
nitiwiki display error before crashing when a template got missing
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 21 May 2015 18:10:37 +0000 (14:10 -0400)]
nitiwiki: add tests for markdown extension config
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexandre Terrasa [Thu, 21 May 2015 18:09:54 +0000 (14:09 -0400)]
nitiwiki: allow user to change markdown extension
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Thu, 21 May 2015 14:32:12 +0000 (10:32 -0400)]
tests: extends test_new_native.nit with non C-int length
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 21 May 2015 14:31:25 +0000 (10:31 -0400)]
compilers: missing argument unboxing with new nativearray
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 21 May 2015 00:32:38 +0000 (20:32 -0400)]
Merge: share/libgc: option to use a local version of the source pkgs
This is only for tests servers, and should not be of any use to the regular user who doesn't trash and reclone the Nit repo many times each day.
So on Pratchett, @privat , you could download both source packages in the home directory
and the script will use and reuse them instead of repeatedly downloading them. I can change the directory to whatever you prefer, maybe ~/Downloads? or ~/.cache?
It will save us from some false CI test failure, like in http://gresil.org/jenkins/job/CI_github/2648/, and we will stop spamming the server.
Pull-Request: #1358
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Thu, 21 May 2015 00:32:31 +0000 (20:32 -0400)]
Merge: Steps on iterations and ranges
A proposal to solve some things identified in #1339
This PR does 3 things:
* extends any Iterator to locally (`next_by`) or globally (`to_step`) advance with more than a single `next`
* add `Range.step` to have a generic bidirectional and stepable iterator
So now people can write
~~~nit
for i in [1..10].step(2) do print i # in order 1 3 5 7 9
for i in [10..1].step(-2) do print i # in reverse order 10 8 6 5 2
~~~
This is a neat (over?-) engineering. A maybe non-POLA thing is that empty ranges can still be iterated with a negative step.
~~~nit
assert [5..1].is_empty # but
assert [5..1].step(-2).to_a == [5,3,1]
~~~
Pull-Request: #1347
Reviewed-by: ArthurDelamare <arthur.delamare@viacesi.fr>
Reviewed-by: Etienne M. Gagnon <egagnon@j-meg.com>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Ait younes Mehdi Adel <overpex@gmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Thu, 21 May 2015 00:32:21 +0000 (20:32 -0400)]
Merge: nitx: start migration to `doc_phases`
This PR introduces the base rendering services for doc in console.
This will be used in the next version of `nitx` to benefit fron the new nitdoc architecture.
Pull-Request: #1315
Alexis Laferrière [Wed, 20 May 2015 12:38:49 +0000 (08:38 -0400)]
lib/json: add doc to serialization
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 20 May 2015 13:08:38 +0000 (09:08 -0400)]
lib/json: adds `to_plain_json`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 20 May 2015 12:39:18 +0000 (08:39 -0400)]
lib/json: serialization private import static
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Tue, 19 May 2015 15:54:41 +0000 (11:54 -0400)]
tests: test serializing plain JSON
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Tue, 19 May 2015 17:36:37 +0000 (13:36 -0400)]
tests: extract JSON logic from test_deserialization
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Tue, 19 May 2015 21:54:17 +0000 (17:54 -0400)]
lib/json: serialization can write plain JSON
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Mon, 18 May 2015 18:40:37 +0000 (14:40 -0400)]
lib/json: avoid using super-strings and stream directly instead
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Tue, 19 May 2015 19:47:05 +0000 (15:47 -0400)]
lib/json: extract `StrictHashMap` from `json::serialization`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 20 May 2015 17:14:45 +0000 (13:14 -0400)]
lib & contrib: update users of json::serialization
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Tue, 19 May 2015 14:15:42 +0000 (10:15 -0400)]
lib/json: move `json_serialization` to `json::serialization`
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Wed, 20 May 2015 15:46:27 +0000 (11:46 -0400)]
examples: use `Range::step` in rosettacode/loops_downward_for.nit
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 20 May 2015 00:30:31 +0000 (20:30 -0400)]
Merge: Safe collection access
A proposition to solve an old API issue related to covariance in collections (and fix #1353)
This PR updates the signatures of access methods in collections: `has`, `[]` and anything related that takes an `E` or a `K` in read-collections.
This make these classes covariant-safe.
Previously, the signature was to strictly accepts the bound, thus making the code unsafe but has the advantage to provide static hints
~~~nit
assert [1,2,3].has("Hello") # static error, expected int got string
~~~
But this behavior had issues because:
* unsafe code, but it is not because Nit *can* be unsafe that Nit *should* be unsafe.
* a perfect semantic answer is possible, eq returning false in the previous example. thus the existing behavior is not POLA
Because the philosophy of Nit is that static types should help the programmer without being annoying, this PR lift the constraint on parameters of all read access methods.
The semantic is now more aligned with the one of dynamically typed language where the behavior is decided by messages and not by the types of things.
This especially allows to use collections of thing when `==` does not implies the equality of static types (ex subclasses of Sequence).
~~~nit
var a = [1,2,3]
var l = new List[Int].from(a)
assert a == l # by the law of Sequence
var aa = [a]
assert aa.has(l) # before the PR, error; with the PR, true
var ma = new Map[Array[Int],String]
ma[a] = "hello"
assert ma.has_key(l) # before the PR, error; with the PR, true
~~~
Pull-Request: #1355
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 20 May 2015 00:30:25 +0000 (20:30 -0400)]
Merge: Read/Write binary data
The module `binary` adds services to `Writer` and `Reader` to read/write binary data.
The services offer different size for each kind of data. They can be used to save space on a stream or for compatibility with external programs. They use type names from C:
* `write_float` write a Nit `Float` on 32 bits, with loss of precision.
* `write_double` write a Nit `Float` on 64 bits.
* `write_int64` write a Nit `Int` on 64 bits, with usually no loss of data, but it may still happen per platform.
* `write_bool` and `write_bits` to write booleans as a byte.
* There's a TODO for other suggested methods.
The endianess of each stream is configurable.
I tried to avoid touching too much to the main stream code knowing that @R4PaSs is working on reading/writing bytes. The binary module will have to be updated when we have a `Byte` type. Also, all the others types of `Writer` must be modified to implement `write_byte`.
I'll use this to write a binary alternative to json_serialization.
Pull-Request: #1354
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 20 May 2015 00:30:22 +0000 (20:30 -0400)]
Merge: Serialization support SimpleCollection and Map, also bug fixes
This PR is the result of using Nit serialization to implement game saving/loading in WBTW.
Update the serialization to work with (or avoid) the new auto constructors.
Support serializing Sets and Maps.
The `is_same_serialized` fix a problem where two instances were wrongly serialized as being the same. Because it previously used a `HashMap` (and thus `==`), two different _empty_ arrays were serialized as one and resulted in a single object on deserialization.
Once this and #1348 are merge, I'll update the calculator example to use the serialization.
Pull-Request: #1352
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>