Jean Privat [Fri, 17 Oct 2014 00:21:14 +0000 (20:21 -0400)]
Merge: Brainfuck
As the name implies, this is a very simple Brainfuck interpreter written in Nit.
Yes, it is (mostly) useless, but it might serve as an example of a simple Nit program.
Pull-Request: #828
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Fri, 17 Oct 2014 00:21:10 +0000 (20:21 -0400)]
Merge: src: remove two TODO that are done/unneeded
Pull-Request: #830
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Fri, 17 Oct 2014 00:20:53 +0000 (20:20 -0400)]
Merge: Better varargs
since their introduction in Nit, varargs had a quick and dirty implementation.
They where implemented with a complex path in the low-level parts of engine instead being implemented at the AST level as it should be: varargs is more a syntactic sugar than something else.
Thus this PR changes the implementation of varargs in the engines.
This rationalize the `varargize` methods and simplify the code for low-level part (and also solve some bugs)
Additionally, the reverse-vararg, already accepted by the parser but unused until now, is implemented.
The principle it to pass an array where a vararg is expected.
Because of static ambiguities, the array passed as-is must be annotated with an ellipsis (`...`).
~~~nit
fun foo (xs: Object...) do print x.join("-")
foo(1,2,3) # prints "1-2-3"
var a = [1,2,3]
foo(a...) # prints "1-2-3"
foo(a) # pass `[a]`, a new array with a single element `a`, to foo, thus prints "123"
foo(1...) # Static Type Error: expected Array[Object], got Int.
~~~
Still, I think that error messages should be improved (cf. #98) but this seems to need some additional work in the error infrastructure.
A remaining question is what is the best acceptable type passed.
In the proposed implementation, the reverse-vararg must be a compatible Array (so a Sequence or a List are not accepted) and is given as is to the real method, that is allowed to modify it.
Should we change the type on a vararg to be a Sequence, a SequenceRead, of even a simple Collection ?
Pull-Request: #827
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 15 Oct 2014 18:53:16 +0000 (14:53 -0400)]
tests: add base_vararg3.nit
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 15 Oct 2014 14:46:39 +0000 (10:46 -0400)]
typing+engines: handle reverse-vararg: passing an array as-is.
Signed-off-by: Jean Privat <jean@pryen.org>
Lucas Bajolet [Wed, 15 Oct 2014 18:15:59 +0000 (14:15 -0400)]
brainfuck: Added a simple Brainfuck interpreter
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Thu, 16 Oct 2014 00:22:02 +0000 (20:22 -0400)]
src: remove two TODO that are done/unneeded
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 15 Oct 2014 20:16:01 +0000 (16:16 -0400)]
Merge: Manpages
~~~sh
$ man nitg
~~~
A dream come true.
More seriously, toolcontext is extended to be able to generate manpages (in a similar way than completion).
Then a bunch of manpages is generated.
The content of the manpages should be improved but this is better than nothing.
Pull-Request: #825
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 15 Oct 2014 20:15:47 +0000 (16:15 -0400)]
Merge: transform loops
In order to activate more optimizations and simplify code generators and analysis, the `while` and `for` loops must be transformed into simpler forms (in fact in complex forms but with simpler elements)
However, to do such a transformation, the escaping mechanism (break/continue/goto) must be rewrote.
Previously, for each loop control structure (loop for, while), a single EscapeMark was generated and breaks and continues are associated to the same mark, even if they branch in distinct points (so each escapemark had 2 branching mechanisms)
Now, with the first commits, two escapemarks are generated for each loop control structure, and breaks and continues are associated to a different one. The advantage is that each mark only have a single branching mechanism and that once associated to their mark, there is no need to distinguish break and continue (both become simple gotos).
The transformations of loops can be then implemented.
The `while`
~~~
while cond do block
~~~
is transformed into
~~~
loop if cond then block else break
~~~
and `for`
~~~
for i in col do block
~~~
is transformed into
~~~
var it = col.iterator
loop
if it.is_ok then
var i = it.item
do block
# ^ `continue` in the block it attached to the `do`
# this is why the transformation of escape-marks where needed in fact.
# and break is associated to the main loop
it.next
else
break
end
end
it.finish
~~~
Note that these transformations are basically what is currently implemented in rta, niti and nitg. Except that, now with a single transformation point, those three workers does not need to do their own transformation and basically can just rely on the one done on the AST level.
Pull-Request: #818
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 15 Oct 2014 20:13:33 +0000 (16:13 -0400)]
Merge: console: use snake case.
Correct a little mistake.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Pull-Request: #826
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 15 Oct 2014 19:04:52 +0000 (15:04 -0400)]
share: generate stubs for manpages
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 15 Oct 2014 01:59:06 +0000 (21:59 -0400)]
tests: update sav/test_toolcontext_args*.res
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Mon, 6 Oct 2014 12:48:32 +0000 (08:48 -0400)]
toolcontext: add --stub-man
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 15:15:28 +0000 (11:15 -0400)]
transform: move up shortcut-range from abstract_compiler to transform
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 15:11:48 +0000 (11:11 -0400)]
transform: shortcut range
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 04:28:37 +0000 (00:28 -0400)]
transform: transforms `while` and `for`
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 04:27:47 +0000 (00:27 -0400)]
astbuilder: can make loops and breaks
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 02:33:38 +0000 (22:33 -0400)]
scope: create two escapemaks in loops
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 15 Oct 2014 14:39:18 +0000 (10:39 -0400)]
global_compiler: remove useless methods since varargisation is done at the AST level
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 15 Oct 2014 14:38:11 +0000 (10:38 -0400)]
compiler: do the varargization in the ANodes
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 15 Oct 2014 14:30:34 +0000 (10:30 -0400)]
interpreter: remove useless methods `*call_without_varargs`
since varargs is now done at the AST level.
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 15 Oct 2014 14:29:20 +0000 (10:29 -0400)]
interpreter: do the varargization in the ANodes
Signed-off-by: Jean Privat <jean@pryen.org>
Jean-Christophe Beaupré [Wed, 15 Oct 2014 14:18:40 +0000 (10:18 -0400)]
console: use snake case.
Correct a little mistake.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean Privat [Mon, 13 Oct 2014 17:40:08 +0000 (13:40 -0400)]
Merge: src: remove some warnings and do some cleaning
Extracted from the first version of #817
Pull-Request: #819
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Mon, 13 Oct 2014 17:40:05 +0000 (13:40 -0400)]
Merge: new warning: useless null test
So, detect things like
~~~nit
var a = "Hello"
if a != null then print a
# ^ useless null test!
~~~
Pull-Request: #817
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Sat, 11 Oct 2014 13:35:57 +0000 (09:35 -0400)]
tests: update some tests related to useless-null-test
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 17:22:24 +0000 (13:22 -0400)]
lib: remove useless comparison on null that broke tests
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 00:39:38 +0000 (20:39 -0400)]
src: remove useless comparisons on null
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 16:31:00 +0000 (12:31 -0400)]
typing: new warning useless-null-test that detect == and != between non-nullables and null
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 00:41:16 +0000 (20:41 -0400)]
typing: refactor type adaptations in AEqExpr and ANeExpr
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 01:24:36 +0000 (21:24 -0400)]
src: remove some warnings and do some cleaning
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 12:24:15 +0000 (08:24 -0400)]
Merge: new option --define
It is standard in compiled programs to be able to setup some program configuration at compile-time.
Eg. C compilers accept a command-line option `-D` to define macros that will be used inside programs.
It is useful for configuring some string (like `-D PREFIX=/opt/nit/`, or `-D PORT=8081`) or activate some parts (conditional compilation, eg `-D WITH_SSL`).
This PR brings an equivalent capability to Nit engines through the new `-D` (`--define`) option.
The design behind the -D it to enable specific refinement of top-level functions at link-time.
Thus, basically
~~~sh
$ cat my_foo.nit
import foo
redef fun prefix do return "/opt/nit/"
$ nitg my_foo.nit
~~~
can be simplified into
~~~sh
$ nitg foo.nit -D prefix=/opt/nit/
~~~
Like `-m`, the `-D` creates a fictive module that refines the main module of the program.
`-D` also use the return type of the refined method to know how to interpret the text of the value.
Currently only Int, String and Bool is supported.
~~~nit
module foo
fun str: String do return "test"
fun num: Int do return 1
fun flag: Bool do return false
print str
print num
print flag
~~~
~~~sh
$ nitg foo.nit
$ ./foo
test
1
false
$ nitg foo.nit -D str=hello -D num=42 -D flag
$ ./foo
hello
42
true
~~~
The code of the PR is quite straightforward and show again that the new model is quite robust.
As usual, the first commits are some cleanup. The fun stuff is in the latter commits.
Pull-Request: #815
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Sat, 11 Oct 2014 12:23:33 +0000 (08:23 -0400)]
tests: update error_needed_method for niti
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 02:32:26 +0000 (22:32 -0400)]
ast: add new node AEscapeExpr to generalizes ABreakExpr and AContinueExpr
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Sat, 11 Oct 2014 00:03:32 +0000 (20:03 -0400)]
Merge: console: Offer a more reliable API.
The old API is error-prone when combining two character attributes.
Pull-Request: #816
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Fri, 10 Oct 2014 22:54:42 +0000 (18:54 -0400)]
tests: test --define in engines
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 10 Oct 2014 02:09:12 +0000 (22:09 -0400)]
mixin: introduce -D option to redefine functions from the command-line
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 10 Oct 2014 02:07:03 +0000 (22:07 -0400)]
src: new module mixin to factorize the -m option
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 10 Oct 2014 02:05:26 +0000 (22:05 -0400)]
compiler: do not use the outnames of fictive modules
Signed-off-by: Jean Privat <jean@pryen.org>
Jean-Christophe Beaupré [Wed, 8 Oct 2014 18:39:52 +0000 (14:39 -0400)]
console: Offer a more reliable API.
The old API is error-prone when combining two character attributes.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean Privat [Fri, 10 Oct 2014 13:08:31 +0000 (09:08 -0400)]
Merge: tests: detect and use portable time and date command
Advanced behavior of `time` and `date` is not protable. Thus try
to detect known working configurations and use them.
time and date are not fundamental for tests, so having
an unsupported implementation is not a big deal.
Pull-Request: #814
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Fri, 10 Oct 2014 13:08:30 +0000 (09:08 -0400)]
Merge: introduce `Iterator::finish`
While initially playing with for_abuse, an idea was to have the lib informed of an "end of iteration".
When the end of iteration was a result of `is_ok` false, it is easy for the lib to be informed.
But, if for some reason the client chose to abort the loop (with a `break` statement), the lib cannot be informed and some early release of resources cannot occurs.
This PR introduce a new optional service in iterators, namely `finish` that is automatically called at the end of `for` structures.
Currently, there is no user of such a function, but it is a POC that can be used for a nit-version of a `with` structure to implements for_abuse-like controls.
~~~nit
# Simple implementation of the `head` command
var head_limit = 10
for line in read_lines("some file") do
# `read_lines` opens and reads each line
head_limit -= 1
if head_limit < 0 then break
print line
end
# Here the file is automatically closed thanks to finish
~~~
Pull-Request: #813
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Fri, 10 Oct 2014 13:08:28 +0000 (09:08 -0400)]
Merge: Fix test of for abuse
Some cleaning of the for_abuse test.
A future PR will improve things.
Pull-Request: #812
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Fri, 10 Oct 2014 02:04:50 +0000 (22:04 -0400)]
toolcontext: introduce ToolContext::make_main_module
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 10 Oct 2014 01:49:22 +0000 (21:49 -0400)]
compiler: add Visitor::bool_instance
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 10 Oct 2014 01:46:32 +0000 (21:46 -0400)]
modelbuilder: node is optionnal in Modelbuilder::force_get_primitive_method
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 10 Oct 2014 00:21:01 +0000 (20:21 -0400)]
engines: do not crash on AST-less mclassdef
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Fri, 10 Oct 2014 00:19:37 +0000 (20:19 -0400)]
interpreter: add Interpreter::string_instance
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 9 Oct 2014 17:39:52 +0000 (13:39 -0400)]
tests: detect and use portable time and date command
Advanced behavior of `time` and `date` is not protable. Thus try
to detect known working configurations and use them.
time and date are not fundamental for tests, so having
an unsupported implementation is not a big deal.
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 9 Oct 2014 03:32:01 +0000 (23:32 -0400)]
Merge: Tester over MPI
On turing, running `mpirun -np 120 ../nitester --engine nitg-s,nitg-g,nitg-sg,nitg-e,niti ../src/nit*.nit ../examples/*.nit *.nit` from the `tests` directory takes 2m 46s on 120 processors to evaluate 9003 programs/engine combinations. On a single processor, the same work takes over 2 hours.
# Results (for the execution specified above)
* 9003 total test programs
* 5728 oks & 0ks
* 1245 fails (a lot of libraries and SDKs are missing)
* 175 no savs
* 191 fixmes
* 1494 sosos
* 125 skips
* 45 unknowns (unsupported results: skip soso, changed, etc.)
# Features and todo
- [x] Uses OpenMPI
- [x] Supports all engines through tests.sh
- [x] Collects and classify results
- [x] Works on the Turing cluster
- [x] Optimized to avoid overloading NFS
- [ ] Correctly detect the all the results (no more unknowns)
- [ ] Use with Jenkins (see what we can do with the generated XML files)
- [ ] Gather and keep failed results temporary files
- [ ] Be more customizable to run on different clusters
- [ ] Integrate some features from tests.sh
Pull-Request: #807
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Thu, 9 Oct 2014 00:35:19 +0000 (20:35 -0400)]
tests: add base_for_finish
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 9 Oct 2014 00:29:21 +0000 (20:29 -0400)]
lib/standard: introduce *Iterator::finish
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 9 Oct 2014 00:21:07 +0000 (20:21 -0400)]
compiler: implements method_finish (partially)
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 9 Oct 2014 00:18:06 +0000 (20:18 -0400)]
interpreter: implements method_finish
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 9 Oct 2014 00:17:25 +0000 (20:17 -0400)]
typing: add AForExpr::method_finish
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 9 Oct 2014 00:16:45 +0000 (20:16 -0400)]
typing: add method try_get_method
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 8 Oct 2014 22:00:25 +0000 (18:00 -0400)]
Merge: Opportunity
Intoducing Opportunity, a Meetup planifier (or planner, if we listen to @xymus, will correct that along with your remarks).
So, here's the long awaited Opportunity that will be the cornerstone of every ~~nutritious breakfast~~ Latece weekly seminar.
Maybe more once finished, let's conquer the world with Nit's amazing abilities for easy web development.
Also, a function was missing from SQLite, I needed it so, here it is as well.
Pull-Request: #796
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Wed, 8 Oct 2014 20:18:43 +0000 (16:18 -0400)]
tests: improve and fix test_for_abuse.nit
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 8 Oct 2014 20:18:14 +0000 (16:18 -0400)]
lib/file: fix IFStream::close
Signed-off-by: Jean Privat <jean@pryen.org>
Alexis Laferrière [Fri, 4 Jul 2014 16:01:31 +0000 (12:01 -0400)]
contrib: intro nitester, a tester of Nit engines using MPI
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Jean Privat [Wed, 8 Oct 2014 17:30:56 +0000 (13:30 -0400)]
Merge: Can refine inits
Bugfix where a redefined init constructor in a refined class loses its initializers.
This is a fast fix. A cleaner and more generalized approach may be developed latter.
Reported-by: Alexis Laferrière <alexis.laf@xymus.net>
Pull-Request: #810
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Tue, 7 Oct 2014 18:00:48 +0000 (14:00 -0400)]
tests: add base_init_auto_refine
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Tue, 7 Oct 2014 18:00:11 +0000 (14:00 -0400)]
modelize_property: inherit the initializers in the refinements of init
Signed-off-by: Jean Privat <jean@pryen.org>
Lucas Bajolet [Wed, 8 Oct 2014 14:54:41 +0000 (10:54 -0400)]
jenkins: Added opportunity to Jenkins paths
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Tue, 7 Oct 2014 14:19:04 +0000 (10:19 -0400)]
opportunity: Added Makefile and README
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Tue, 30 Sep 2014 20:24:19 +0000 (16:24 -0400)]
contrib/opportunity: Added tests for opportunity
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Mon, 29 Sep 2014 21:19:49 +0000 (17:19 -0400)]
contrib: Intro Opportunity, a meetup planner in Nit
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Tue, 7 Oct 2014 12:35:12 +0000 (08:35 -0400)]
Merge: nitunit: accept an absolute path for `--dir`.
When I passed an absolute path to the `--dir` option of `nitunit`, I got errors like this one:
```
ERROR: test_unread_order (in file /my/costum/dir/.nitunit/test_push_back_reader_TestPushBackDecorator_test_unread_order.nit): sh: 1: .//my/costum/dir/.nitunit/test_push_back_reader_TestPushBackDecorator_test_unread_order.bin: not found
```
It was a trivial bug so I fixed this.
Pull-Request: #809
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Tue, 7 Oct 2014 12:35:09 +0000 (08:35 -0400)]
Merge: lib/math: Added bin_not function to Int
Added missing function bin_not to `Int` as I might need it in the near future.
I figured it could be needed by someone else, so why not !
Pull-Request: #806
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean-Christophe Beaupré [Mon, 6 Oct 2014 16:22:28 +0000 (12:22 -0400)]
nitunit: accept an absolute path for `--dir`.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Lucas Bajolet [Mon, 6 Oct 2014 21:11:08 +0000 (17:11 -0400)]
lib/standard/math: Fixed documentation on old binary operators
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Mon, 6 Oct 2014 19:46:00 +0000 (15:46 -0400)]
Merge: stream: push-back reader
I implemented something similar to http://docs.oracle.com/javase/7/docs/api/java/io/PushbackReader.html last week thinking I needed it for the XML parser, but I ended up with a top-down parser that do not need to backtrack by more than one octet.
Pull-Request: #805
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Mon, 6 Oct 2014 19:45:57 +0000 (15:45 -0400)]
Merge: NOTICE: update dates and authors.
After 2 years, I think the `NOTICE` file need to be updated.
Pull-Request: #804
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean-Christophe Beaupré [Fri, 3 Oct 2014 14:38:34 +0000 (10:38 -0400)]
stream: Introduce a push-back reader.
May be useful when implementing backtracking algorithms.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Lucas Bajolet [Mon, 6 Oct 2014 15:23:04 +0000 (11:23 -0400)]
lib/nitcorn: HttpRequest added methods to get an argument of a certain type
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Lucas Bajolet [Tue, 30 Sep 2014 20:25:04 +0000 (16:25 -0400)]
lib/sqlite: Added last_rowid method to SQLite
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Jean-Christophe Beaupré [Fri, 3 Oct 2014 13:34:24 +0000 (09:34 -0400)]
NOTICE: update dates and authors.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean Privat [Mon, 6 Oct 2014 14:10:59 +0000 (10:10 -0400)]
Merge: Improve Comparator type-kindness
The Comparator class in Nit was a PITA because, with the traditional modelization with a generic class, Comparator is contravariant but Nit only allows covariance in its genericity.
Example:
~~~nit
var ao = new Array[Object].with_items(2,1,10)
ao.sort_with(alpha_comparator)
print ao.join(" ") # => 1 10 2
var ai = new Array[Int].with_items(2,1,10)
ai.sort_with(alpha_comparator)
# Static error: expected a Comparator[Int], got a Comparator[Object]
~~~
This PR implements the nice proposition of Etienne Gagnon to makes Comparator a non-generic class but use virtual types to control the type of compared elements.
It is clearly an improvement over the previous implementation:
* more expressive (++++)
* less code (+)
* simpler for the client (less generic stuff) (+)
* coherent with the `Comparable` hierarchy that also use virtual types (+)
* a little more complex for the lib (virtual type redefinition) (-)
* loss of information when things are typed with the interface `Comparator`, yielding to more potential covariance error at runtime (--)
While less type-safe than a full (and complex) contravariance solution, the proposed solution is still better in term of type-safety than dynamic languages and non-generic-non-virtual-type solutions (eg. Java4):
* runtime errors are detected earlier than with erasure or with dynamic typing (fail fast)
* some errors are still detected statically:
~~~
var a = [1,10,2,3]
alpha_comparator.sort(a)
print a.join(" ") #=> 1 10 2 3
default_comparator.sort(a)
print a.join(" ") #=> 1 2 3 10
var b = [true, false]
alpha_comparator.sort(b)
print b.join(" ") # => false true
default_comparator.sort(b)
# Static type error: expected Array[Comparable], got Array[Bool]
~~~
Original-Idea-By: Etienne M. Gagnon <egagnon@j-meg.com>
Pull-Request: #803
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Alexis Laferrière [Thu, 2 Oct 2014 03:04:24 +0000 (23:04 -0400)]
tests.sh: add env var to move xml file
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 1 Oct 2014 17:02:06 +0000 (13:02 -0400)]
tests.sh: allow errlist file inside outdir
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 1 Oct 2014 16:51:15 +0000 (12:51 -0400)]
tests.sh: add -node option
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Fri, 3 Oct 2014 21:32:33 +0000 (17:32 -0400)]
tests.sh: remove --quiet option on calls to time
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 1 Oct 2014 16:09:09 +0000 (12:09 -0400)]
tests.sh: support absolute path to outdir
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Wed, 1 Oct 2014 15:39:00 +0000 (11:39 -0400)]
tests.sh: add options outdir and compdir to tests.sh script
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Fri, 3 Oct 2014 16:05:07 +0000 (12:05 -0400)]
tests.sh: fix reference to /dev/null
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Alexis Laferrière [Fri, 3 Oct 2014 15:51:38 +0000 (11:51 -0400)]
lib/signals: improve documentation
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>
Lucas Bajolet [Fri, 3 Oct 2014 15:46:07 +0000 (11:46 -0400)]
lib/math: Added bin_not function to Int
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
Jean-Christophe Beaupré [Fri, 3 Oct 2014 14:23:59 +0000 (10:23 -0400)]
stream: Offer string-backed input streams.
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Jean Privat [Thu, 2 Oct 2014 19:11:57 +0000 (15:11 -0400)]
model: rename LinexComparator::min/max to avoid name conflicts
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 2 Oct 2014 17:32:49 +0000 (13:32 -0400)]
lib: beef-up the Comparator api and documentation
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 2 Oct 2014 17:14:24 +0000 (13:14 -0400)]
lib: new API for Comparator
Also remove old deprecated classes.
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Thu, 2 Oct 2014 01:28:40 +0000 (21:28 -0400)]
Merge: lib: move some examples/* into specific subdirectories of their lib
examples/ starts to become a mess.
So move the simple examples of lib into an `example` subdirectory of the lib.
But I am not really sure that it is a good idea.
Before: 132 projects, now 120 projects.
Pull-Request: #793
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Thu, 2 Oct 2014 01:28:31 +0000 (21:28 -0400)]
Merge: Niti: small refactoring
Some small improvements in the interpreter code infrastructure.
Pull-Request: #801
Jean Privat [Thu, 2 Oct 2014 00:13:18 +0000 (20:13 -0400)]
Merge: Niti loves the command line
Nit is both a good compiled language and a good interpreted language (except that the naive interpreter is slow).
Some people already use nit as a traditional script-language by including a shebang at the first line of their programs and set them executable (`chmod +x`).
~~~nit
print "Hello world"
~~~
This experimental PR make the nit interpreter more script-useful.
First, it introduces the `-e` option to run a program written on the command line.
Like with ruby, perl, bash and other script language.
~~~sh
$ nit -e 'print 5+5'
10
~~~
Second, and this is just wonderful, it adds the `-n` option (from ruby and perl) to automatically iterate over the lines of files given as arguments. The current line is named `sys.line` (instead of `$_` in perl and ruby).
It works for stdin if no argument
~~~sh
$ echo "hello world" | nit -n -e 'print sys.line.capitalized'
Hello World
~~~
or on the arguments (as files) if one or more is given (it is the perl and ruby semantic)
~~~sh
$ nit -n -e 'print sys.line.capitalized' README
Nit Is A Statically Typed Object-Oriented Programming Language.
The Goal Of Nit Is To Propose A Statically Typed Programming Language Where Structure Is Not A Pain.
[...]
~~~
The logic of the `-n` is written in a library loaded at runtime (`niti_runtime.nit`), so can be updated without having to recompile the interpreter.
Pull-Request: #799
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 1 Oct 2014 21:18:19 +0000 (17:18 -0400)]
version 0.6.9
Signed-off-by: Jean Privat <jean@pryen.org>
Jean Privat [Wed, 1 Oct 2014 21:17:06 +0000 (17:17 -0400)]
Merge: modelize: `missing-doc` on attributes
missing-doc only fires on public properties.
But attributes are always Private, so consider the getter method instead.
It make sense since the documentation on an attribute documents more the
getter than the attribute.
Pull-Request: #800
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Jean Privat [Wed, 1 Oct 2014 17:40:00 +0000 (13:40 -0400)]
Merge: engines: no more `super_inits` method used in old-style automatic init
Unneeded old code...
Pull-Request: #798
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 1 Oct 2014 17:39:56 +0000 (13:39 -0400)]
Merge: neo: do not instantiate types directly, use the model API
Since visibility on constructor is disabled in nitg, the errors was not detected.
Pull-Request: #797
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 1 Oct 2014 17:39:53 +0000 (13:39 -0400)]
Merge: src: reduce warnings and spelling errors
Thanks to the new detected warnings, it is easier to remove them.
Also fix some spelling errors because vim colored them in red.
Pull-Request: #795
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Jean Privat [Wed, 1 Oct 2014 17:34:44 +0000 (13:34 -0400)]
niti: change some visibility to avoid unnecessary intrude imports
Signed-off-by: Jean Privat <jean@pryen.org>