Commit graph

150 commits

Author SHA1 Message Date
Reimer Behrends
f99c40f61b Improve setjmp()/longjmp() performance.
Exception handling for the C backend used setjmp()/longjmp()
unconditionally. However, on POSIX systems, these functions save and
restore the signal mask, adding considerable overhead to exception
handling, even where no exceptions are involved. The compiler and
library now try to use either _setjmp()/_longjmp() or
sigsetjmp()/siglongjmp() where possible, marked by the defines
"nimRawSetjmp" and "nimSigSetjmp", respectively. The define
"nimStdSetjmp" can be used to revert to setjmp()/longjmp() instead.
2014-09-25 23:29:02 +02:00
Andreas Rumpf
d8f6a2adcb Merge pull request #1481 from rbehrends/fix-stackscan2
Fix stack bottom initialization for non-main modules.
2014-08-14 09:16:26 +02:00
Reimer Behrends
d59b9a2168 Fix stack bottom initialization for non-main modules.
Because PreMain() was now called before the new stack bottom
initialization, it still relied on the old version of initStackBottom(),
which may not handle the top few words of the stack correctly. This
patch also sets the stack bottom in PreMain() using the new approach.
2014-08-14 03:09:39 +02:00
Araq
c812a616b2 Merge branch 'devel' of https://github.com/Araq/Nimrod into devel 2014-08-14 02:44:53 +02:00
Reimer Behrends
a772105e7d Fixed stack bottom initialization for DLLs. 2014-08-14 02:10:28 +02:00
Araq
27b9d10570 Merge branch 'devel' of https://github.com/Araq/Nimrod into devel 2014-08-14 00:02:39 +02:00
Araq
f3d530e482 fixes #1434 2014-08-14 00:02:24 +02:00
Andreas Rumpf
1d19c9525e Merge pull request #1400 from rbehrends/fix-stackscan
More robust implementation for finding the beginning of the stack.
2014-08-13 20:17:16 +02:00
Araq
9673e4f2df progress on deepCopy 2014-08-01 23:40:48 +02:00
Reimer Behrends
15734009ca More robust implementation for finding the beginning of the stack.
This patch inserts an extra stack frame above the function that
calls the actual Nimrod code and ensures that a reference to this
frame is stored as the stack bottom.
2014-07-23 03:20:50 +02:00
Reimer Behrends
55e7d91b31 Fix generation of package-dependent init names.
The code incorrectly used relative instead of absolute paths to
see if *.babel files could be found, which could result in them
not being located properly.

Also added an underscore between the package and the module name
for package_moduleInit() and package_moduleDatInit() so that there
won't be spurious conflicts, e.g. for package A and module BC vs.
package AB and module C.
2014-06-25 00:42:55 +02:00
Andreas Rumpf
2ec1501c7a Merge pull request #1281 from Araq/new_spawn
New spawn
2014-06-16 23:03:17 +02:00
Araq
15909c7be2 optimized method dispatchers 2014-06-12 16:05:50 +02:00
Araq
be229163af Merge branch 'new_spawn' of https://github.com/Araq/Nimrod into new_spawn 2014-06-01 22:00:06 +02:00
EXetoC
f66f43bca0 Fix more 'undeclared identifier' errors. 2014-05-14 18:12:47 +02:00
Araq
c43e8df90c progress for the 'parallel' statement 2014-05-14 01:51:44 +02:00
Araq
5e839d50b4 fixes DLL generation 2014-04-21 03:44:48 +02:00
Araq
8e08ff559f first version of 'spawn' 2014-04-16 08:44:57 +02:00
Zahary Karadjov
862c0ef83d split the inline and closure iterators into different symbol kinds for easier discrimination between them 2014-03-06 21:57:35 +02:00
Zahary Karadjov
5324c9ebba iterators now return tyIter(T);
tyIter(T) represents an "iteration yielding values of type T"

