Commit graph

344 commits

Author SHA1 Message Date
Zahary Karadjov
efb53233cb the foundations of a type traits module; better error messages for expr, typedesc and typeclasses params 2012-04-06 13:46:31 +03:00
Zahary Karadjov
22dc76a361 typedesc and expr params
types are now valid proc/template/macro params and you can overload over them:
proc foo(T: typedesc)        # accept any type
proc foo(T: typedesc{int}) # overload specifically for int
proc foo(T: typedesc{int or float or Callable}) # overload for any type matching the constraints

expr{type} is a param expecting compile time value of the designated type (or type class).

when typedesc or expr params are used with a proc, the proc will be instantiated once
for each unique type/value used as parameter.
2012-03-31 18:50:48 +03:00
Zahary Karadjov
bc2eb0ea9b generic types can be used like type classes. distinct can be applied to type classes. 2012-03-25 20:55:21 +03:00
Araq
1d8ff40f56 vars can be 'compileTime'; shallow introduced weird string aliasing bug 2012-03-11 12:01:10 +01:00
Araq
4a9e07a47c ERecoverableError exception contains the error message 2012-02-25 12:57:16 +01:00
Araq
97366d4419 bugfix: optimization of complex constant string concatenations 2012-02-17 02:16:33 +01:00
Araq
fb35b855d5 added 'system.shallow' 2012-02-09 20:13:36 +01:00
Araq
2c4a1dbc0c further steps for closure support 2012-02-08 09:10:59 +01:00
Araq
632aece191 further steps to closure support 2012-02-06 00:19:56 +01:00
Araq
78f4aacde9 pragma blocks; fixed line information issue with user defined assertions 2012-01-17 23:58:18 +01:00
Araq
e362cbbfd7 bugfix: tests/reject/tnoinst.nim is now rejected properly 2012-01-13 13:40:05 +01:00
Araq
e7e3c451ef removed '^ deprecated' message 2012-01-10 00:33:32 +01:00
Araq
7f3b3298b4 fixes #33 2012-01-07 20:30:51 +01:00
Araq
4f1b89c30c year 2012 for most copyright headers 2012-01-02 23:07:35 +01:00
Araq
9fdfda136c critbits added to stdlib 2011-12-30 21:01:50 +01:00
Araq
e9d6f5a647 bugfix: preliminary symbol declaration in first pass of generics 2011-12-30 21:00:38 +01:00
Araq
73919e3082 GC stack scanning cares about interior pointers 2011-12-30 11:03:01 +01:00
Araq
76f91b90e2 bugfix: compiler errors for explicit initialization of thread local variables; os.nim does not rely on it anymore 2011-12-23 20:05:08 +01:00
Araq
4487b614e1 c2nim compiles again 2011-12-12 19:11:31 +01:00
Zahary Karadjov
d171a8b36f path canonicalization for imported modules, relative paths written in rod files 2011-12-11 11:24:52 +02:00
Zahary Karadjov
e4e74034c2 path canonicalization and proper project relative paths 2011-12-09 04:40:59 +02:00
Araq
70cf34cbdc 'assert' is now implemented without compiler magic 2011-12-04 20:14:50 +01:00
Araq
fc9fdc2b9d cleaned up configuration file handling and documented the new behaviour 2011-11-30 00:53:41 +01:00
Araq
7fcbdc6d42 implemented 'let' statement 2011-11-29 17:27:48 +01:00
Zahary Karadjov
c617479c68 New algorithm for locating and loading nimrod config files.
Some new options added to the compiler (see news.txt for details)
2011-11-25 17:29:55 +02:00
Araq
703430787d C codegen: generate nimKeepAlive calls at strategic places to keep the C compiler from optimizing away all stack roots 2011-11-24 23:28:28 +01:00
Araq
04e5c6718e proper error message when attempting to eval C'imported procs 2011-11-20 17:17:47 +01:00
Araq
1f6725e59e small bugfixes to make more tests green 2011-11-02 02:28:18 +01:00
Araq
5e5e4abfee new compiler option tlsEmulation 2011-10-27 21:03:53 +02:00
Araq
7ebaf44897 bugfixes for ROD file generation; nimcache dir is now flat 2011-10-20 09:06:05 +02:00
Araq
4de84024e5 much more efficient rod file generation 2011-10-18 17:21:51 +02:00
Zahary Karadjov
22546c44d1 Basic unit testing facilities (suites, fixtures, cases)
Added: PNimrodNode.lineinfo for better error messages from macros
Added: seq.splice

For easier use from templates and macros, except stament now supports
the list of exception types to be supplied in nkBraket node (array literal).
2011-10-07 17:07:18 +03:00
Araq
6023e994fb beginning of a taint mode; type system enhancements 2011-09-24 00:46:41 +02:00
Zahary Karadjov
0b197ade6c Multiple C lines corresponding to a single nimrod line are joined together
This patch greatly improves the "step over" operation available in debuggers.
In practice, there are often 4-8 lines of C code generated for each nimrod line
Each such line will be responsible to a single step in the debugger that is
a) not expected by the user
b) taking the user to an incorrect line in the nimrod code

To keep this working, all code generation should use the rope formatting
facilities when producing new lines (i.e. $n and $N).
New semantics for the format string are introduced:
$n means "soft new line" that could be joined/broken when lineDir is enabled.
$N means "hard new line" that will always appear as a new line.

As an alternative to this approach, I also tested producing code like this:
#line "code.nim" 154
foo = bar; \
foo(bar) \

This is better for readability of the final output, but unfortunately it didn't
produce the desired result across all compilers/debuggers.
2011-09-20 14:11:06 +03:00
Zahary Karadjov
0f0dfd6379 Nimrod can now compile itself with --lineDir enabled 2011-09-20 14:11:06 +03:00
Araq
6a8a409f1b preparation for new 'is' operator; breaks bootstrapping again, sorry (use generated C code) 2011-07-31 00:21:32 +02:00
Araq
2f066395ba bugfixes; step one for 'var T' as return type support 2011-07-28 00:53:52 +02:00
Araq
5b96eaa953 preparations for 0.8.12 2011-07-10 15:48:13 +02:00
Araq
99bcc233cd bugfix: 'set' overloadable; further steps for multi threading support 2011-07-08 01:29:15 +02:00
Araq
4fa80956b8 compiler can emulate thread local variables 2011-06-15 02:09:02 +02:00
Araq
c019d17561 first (non working) implementation of global thread analysis 2011-06-13 01:40:22 +02:00
Araq
145fabeb67 const table support 2011-04-29 22:55:15 +02:00
Araq
e487c0a249 better error message for invalid module names 2011-04-16 09:11:24 +02:00
Araq
cd292568d7 big repo cleanup 2011-04-12 01:13:42 +02:00
Renamed from rod/msgs.nim (Browse further)