I'm planning to use that in the context of the `is` operator
supporting predicates such as `C.items is iterator` and also
in the upcoming support for higher-order inline iterators.
2014-03-05 02:23:53 +02:00
Araq
614557994e the compiler is now aware of packages 2014-03-02 23:46:20 +01:00
Araq
2f692dcc3a make C backend more robust against compiler bugs 2014-02-27 20:39:34 +01:00
Zahary Karadjov
e6b0b7ecc9 some fixes for static params usage in macros 2014-02-25 01:36:08 +02:00
Zahary Karadjov
9dec669b94 nest PreMain inside NimMain for easier consumption of static libraries developed in Nimrod
fixes many uses of $N instead of $n for new lines that don't affect #line directives
2014-01-23 00:01:15 +02:00
Araq
73c6efdf66 'nil' as a statement is deprecated, use an empty 'discard' instead 2014-01-19 16:54:59 +01:00
Araq
a59939d295 it's the year 2014 2014-01-19 01:25:48 +01:00
Zahary Karadjov
046d829e5d Introduce a PreMain proc in the C codegen
The rationale here is that it has become too hard to step into a program
when #line directives are enabled. You have to skip over many lines of init
code that doesn't have corresponding lines in the nimrod program.
Now, you can just step-out of PreMain and go straight to the useful code
in NimMain.
2013-12-30 11:02:48 +02:00
Zahary Karadjov
afddae5aaf Merge branch 'upstream' into devel
Conflicts:
	compiler/ccgutils.nim
	compiler/msgs.nim
	compiler/sem.nim
	compiler/semexprs.nim
	compiler/seminst.nim
	compiler/semmagic.nim
	compiler/semstmts.nim
	compiler/semtypes.nim
	compiler/semtypinst.nim
	compiler/sigmatch.nim
	compiler/types.nim
	compiler/vmgen.nim
	lib/core/macros.nim
	lib/system.nim
	tests/reject/tenummix.nim
	web/news.txt
2013-12-29 17:21:00 +02:00
Araq
b731e6ef1c case consistency: cs:partial bootstraps on windows 2013-12-29 03:19:10 +01:00
Araq
438703f59e case consistency: next steps 2013-12-29 01:13:51 +01:00
Araq
92b8fac94a case consistency part 4 2013-12-27 23:10:36 +01:00
Araq
2df9b442c6 case consistency part 1 2013-12-27 15:48:53 +01:00
Araq
4b0e391bb8 no stack tracing for the system module; fixes stack bottom detection 2013-12-20 00:02:04 +01:00
Zahary Karadjov
027f30610e static params: expr[T] is now static[T]
This introduces tyStatic and successfully bootstraps and handles
few simple test cases.  Static params within macros are no longer
treated as PNimrodNodes - they are now equivalent to constants
of the designated type.
2013-12-19 01:06:38 +02:00
Araq
132b6b3efe implemented 'injectStmt'; more debug support 2013-12-16 22:26:17 +01:00
Zahary Karadjov
14dd3113a2 fix computed dynlib names; fixes #718 2013-12-09 23:06:11 +02:00
Araq
32d2327be0 don't use memset for temps unless necessary 2013-12-03 13:30:58 +01:00
Araq
fe983b1309 fixes a regression where memset was used without including <string.h> 2013-12-03 01:59:38 +01:00
Araq
ac474a2812 'noStackFrame' implies 'naked' in the generated C code 2013-10-06 00:10:45 +02:00
Araq
a0b82db402 the compiler can now deal with multiple modules of the same name 2013-09-26 17:34:46 +02:00
Araq
8b5aa221ad support for multiple modules of the same name; niminst supports 'platforms'; minor bugfixes 2013-09-24 16:07:07 +02:00
Araq
275c7ccf82 fixes #575 2013-09-10 22:04:12 +02:00
Zahary Karadjov
ca3a4ce672 hacky fix for generic constraints matching 2013-08-19 01:48:25 +03:00
Zahary Karadjov
b01d9b6181 work-in-progress for compiling generics in their owner module 2013-08-19 01:45:16 +03:00
Zahary Karadjov
6ddd4e6a3f Revert "Revert "bugfix: emulated thread vars used in combination with the mark & sweep GC""
This reverts commit 75c586bbe1.
2013-08-19 01:27:05 +03:00
Araq
139562cc64 implements the 'codegenDecl' pragma 2013-06-27 18:13:11 +02:00
Araq
9604df8431 fixes #466 2013-06-06 23:15:05 +02:00
Araq
8c211113f2 better error message for subtle nil errors 2013-05-31 01:27:03 +02:00
Araq
75c586bbe1 Revert "bugfix: emulated thread vars used in combination with the mark & sweep GC"
This reverts commit 420789c278.
2013-05-27 23:20:20 +02:00
Zahary Karadjov
420789c278 bugfix: emulated thread vars used in combination with the mark & sweep GC
resulted in invalid code generation
2013-05-26 11:14:23 +03:00