Merge branch 'master' of github.com:Araq/Nimrod
This commit is contained in:
commit
84534ce4b8
30 changed files with 894 additions and 494 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -169,6 +169,7 @@ examples/cross_calculator/android/tags
|
||||||
/testresults.json
|
/testresults.json
|
||||||
/tests/caas/SymbolProcRun.*/
|
/tests/caas/SymbolProcRun.*/
|
||||||
/tests/caas/absurd_nesting
|
/tests/caas/absurd_nesting
|
||||||
|
/tests/caas/completion_dot_syntax_main
|
||||||
/tests/caas/forward_declarations
|
/tests/caas/forward_declarations
|
||||||
/tests/caas/idetools_api
|
/tests/caas/idetools_api
|
||||||
/tests/caas/imported
|
/tests/caas/imported
|
||||||
|
|
|
||||||
200
build.bat
200
build.bat
|
|
@ -1,200 +0,0 @@
|
||||||
@echo off
|
|
||||||
REM Generated by niminst
|
|
||||||
SET CC=gcc
|
|
||||||
SET LINKER=gcc
|
|
||||||
SET COMP_FLAGS=-w -O3 -fno-strict-aliasing
|
|
||||||
SET LINK_FLAGS=
|
|
||||||
|
|
||||||
REM call the compiler:
|
|
||||||
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimrod.c -o build\1_1\nimrod.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimrod.c -o build\1_1\nimrod.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\system.c -o build\1_1\system.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\system.c -o build\1_1\system.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\commands.c -o build\1_1\commands.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\commands.c -o build\1_1\commands.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\os.c -o build\1_1\os.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\os.c -o build\1_1\os.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\strutils.c -o build\1_1\strutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\strutils.c -o build\1_1\strutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseutils.c -o build\1_1\parseutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseutils.c -o build\1_1\parseutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\times.c -o build\1_1\times.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\times.c -o build\1_1\times.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\winlean.c -o build\1_1\winlean.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\winlean.c -o build\1_1\winlean.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\msgs.c -o build\1_1\msgs.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\msgs.c -o build\1_1\msgs.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\options.c -o build\1_1\options.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\options.c -o build\1_1\options.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lists.c -o build\1_1\lists.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lists.c -o build\1_1\lists.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\strtabs.c -o build\1_1\strtabs.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\strtabs.c -o build\1_1\strtabs.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\hashes.c -o build\1_1\hashes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\hashes.c -o build\1_1\hashes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\tables.c -o build\1_1\tables.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\tables.c -o build\1_1\tables.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\math.c -o build\1_1\math.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\math.c -o build\1_1\math.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sockets.c -o build\1_1\sockets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sockets.c -o build\1_1\sockets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ropes.c -o build\1_1\ropes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ropes.c -o build\1_1\ropes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\platform.c -o build\1_1\platform.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\platform.c -o build\1_1\platform.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\crc.c -o build\1_1\crc.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\crc.c -o build\1_1\crc.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nversion.c -o build\1_1\nversion.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nversion.c -o build\1_1\nversion.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\condsyms.c -o build\1_1\condsyms.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\condsyms.c -o build\1_1\condsyms.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ast.c -o build\1_1\ast.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ast.c -o build\1_1\ast.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\idents.c -o build\1_1\idents.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\idents.c -o build\1_1\idents.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\intsets.c -o build\1_1\intsets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\intsets.c -o build\1_1\intsets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\idgen.c -o build\1_1\idgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\idgen.c -o build\1_1\idgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\astalgo.c -o build\1_1\astalgo.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\astalgo.c -o build\1_1\astalgo.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodutils.c -o build\1_1\rodutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodutils.c -o build\1_1\rodutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\extccomp.c -o build\1_1\extccomp.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\extccomp.c -o build\1_1\extccomp.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\osproc.c -o build\1_1\osproc.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\osproc.c -o build\1_1\osproc.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\streams.c -o build\1_1\streams.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\streams.c -o build\1_1\streams.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\wordrecg.c -o build\1_1\wordrecg.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\wordrecg.c -o build\1_1\wordrecg.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\babelcmd.c -o build\1_1\babelcmd.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\babelcmd.c -o build\1_1\babelcmd.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexer.c -o build\1_1\lexer.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexer.c -o build\1_1\lexer.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimlexbase.c -o build\1_1\nimlexbase.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimlexbase.c -o build\1_1\nimlexbase.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\llstream.c -o build\1_1\llstream.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\llstream.c -o build\1_1\llstream.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimconf.c -o build\1_1\nimconf.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimconf.c -o build\1_1\nimconf.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\main.c -o build\1_1\main.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\main.c -o build\1_1\main.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\syntaxes.c -o build\1_1\syntaxes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\syntaxes.c -o build\1_1\syntaxes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parser.c -o build\1_1\parser.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parser.c -o build\1_1\parser.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\pbraces.c -o build\1_1\pbraces.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\pbraces.c -o build\1_1\pbraces.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\filters.c -o build\1_1\filters.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\filters.c -o build\1_1\filters.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\renderer.c -o build\1_1\renderer.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\renderer.c -o build\1_1\renderer.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\filter_tmpl.c -o build\1_1\filter_tmpl.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\filter_tmpl.c -o build\1_1\filter_tmpl.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodread.c -o build\1_1\rodread.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodread.c -o build\1_1\rodread.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\types.c -o build\1_1\types.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\types.c -o build\1_1\types.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\trees.c -o build\1_1\trees.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\trees.c -o build\1_1\trees.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\memfiles.c -o build\1_1\memfiles.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\memfiles.c -o build\1_1\memfiles.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodwrite.c -o build\1_1\rodwrite.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rodwrite.c -o build\1_1\rodwrite.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\passes.c -o build\1_1\passes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\passes.c -o build\1_1\passes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\magicsys.c -o build\1_1\magicsys.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\magicsys.c -o build\1_1\magicsys.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimsets.c -o build\1_1\nimsets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\nimsets.c -o build\1_1\nimsets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\bitsets.c -o build\1_1\bitsets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\bitsets.c -o build\1_1\bitsets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semthreads.c -o build\1_1\semthreads.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semthreads.c -o build\1_1\semthreads.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\importer.c -o build\1_1\importer.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\importer.c -o build\1_1\importer.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lookups.c -o build\1_1\lookups.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lookups.c -o build\1_1\lookups.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semdata.c -o build\1_1\semdata.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semdata.c -o build\1_1\semdata.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\treetab.c -o build\1_1\treetab.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\treetab.c -o build\1_1\treetab.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\evals.c -o build\1_1\evals.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\evals.c -o build\1_1\evals.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semfold.c -o build\1_1\semfold.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semfold.c -o build\1_1\semfold.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\saturate.c -o build\1_1\saturate.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\saturate.c -o build\1_1\saturate.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\transf.c -o build\1_1\transf.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\transf.c -o build\1_1\transf.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgmeth.c -o build\1_1\cgmeth.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgmeth.c -o build\1_1\cgmeth.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sempass2.c -o build\1_1\sempass2.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sempass2.c -o build\1_1\sempass2.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lambdalifting.c -o build\1_1\lambdalifting.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lambdalifting.c -o build\1_1\lambdalifting.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\evaltempl.c -o build\1_1\evaltempl.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\evaltempl.c -o build\1_1\evaltempl.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sem.c -o build\1_1\sem.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sem.c -o build\1_1\sem.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\procfind.c -o build\1_1\procfind.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\procfind.c -o build\1_1\procfind.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\pragmas.c -o build\1_1\pragmas.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\pragmas.c -o build\1_1\pragmas.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\semtypinst.c -o build\1_1\semtypinst.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\semtypinst.c -o build\1_1\semtypinst.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\sigmatch.c -o build\1_1\sigmatch.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\sigmatch.c -o build\1_1\sigmatch.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parampatterns.c -o build\1_1\parampatterns.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parampatterns.c -o build\1_1\parampatterns.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen.c -o build\1_1\docgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen.c -o build\1_1\docgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstast.c -o build\1_1\rstast.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstast.c -o build\1_1\rstast.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rst.c -o build\1_1\rst.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rst.c -o build\1_1\rst.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstgen.c -o build\1_1\rstgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\rstgen.c -o build\1_1\rstgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\highlite.c -o build\1_1\highlite.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\highlite.c -o build\1_1\highlite.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\algorithm.c -o build\1_1\algorithm.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\algorithm.c -o build\1_1\algorithm.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\aliases.c -o build\1_1\aliases.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\aliases.c -o build\1_1\aliases.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\patterns.c -o build\1_1\patterns.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\patterns.c -o build\1_1\patterns.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgen.c -o build\1_1\cgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgen.c -o build\1_1\cgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgutils.c -o build\1_1\ccgutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgutils.c -o build\1_1\ccgutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgendata.c -o build\1_1\cgendata.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgendata.c -o build\1_1\cgendata.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgmerge.c -o build\1_1\ccgmerge.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\ccgmerge.c -o build\1_1\ccgmerge.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\jsgen.c -o build\1_1\jsgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\jsgen.c -o build\1_1\jsgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\json.c -o build\1_1\json.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\json.c -o build\1_1\json.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexbase.c -o build\1_1\lexbase.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\lexbase.c -o build\1_1\lexbase.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\unicode.c -o build\1_1\unicode.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\unicode.c -o build\1_1\unicode.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\passaux.c -o build\1_1\passaux.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\passaux.c -o build\1_1\passaux.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\depends.c -o build\1_1\depends.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\depends.c -o build\1_1\depends.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen2.c -o build\1_1\docgen2.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\docgen2.c -o build\1_1\docgen2.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\service.c -o build\1_1\service.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\service.c -o build\1_1\service.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseopt.c -o build\1_1\parseopt.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_1\parseopt.c -o build\1_1\parseopt.o
|
|
||||||
|
|
||||||
ECHO %LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_1\nimrod.o build\1_1\system.o build\1_1\commands.o build\1_1\os.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\times.o build\1_1\winlean.o build\1_1\msgs.o build\1_1\options.o build\1_1\lists.o build\1_1\strtabs.o build\1_1\hashes.o build\1_1\tables.o build\1_1\math.o build\1_1\sockets.o build\1_1\ropes.o build\1_1\platform.o build\1_1\crc.o build\1_1\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\idents.o build\1_1\intsets.o build\1_1\idgen.o build\1_1\astalgo.o build\1_1\rodutils.o build\1_1\extccomp.o build\1_1\osproc.o build\1_1\streams.o build\1_1\wordrecg.o build\1_1\babelcmd.o build\1_1\lexer.o build\1_1\nimlexbase.o build\1_1\llstream.o build\1_1\nimconf.o build\1_1\main.o build\1_1\syntaxes.o build\1_1\parser.o build\1_1\pbraces.o build\1_1\filters.o build\1_1\renderer.o build\1_1\filter_tmpl.o build\1_1\rodread.o build\1_1\types.o build\1_1\trees.o build\1_1\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\magicsys.o build\1_1\nimsets.o build\1_1\bitsets.o build\1_1\semthreads.o build\1_1\importer.o build\1_1\lookups.o build\1_1\semdata.o build\1_1\treetab.o build\1_1\evals.o build\1_1\semfold.o build\1_1\saturate.o build\1_1\transf.o build\1_1\cgmeth.o build\1_1\sempass2.o build\1_1\lambdalifting.o build\1_1\evaltempl.o build\1_1\sem.o build\1_1\procfind.o build\1_1\pragmas.o build\1_1\semtypinst.o build\1_1\sigmatch.o build\1_1\parampatterns.o build\1_1\docgen.o build\1_1\rstast.o build\1_1\rst.o build\1_1\rstgen.o build\1_1\highlite.o build\1_1\algorithm.o build\1_1\aliases.o build\1_1\patterns.o build\1_1\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\jsgen.o build\1_1\json.o build\1_1\lexbase.o build\1_1\unicode.o build\1_1\passaux.o build\1_1\depends.o build\1_1\docgen2.o build\1_1\service.o build\1_1\parseopt.o
|
|
||||||
%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_1\nimrod.o build\1_1\system.o build\1_1\commands.o build\1_1\os.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\times.o build\1_1\winlean.o build\1_1\msgs.o build\1_1\options.o build\1_1\lists.o build\1_1\strtabs.o build\1_1\hashes.o build\1_1\tables.o build\1_1\math.o build\1_1\sockets.o build\1_1\ropes.o build\1_1\platform.o build\1_1\crc.o build\1_1\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\idents.o build\1_1\intsets.o build\1_1\idgen.o build\1_1\astalgo.o build\1_1\rodutils.o build\1_1\extccomp.o build\1_1\osproc.o build\1_1\streams.o build\1_1\wordrecg.o build\1_1\babelcmd.o build\1_1\lexer.o build\1_1\nimlexbase.o build\1_1\llstream.o build\1_1\nimconf.o build\1_1\main.o build\1_1\syntaxes.o build\1_1\parser.o build\1_1\pbraces.o build\1_1\filters.o build\1_1\renderer.o build\1_1\filter_tmpl.o build\1_1\rodread.o build\1_1\types.o build\1_1\trees.o build\1_1\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\magicsys.o build\1_1\nimsets.o build\1_1\bitsets.o build\1_1\semthreads.o build\1_1\importer.o build\1_1\lookups.o build\1_1\semdata.o build\1_1\treetab.o build\1_1\evals.o build\1_1\semfold.o build\1_1\saturate.o build\1_1\transf.o build\1_1\cgmeth.o build\1_1\sempass2.o build\1_1\lambdalifting.o build\1_1\evaltempl.o build\1_1\sem.o build\1_1\procfind.o build\1_1\pragmas.o build\1_1\semtypinst.o build\1_1\sigmatch.o build\1_1\parampatterns.o build\1_1\docgen.o build\1_1\rstast.o build\1_1\rst.o build\1_1\rstgen.o build\1_1\highlite.o build\1_1\algorithm.o build\1_1\aliases.o build\1_1\patterns.o build\1_1\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\jsgen.o build\1_1\json.o build\1_1\lexbase.o build\1_1\unicode.o build\1_1\passaux.o build\1_1\depends.o build\1_1\docgen2.o build\1_1\service.o build\1_1\parseopt.o
|
|
||||||
|
|
||||||
|
|
||||||
ECHO SUCCESS
|
|
||||||
|
|
||||||
200
build64.bat
200
build64.bat
|
|
@ -1,200 +0,0 @@
|
||||||
@echo off
|
|
||||||
REM Generated by niminst
|
|
||||||
SET CC=gcc
|
|
||||||
SET LINKER=gcc
|
|
||||||
SET COMP_FLAGS=-w -O3 -fno-strict-aliasing
|
|
||||||
SET LINK_FLAGS=
|
|
||||||
|
|
||||||
REM call the compiler:
|
|
||||||
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimrod.c -o build\1_2\nimrod.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimrod.c -o build\1_2\nimrod.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\system.c -o build\1_2\system.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\system.c -o build\1_2\system.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\commands.c -o build\1_2\commands.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\commands.c -o build\1_2\commands.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\os.c -o build\1_2\os.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\os.c -o build\1_2\os.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\strutils.c -o build\1_2\strutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\strutils.c -o build\1_2\strutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseutils.c -o build\1_2\parseutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseutils.c -o build\1_2\parseutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\times.c -o build\1_2\times.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\times.c -o build\1_2\times.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\winlean.c -o build\1_2\winlean.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\winlean.c -o build\1_2\winlean.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\msgs.c -o build\1_2\msgs.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\msgs.c -o build\1_2\msgs.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\options.c -o build\1_2\options.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\options.c -o build\1_2\options.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lists.c -o build\1_2\lists.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lists.c -o build\1_2\lists.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\strtabs.c -o build\1_2\strtabs.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\strtabs.c -o build\1_2\strtabs.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\hashes.c -o build\1_2\hashes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\hashes.c -o build\1_2\hashes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\tables.c -o build\1_2\tables.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\tables.c -o build\1_2\tables.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\math.c -o build\1_2\math.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\math.c -o build\1_2\math.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sockets.c -o build\1_2\sockets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sockets.c -o build\1_2\sockets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ropes.c -o build\1_2\ropes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ropes.c -o build\1_2\ropes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\platform.c -o build\1_2\platform.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\platform.c -o build\1_2\platform.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\crc.c -o build\1_2\crc.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\crc.c -o build\1_2\crc.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nversion.c -o build\1_2\nversion.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nversion.c -o build\1_2\nversion.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\condsyms.c -o build\1_2\condsyms.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\condsyms.c -o build\1_2\condsyms.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ast.c -o build\1_2\ast.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ast.c -o build\1_2\ast.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\idents.c -o build\1_2\idents.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\idents.c -o build\1_2\idents.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\intsets.c -o build\1_2\intsets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\intsets.c -o build\1_2\intsets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\idgen.c -o build\1_2\idgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\idgen.c -o build\1_2\idgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\astalgo.c -o build\1_2\astalgo.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\astalgo.c -o build\1_2\astalgo.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodutils.c -o build\1_2\rodutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodutils.c -o build\1_2\rodutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\extccomp.c -o build\1_2\extccomp.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\extccomp.c -o build\1_2\extccomp.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\osproc.c -o build\1_2\osproc.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\osproc.c -o build\1_2\osproc.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\streams.c -o build\1_2\streams.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\streams.c -o build\1_2\streams.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\wordrecg.c -o build\1_2\wordrecg.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\wordrecg.c -o build\1_2\wordrecg.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\babelcmd.c -o build\1_2\babelcmd.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\babelcmd.c -o build\1_2\babelcmd.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexer.c -o build\1_2\lexer.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexer.c -o build\1_2\lexer.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimlexbase.c -o build\1_2\nimlexbase.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimlexbase.c -o build\1_2\nimlexbase.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\llstream.c -o build\1_2\llstream.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\llstream.c -o build\1_2\llstream.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimconf.c -o build\1_2\nimconf.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimconf.c -o build\1_2\nimconf.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\main.c -o build\1_2\main.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\main.c -o build\1_2\main.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\syntaxes.c -o build\1_2\syntaxes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\syntaxes.c -o build\1_2\syntaxes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parser.c -o build\1_2\parser.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parser.c -o build\1_2\parser.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\pbraces.c -o build\1_2\pbraces.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\pbraces.c -o build\1_2\pbraces.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\filters.c -o build\1_2\filters.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\filters.c -o build\1_2\filters.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\renderer.c -o build\1_2\renderer.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\renderer.c -o build\1_2\renderer.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\filter_tmpl.c -o build\1_2\filter_tmpl.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\filter_tmpl.c -o build\1_2\filter_tmpl.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodread.c -o build\1_2\rodread.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodread.c -o build\1_2\rodread.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\types.c -o build\1_2\types.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\types.c -o build\1_2\types.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\trees.c -o build\1_2\trees.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\trees.c -o build\1_2\trees.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\memfiles.c -o build\1_2\memfiles.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\memfiles.c -o build\1_2\memfiles.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodwrite.c -o build\1_2\rodwrite.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rodwrite.c -o build\1_2\rodwrite.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\passes.c -o build\1_2\passes.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\passes.c -o build\1_2\passes.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\magicsys.c -o build\1_2\magicsys.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\magicsys.c -o build\1_2\magicsys.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimsets.c -o build\1_2\nimsets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\nimsets.c -o build\1_2\nimsets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\bitsets.c -o build\1_2\bitsets.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\bitsets.c -o build\1_2\bitsets.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semthreads.c -o build\1_2\semthreads.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semthreads.c -o build\1_2\semthreads.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\importer.c -o build\1_2\importer.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\importer.c -o build\1_2\importer.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lookups.c -o build\1_2\lookups.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lookups.c -o build\1_2\lookups.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semdata.c -o build\1_2\semdata.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semdata.c -o build\1_2\semdata.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\treetab.c -o build\1_2\treetab.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\treetab.c -o build\1_2\treetab.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\evals.c -o build\1_2\evals.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\evals.c -o build\1_2\evals.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semfold.c -o build\1_2\semfold.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semfold.c -o build\1_2\semfold.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\saturate.c -o build\1_2\saturate.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\saturate.c -o build\1_2\saturate.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\transf.c -o build\1_2\transf.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\transf.c -o build\1_2\transf.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgmeth.c -o build\1_2\cgmeth.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgmeth.c -o build\1_2\cgmeth.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sempass2.c -o build\1_2\sempass2.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sempass2.c -o build\1_2\sempass2.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lambdalifting.c -o build\1_2\lambdalifting.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lambdalifting.c -o build\1_2\lambdalifting.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\evaltempl.c -o build\1_2\evaltempl.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\evaltempl.c -o build\1_2\evaltempl.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sem.c -o build\1_2\sem.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sem.c -o build\1_2\sem.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\procfind.c -o build\1_2\procfind.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\procfind.c -o build\1_2\procfind.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\pragmas.c -o build\1_2\pragmas.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\pragmas.c -o build\1_2\pragmas.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\semtypinst.c -o build\1_2\semtypinst.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\semtypinst.c -o build\1_2\semtypinst.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\sigmatch.c -o build\1_2\sigmatch.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\sigmatch.c -o build\1_2\sigmatch.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parampatterns.c -o build\1_2\parampatterns.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parampatterns.c -o build\1_2\parampatterns.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen.c -o build\1_2\docgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen.c -o build\1_2\docgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstast.c -o build\1_2\rstast.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstast.c -o build\1_2\rstast.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rst.c -o build\1_2\rst.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rst.c -o build\1_2\rst.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstgen.c -o build\1_2\rstgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\rstgen.c -o build\1_2\rstgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\highlite.c -o build\1_2\highlite.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\highlite.c -o build\1_2\highlite.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\algorithm.c -o build\1_2\algorithm.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\algorithm.c -o build\1_2\algorithm.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\aliases.c -o build\1_2\aliases.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\aliases.c -o build\1_2\aliases.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\patterns.c -o build\1_2\patterns.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\patterns.c -o build\1_2\patterns.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgen.c -o build\1_2\cgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgen.c -o build\1_2\cgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgutils.c -o build\1_2\ccgutils.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgutils.c -o build\1_2\ccgutils.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgendata.c -o build\1_2\cgendata.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgendata.c -o build\1_2\cgendata.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgmerge.c -o build\1_2\ccgmerge.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\ccgmerge.c -o build\1_2\ccgmerge.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\jsgen.c -o build\1_2\jsgen.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\jsgen.c -o build\1_2\jsgen.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\json.c -o build\1_2\json.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\json.c -o build\1_2\json.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexbase.c -o build\1_2\lexbase.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\lexbase.c -o build\1_2\lexbase.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\unicode.c -o build\1_2\unicode.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\unicode.c -o build\1_2\unicode.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\passaux.c -o build\1_2\passaux.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\passaux.c -o build\1_2\passaux.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\depends.c -o build\1_2\depends.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\depends.c -o build\1_2\depends.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen2.c -o build\1_2\docgen2.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\docgen2.c -o build\1_2\docgen2.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\service.c -o build\1_2\service.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\service.c -o build\1_2\service.o
|
|
||||||
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseopt.c -o build\1_2\parseopt.o
|
|
||||||
%CC% %COMP_FLAGS% -Ibuild -c build\1_2\parseopt.c -o build\1_2\parseopt.o
|
|
||||||
|
|
||||||
ECHO %LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_2\nimrod.o build\1_2\system.o build\1_2\commands.o build\1_2\os.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\times.o build\1_2\winlean.o build\1_2\msgs.o build\1_2\options.o build\1_2\lists.o build\1_2\strtabs.o build\1_2\hashes.o build\1_2\tables.o build\1_2\math.o build\1_2\sockets.o build\1_2\ropes.o build\1_2\platform.o build\1_2\crc.o build\1_2\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\idents.o build\1_2\intsets.o build\1_2\idgen.o build\1_2\astalgo.o build\1_2\rodutils.o build\1_2\extccomp.o build\1_2\osproc.o build\1_2\streams.o build\1_2\wordrecg.o build\1_2\babelcmd.o build\1_2\lexer.o build\1_2\nimlexbase.o build\1_2\llstream.o build\1_2\nimconf.o build\1_2\main.o build\1_2\syntaxes.o build\1_2\parser.o build\1_2\pbraces.o build\1_2\filters.o build\1_2\renderer.o build\1_2\filter_tmpl.o build\1_2\rodread.o build\1_2\types.o build\1_2\trees.o build\1_2\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\magicsys.o build\1_2\nimsets.o build\1_2\bitsets.o build\1_2\semthreads.o build\1_2\importer.o build\1_2\lookups.o build\1_2\semdata.o build\1_2\treetab.o build\1_2\evals.o build\1_2\semfold.o build\1_2\saturate.o build\1_2\transf.o build\1_2\cgmeth.o build\1_2\sempass2.o build\1_2\lambdalifting.o build\1_2\evaltempl.o build\1_2\sem.o build\1_2\procfind.o build\1_2\pragmas.o build\1_2\semtypinst.o build\1_2\sigmatch.o build\1_2\parampatterns.o build\1_2\docgen.o build\1_2\rstast.o build\1_2\rst.o build\1_2\rstgen.o build\1_2\highlite.o build\1_2\algorithm.o build\1_2\aliases.o build\1_2\patterns.o build\1_2\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\jsgen.o build\1_2\json.o build\1_2\lexbase.o build\1_2\unicode.o build\1_2\passaux.o build\1_2\depends.o build\1_2\docgen2.o build\1_2\service.o build\1_2\parseopt.o
|
|
||||||
%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_2\nimrod.o build\1_2\system.o build\1_2\commands.o build\1_2\os.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\times.o build\1_2\winlean.o build\1_2\msgs.o build\1_2\options.o build\1_2\lists.o build\1_2\strtabs.o build\1_2\hashes.o build\1_2\tables.o build\1_2\math.o build\1_2\sockets.o build\1_2\ropes.o build\1_2\platform.o build\1_2\crc.o build\1_2\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\idents.o build\1_2\intsets.o build\1_2\idgen.o build\1_2\astalgo.o build\1_2\rodutils.o build\1_2\extccomp.o build\1_2\osproc.o build\1_2\streams.o build\1_2\wordrecg.o build\1_2\babelcmd.o build\1_2\lexer.o build\1_2\nimlexbase.o build\1_2\llstream.o build\1_2\nimconf.o build\1_2\main.o build\1_2\syntaxes.o build\1_2\parser.o build\1_2\pbraces.o build\1_2\filters.o build\1_2\renderer.o build\1_2\filter_tmpl.o build\1_2\rodread.o build\1_2\types.o build\1_2\trees.o build\1_2\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\magicsys.o build\1_2\nimsets.o build\1_2\bitsets.o build\1_2\semthreads.o build\1_2\importer.o build\1_2\lookups.o build\1_2\semdata.o build\1_2\treetab.o build\1_2\evals.o build\1_2\semfold.o build\1_2\saturate.o build\1_2\transf.o build\1_2\cgmeth.o build\1_2\sempass2.o build\1_2\lambdalifting.o build\1_2\evaltempl.o build\1_2\sem.o build\1_2\procfind.o build\1_2\pragmas.o build\1_2\semtypinst.o build\1_2\sigmatch.o build\1_2\parampatterns.o build\1_2\docgen.o build\1_2\rstast.o build\1_2\rst.o build\1_2\rstgen.o build\1_2\highlite.o build\1_2\algorithm.o build\1_2\aliases.o build\1_2\patterns.o build\1_2\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\jsgen.o build\1_2\json.o build\1_2\lexbase.o build\1_2\unicode.o build\1_2\passaux.o build\1_2\depends.o build\1_2\docgen2.o build\1_2\service.o build\1_2\parseopt.o
|
|
||||||
|
|
||||||
|
|
||||||
ECHO SUCCESS
|
|
||||||
|
|
||||||
|
|
@ -187,7 +187,8 @@ proc usefulFact(n: PNode): PNode =
|
||||||
# if a:
|
# if a:
|
||||||
# ...
|
# ...
|
||||||
# We make can easily replace 'a' by '2 < x' here:
|
# We make can easily replace 'a' by '2 < x' here:
|
||||||
result = usefulFact(n.sym.ast)
|
if n.sym.ast != nil:
|
||||||
|
result = usefulFact(n.sym.ast)
|
||||||
elif n.kind == nkStmtListExpr:
|
elif n.kind == nkStmtListExpr:
|
||||||
result = usefulFact(n.lastSon)
|
result = usefulFact(n.lastSon)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,21 +141,23 @@ proc semDirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode
|
||||||
|
|
||||||
proc semWhen(c: PContext, n: PNode, semCheck: bool = true): PNode
|
proc semWhen(c: PContext, n: PNode, semCheck: bool = true): PNode
|
||||||
|
|
||||||
proc evalTypedExpr(c: PContext, e: PNode): PNode =
|
|
||||||
result = getConstExpr(c.module, e)
|
|
||||||
if result == nil:
|
|
||||||
result = evalConstExpr(c.module, e)
|
|
||||||
if result == nil or result.kind == nkEmpty:
|
|
||||||
LocalError(e.info, errConstExprExpected)
|
|
||||||
# error correction:
|
|
||||||
result = e
|
|
||||||
|
|
||||||
proc semConstExpr(c: PContext, n: PNode): PNode =
|
proc semConstExpr(c: PContext, n: PNode): PNode =
|
||||||
var e = semExprWithType(c, n)
|
var e = semExprWithType(c, n)
|
||||||
if e == nil:
|
if e == nil:
|
||||||
LocalError(n.info, errConstExprExpected)
|
LocalError(n.info, errConstExprExpected)
|
||||||
return n
|
return n
|
||||||
result = evalTypedExpr(c, e)
|
result = getConstExpr(c.module, e)
|
||||||
|
if result == nil:
|
||||||
|
result = evalConstExpr(c.module, e)
|
||||||
|
if result == nil or result.kind == nkEmpty:
|
||||||
|
if e.info != n.info:
|
||||||
|
pushInfoContext(n.info)
|
||||||
|
LocalError(e.info, errConstExprExpected)
|
||||||
|
popInfoContext()
|
||||||
|
else:
|
||||||
|
LocalError(e.info, errConstExprExpected)
|
||||||
|
# error correction:
|
||||||
|
result = e
|
||||||
|
|
||||||
include hlo, seminst, semcall
|
include hlo, seminst, semcall
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -751,8 +751,11 @@ proc semEcho(c: PContext, n: PNode): PNode =
|
||||||
checkMinSonsLen(n, 1)
|
checkMinSonsLen(n, 1)
|
||||||
for i in countup(1, sonsLen(n) - 1):
|
for i in countup(1, sonsLen(n) - 1):
|
||||||
var arg = semExprWithType(c, n.sons[i])
|
var arg = semExprWithType(c, n.sons[i])
|
||||||
n.sons[i] = semExpr(c, buildStringify(c, arg))
|
n.sons[i] = semExprWithType(c, buildStringify(c, arg))
|
||||||
|
let t = n.sons[i].typ
|
||||||
|
if t == nil or t.skipTypes(abstractInst).kind != tyString:
|
||||||
|
LocalError(n.info, errGenerated,
|
||||||
|
"implicitly invoked '$' does not return string")
|
||||||
let t = n.sons[0].typ
|
let t = n.sons[0].typ
|
||||||
if tfNoSideEffect notin t.flags: incl(c.p.owner.flags, sfSideEffect)
|
if tfNoSideEffect notin t.flags: incl(c.p.owner.flags, sfSideEffect)
|
||||||
result = n
|
result = n
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ path="$lib/js"
|
||||||
path="$lib/pure/unidecode"
|
path="$lib/pure/unidecode"
|
||||||
|
|
||||||
@if nimbabel:
|
@if nimbabel:
|
||||||
babelpath="$home/.babel/libs/"
|
babelpath="$home/.babel/pkgs/"
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@if release or quick:
|
@if release or quick:
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,8 @@ Advanced options:
|
||||||
--cpu:SYMBOL set the target processor (cross-compilation)
|
--cpu:SYMBOL set the target processor (cross-compilation)
|
||||||
--debuginfo enables debug information
|
--debuginfo enables debug information
|
||||||
--debugger:on|off turn Embedded Nimrod Debugger on|off
|
--debugger:on|off turn Embedded Nimrod Debugger on|off
|
||||||
-t, --passc:OPTION pass an option to the C compiler
|
-t, --passC:OPTION pass an option to the C compiler
|
||||||
-l, --passl:OPTION pass an option to the linker
|
-l, --passL:OPTION pass an option to the linker
|
||||||
--cincludes:DIR modify the C compiler header search path
|
--cincludes:DIR modify the C compiler header search path
|
||||||
--clibdir:DIR modify the linker library search path
|
--clibdir:DIR modify the linker library search path
|
||||||
--clib:LIBNAME link an additional C library
|
--clib:LIBNAME link an additional C library
|
||||||
|
|
|
||||||
153
doc/idetools.txt
153
doc/idetools.txt
|
|
@ -11,13 +11,13 @@
|
||||||
Nimrod differs from many other compilers in that it is really fast,
|
Nimrod differs from many other compilers in that it is really fast,
|
||||||
and being so fast makes it suited to provide external queries for
|
and being so fast makes it suited to provide external queries for
|
||||||
text editors about the source code being written. Through the
|
text editors about the source code being written. Through the
|
||||||
``idetools`` command of `the compiler <nimrodc.html>`_, any IDE can
|
`idetools`:idx: command of `the compiler <nimrodc.html>`_, any IDE
|
||||||
query a ``.nim`` source file and obtain useful information like
|
can query a ``.nim`` source file and obtain useful information like
|
||||||
definition of symbols or suggestions for completion.
|
definition of symbols or suggestions for completion.
|
||||||
|
|
||||||
This document will guide you through the available options. If you
|
This document will guide you through the available options. If you
|
||||||
want to look at practical examples of idetools support you can look
|
want to look at practical examples of idetools support you can look
|
||||||
at the test files found in ``tests/caas/*.txt`` or `various editor
|
at the test files found in the `Test suite`_ or `various editor
|
||||||
integrations <https://github.com/Araq/Nimrod/wiki/Editor-Support>`_
|
integrations <https://github.com/Araq/Nimrod/wiki/Editor-Support>`_
|
||||||
already available.
|
already available.
|
||||||
|
|
||||||
|
|
@ -119,7 +119,9 @@ separators!).
|
||||||
|
|
||||||
The typical usage scenario for this option is to call it after the
|
The typical usage scenario for this option is to call it after the
|
||||||
user has typed the dot character for `the object oriented call
|
user has typed the dot character for `the object oriented call
|
||||||
syntax <tut2.html#method-call-syntax>`_.
|
syntax <tut2.html#method-call-syntax>`_. Idetools will try to return
|
||||||
|
the suggestions sorted first by scope (from innermost to outermost)
|
||||||
|
and then by item name.
|
||||||
|
|
||||||
|
|
||||||
Invokation context
|
Invokation context
|
||||||
|
|
@ -162,12 +164,12 @@ clicks it and after a second or two the IDE displays where that
|
||||||
symbol is defined. Such latencies would be terrible for features
|
symbol is defined. Such latencies would be terrible for features
|
||||||
like symbol suggestion, plus why wait at all if we can avoid it?
|
like symbol suggestion, plus why wait at all if we can avoid it?
|
||||||
|
|
||||||
The idetools command can be run as a compiler service, where you
|
The idetools command can be run as a compiler service (`caas`:idx:),
|
||||||
first launch the compiler and it will stay online as a server,
|
where you first launch the compiler and it will stay online as a
|
||||||
accepting queries in a telnet like fashion. The advantage of staying
|
server, accepting queries in a telnet like fashion. The advantage
|
||||||
on is that for many queries the compiler can cache the results of
|
of staying on is that for many queries the compiler can cache the
|
||||||
the compilation, and subsequent queries should be fast in the
|
results of the compilation, and subsequent queries should be fast
|
||||||
millisecond range, thus being responsive enough for IDEs.
|
in the millisecond range, thus being responsive enough for IDEs.
|
||||||
|
|
||||||
If you want to start the server using stdin/stdout as communication
|
If you want to start the server using stdin/stdout as communication
|
||||||
you need to type::
|
you need to type::
|
||||||
|
|
@ -188,7 +190,7 @@ of text it thinks necessary plus an empty line to indicate the end
|
||||||
of the answer.
|
of the answer.
|
||||||
|
|
||||||
You can find examples of client/server communication in the idetools
|
You can find examples of client/server communication in the idetools
|
||||||
tests found in ``tests/caas/*.txt``.
|
tests found in the `Test suite`_.
|
||||||
|
|
||||||
|
|
||||||
Parsing idetools output
|
Parsing idetools output
|
||||||
|
|
@ -293,6 +295,22 @@ posterior instances of the iterator.
|
||||||
col 7: "iterates over any unicode character of the string `s`."
|
col 7: "iterates over any unicode character of the string `s`."
|
||||||
|
|
||||||
|
|
||||||
|
skLabel
|
||||||
|
-------
|
||||||
|
|
||||||
|
| **Third column**: module + [n scope nesting] + name.
|
||||||
|
| **Fourth column**: always the empty string.
|
||||||
|
| **Docstring**: always the empty string.
|
||||||
|
|
||||||
|
.. code-block:: nimrod
|
||||||
|
proc test(text: string) =
|
||||||
|
var found = -1
|
||||||
|
block loops:
|
||||||
|
--> col 2: $MODULE.test.loops
|
||||||
|
col 3: ""
|
||||||
|
col 7: ""
|
||||||
|
|
||||||
|
|
||||||
skLet
|
skLet
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
@ -308,6 +326,26 @@ skLet
|
||||||
col 7: ""
|
col 7: ""
|
||||||
|
|
||||||
|
|
||||||
|
skMacro
|
||||||
|
-------
|
||||||
|
|
||||||
|
The fourth column will be the empty string if the macro is being
|
||||||
|
defined, since at that point in the file the parser hasn't processed
|
||||||
|
the full line yet. The signature will be returned complete in
|
||||||
|
posterior instances of the macro.
|
||||||
|
|
||||||
|
| **Third column**: module + [n scope nesting] + macro name.
|
||||||
|
| **Fourth column**: signature of the macro including return type.
|
||||||
|
| **Docstring**: docstring if available.
|
||||||
|
|
||||||
|
.. code-block:: nimrod
|
||||||
|
proc testMacro() =
|
||||||
|
expect(EArithmetic):
|
||||||
|
--> col 2: idetools_api.expect
|
||||||
|
col 3: proc (varargs[expr], stmt): stmt
|
||||||
|
col 7: ""
|
||||||
|
|
||||||
|
|
||||||
skMethod
|
skMethod
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
|
@ -465,3 +503,96 @@ skVar
|
||||||
--> col 2: $MODULE.writeTempFile.output
|
--> col 2: $MODULE.writeTempFile.output
|
||||||
col 3: TFile
|
col 3: TFile
|
||||||
col 7: ""
|
col 7: ""
|
||||||
|
|
||||||
|
|
||||||
|
Test suite
|
||||||
|
==========
|
||||||
|
|
||||||
|
To verify that idetools is working properly there are files in the
|
||||||
|
``tests/caas/`` directory which provide unit testing. If you find
|
||||||
|
odd idetools behaviour and are able to reproduce it, you are welcome
|
||||||
|
to report it as a bug and add a test to the suite to avoid future
|
||||||
|
regressions.
|
||||||
|
|
||||||
|
|
||||||
|
Running the test suite
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
At the moment idetools support is still in development so the test
|
||||||
|
suite is not integrated with the main test suite and you have to
|
||||||
|
run it manually. First you have to compile the tester::
|
||||||
|
|
||||||
|
$ cd my/nimrod/checkout
|
||||||
|
$ nimrod c tests/tester.nim
|
||||||
|
|
||||||
|
Running the tester without parameters will display some options.
|
||||||
|
To run the caas test suite (and other special tests) you need to
|
||||||
|
use the `special` command. You need to run this command from the
|
||||||
|
root of the checkout or it won't be able to open the required files::
|
||||||
|
|
||||||
|
$ ./tests/tester special
|
||||||
|
|
||||||
|
However this is a roundabout way of running the test suite. You can
|
||||||
|
also compile and run ``tests/caasdriver.nim`` manually. In fact,
|
||||||
|
running it manually will allow you to specify special parameters
|
||||||
|
too. Example::
|
||||||
|
|
||||||
|
$ cd my/nimrod/checkout/tests
|
||||||
|
$ nimrod c caasdriver.nim
|
||||||
|
|
||||||
|
Running the ``caasdriver`` without parameters will attempt to process
|
||||||
|
all the test cases in all three operation modes. If a test succeeds
|
||||||
|
nothing will be printed and the process will exit with zero. If any
|
||||||
|
test fails, the specific line of the test preceeding the failure
|
||||||
|
and the failure itself will be dumped to stdout, along with a final
|
||||||
|
indicator of the success state and operation mode. You can pass the
|
||||||
|
parameter ``verbose`` to force all output even on successfull tests.
|
||||||
|
|
||||||
|
The normal operation mode is called ``ProcRun`` and it involves
|
||||||
|
starting a process for each command or query, similar to running
|
||||||
|
manually the Nimrod compiler from the commandline. The ``CaasRun``
|
||||||
|
mode starts a server process to answer all queries. The ``SymbolProcRun``
|
||||||
|
mode is used by compiler developers. This means that running all
|
||||||
|
tests involves processing all ``*.txt`` files three times, which
|
||||||
|
can be quite time consuming.
|
||||||
|
|
||||||
|
If you don't want to run all the test case files you can pass any
|
||||||
|
substring as a parameter to ``caasdriver``. Only files matching the
|
||||||
|
passed substring will be run. The filtering doesn't use any globbing
|
||||||
|
metacharacters, it's a plain match. For example, to run only
|
||||||
|
``*-compile*.txt`` tests in verbose mode::
|
||||||
|
|
||||||
|
./caasdriver verbose -compile
|
||||||
|
|
||||||
|
|
||||||
|
Test case file format
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
All the ``tests/caas/*.txt`` files encode a session with the compiler:
|
||||||
|
|
||||||
|
* The first line indicates the main project file.
|
||||||
|
|
||||||
|
* Lines starting with ``>`` indicate a command to be sent to the
|
||||||
|
compiler and the lines following a command include checks for
|
||||||
|
expected or forbidden output (``!`` for forbidden).
|
||||||
|
|
||||||
|
* If a line starts with ``#`` it will be ignored completely, so you
|
||||||
|
can use that for comments.
|
||||||
|
|
||||||
|
* Since some cases are specific to either ``ProcRun`` or ``CaasRun``
|
||||||
|
modes, you can prefix a line with the mode and the line will be
|
||||||
|
processed only in that mode.
|
||||||
|
|
||||||
|
* The rest of the line is treated as a `regular expression <re.html>`_,
|
||||||
|
so be careful escaping metacharacters like parenthesis.
|
||||||
|
|
||||||
|
Before the line is processed as a regular expression, some basic
|
||||||
|
variables are searched for and replaced in the tests. The variables
|
||||||
|
which will be replaced are:
|
||||||
|
|
||||||
|
* **$TESTNIM**: filename specified in the first line of the script.
|
||||||
|
* **$MODULE**: like $TESTNIM but without extension, useful for
|
||||||
|
expected output.
|
||||||
|
|
||||||
|
When adding a test case to the suite it is a good idea to write a
|
||||||
|
few comments about what the test is meant to verify.
|
||||||
|
|
|
||||||
|
|
@ -292,6 +292,35 @@ The `link`:idx: pragma can be used to link an additional file with the project:
|
||||||
{.link: "myfile.o".}
|
{.link: "myfile.o".}
|
||||||
|
|
||||||
|
|
||||||
|
PassC pragma
|
||||||
|
------------
|
||||||
|
The `passC`:idx: pragma can be used to pass additional parameters to the C
|
||||||
|
compiler like you would using the commandline switch ``--passC``:
|
||||||
|
|
||||||
|
.. code-block:: Nimrod
|
||||||
|
{.passC: "-Wall -Werror".}
|
||||||
|
|
||||||
|
Note that you can use ``gorge`` from the `system module <system.html>`_ to
|
||||||
|
embed parameters from an external command at compile time:
|
||||||
|
|
||||||
|
.. code-block:: Nimrod
|
||||||
|
{.passC: gorge("pkg-config --cflags sdl").}
|
||||||
|
|
||||||
|
PassL pragma
|
||||||
|
------------
|
||||||
|
The `passL`:idx: pragma can be used to pass additional parameters to the linker
|
||||||
|
like you would using the commandline switch ``--passL``:
|
||||||
|
|
||||||
|
.. code-block:: Nimrod
|
||||||
|
{.passL: "-lSDLmain -lSDL".}
|
||||||
|
|
||||||
|
Note that you can use ``gorge`` from the `system module <system.html>`_ to
|
||||||
|
embed parameters from an external command at compile time:
|
||||||
|
|
||||||
|
.. code-block:: Nimrod
|
||||||
|
{.passL: gorge("pkg-config --libs sdl").}
|
||||||
|
|
||||||
|
|
||||||
Emit pragma
|
Emit pragma
|
||||||
-----------
|
-----------
|
||||||
The `emit`:idx: pragma can be used to directly affect the output of the
|
The `emit`:idx: pragma can be used to directly affect the output of the
|
||||||
|
|
|
||||||
|
|
@ -201,7 +201,10 @@ proc find*(s: string, pattern: TRegEx, start = 0): int =
|
||||||
return rawMatches[0]
|
return rawMatches[0]
|
||||||
|
|
||||||
iterator findAll*(s: string, pattern: TRegEx, start = 0): string =
|
iterator findAll*(s: string, pattern: TRegEx, start = 0): string =
|
||||||
## yields all matching *substrings* of `s` that match `pattern`.
|
## Yields all matching *substrings* of `s` that match `pattern`.
|
||||||
|
##
|
||||||
|
## Note that since this is an iterator you should not modify the string you
|
||||||
|
## are iterating over: bad things could happen.
|
||||||
var i = int32(start)
|
var i = int32(start)
|
||||||
var rawMatches: array[0..maxSubpatterns * 3 - 1, cint]
|
var rawMatches: array[0..maxSubpatterns * 3 - 1, cint]
|
||||||
while true:
|
while true:
|
||||||
|
|
|
||||||
|
|
@ -460,7 +460,7 @@ proc untilElementEnd(x: var TXmlParser, result: PXmlNode,
|
||||||
if cmpIgnoreCase(x.elemName, result.tag) == 0:
|
if cmpIgnoreCase(x.elemName, result.tag) == 0:
|
||||||
next(x)
|
next(x)
|
||||||
else:
|
else:
|
||||||
echo "5; expected: ", result.htmltag, " ", x.elemName
|
#echo "5; expected: ", result.htmltag, " ", x.elemName
|
||||||
errors.add(expected(x, result))
|
errors.add(expected(x, result))
|
||||||
# do not skip it here!
|
# do not skip it here!
|
||||||
break
|
break
|
||||||
|
|
|
||||||
83
lib/pure/numeric.nim
Normal file
83
lib/pure/numeric.nim
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Nimrod's Runtime Library
|
||||||
|
# (c) Copyright 2013 Robert Persson
|
||||||
|
#
|
||||||
|
# See the file "copying.txt", included in this
|
||||||
|
# distribution, for details about the copyright.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
type TOneVarFunction* =proc (x:float):float
|
||||||
|
|
||||||
|
proc brent*(xmin,xmax:float ,function:TOneVarFunction, tol:float,maxiter=1000):
|
||||||
|
tuple[rootx, rooty: float, success: bool]=
|
||||||
|
## Searches `function` for a root between `xmin` and `xmax`
|
||||||
|
## using brents method. If the function value at `xmin`and `xmax` has the
|
||||||
|
## same sign, `rootx`/`rooty` is set too the extrema value closest to x-axis
|
||||||
|
## and succes is set to false.
|
||||||
|
## Otherwise there exists at least one root and success is set to true.
|
||||||
|
## This root is searched for at most `maxiter` iterations.
|
||||||
|
## If `tol` tolerance is reached within `maxiter` iterations
|
||||||
|
## the root refinement stops and success=true.
|
||||||
|
|
||||||
|
# see http://en.wikipedia.org/wiki/Brent%27s_method
|
||||||
|
var
|
||||||
|
a=xmin
|
||||||
|
b=xmax
|
||||||
|
c=a
|
||||||
|
d=1.0e308
|
||||||
|
fa=function(a)
|
||||||
|
fb=function(b)
|
||||||
|
fc=fa
|
||||||
|
s=0.0
|
||||||
|
fs=0.0
|
||||||
|
mflag:bool
|
||||||
|
i=0
|
||||||
|
tmp2:float
|
||||||
|
|
||||||
|
if fa*fb>=0:
|
||||||
|
if abs(fa)<abs(fb):
|
||||||
|
return (a,fa,false)
|
||||||
|
else:
|
||||||
|
return (b,fb,false)
|
||||||
|
|
||||||
|
if abs(fa)<abs(fb):
|
||||||
|
swap(fa,fb)
|
||||||
|
swap(a,b)
|
||||||
|
|
||||||
|
while fb!=0.0 and abs(a-b)>tol:
|
||||||
|
if fa!=fc and fb!=fc: # inverse quadratic interpolation
|
||||||
|
s = a * fb * fc / (fa - fb) / (fa - fc) + b * fa * fc / (fb - fa) / (fb - fc) + c * fa * fb / (fc - fa) / (fc - fb)
|
||||||
|
else: #secant rule
|
||||||
|
s = b - fb * (b - a) / (fb - fa)
|
||||||
|
tmp2 = (3.0 * a + b) / 4.0
|
||||||
|
if not((s > tmp2 and s < b) or (s < tmp2 and s > b)) or
|
||||||
|
(mflag and abs(s - b) >= (abs(b - c) / 2.0)) or
|
||||||
|
(not mflag and abs(s - b) >= abs(c - d) / 2.0):
|
||||||
|
s=(a+b)/2.0
|
||||||
|
mflag=true
|
||||||
|
else:
|
||||||
|
if (mflag and (abs(b - c) < tol)) or (not mflag and (abs(c - d) < tol)):
|
||||||
|
s=(a+b)/2.0
|
||||||
|
mflag=true
|
||||||
|
else:
|
||||||
|
mflag=false
|
||||||
|
fs = function(s)
|
||||||
|
d = c
|
||||||
|
c = b
|
||||||
|
fc = fb
|
||||||
|
if fa * fs<0.0:
|
||||||
|
b=s
|
||||||
|
fb=fs
|
||||||
|
else:
|
||||||
|
a=s
|
||||||
|
fa=fs
|
||||||
|
if abs(fa)<abs(fb):
|
||||||
|
swap(a,b)
|
||||||
|
swap(fa,fb)
|
||||||
|
inc i
|
||||||
|
if i>maxiter:
|
||||||
|
break
|
||||||
|
|
||||||
|
return (b,fb,true)
|
||||||
|
|
@ -474,8 +474,17 @@ proc JoinPath*(head, tail: string): string {.
|
||||||
## .. code-block:: nimrod
|
## .. code-block:: nimrod
|
||||||
## "usr/lib"
|
## "usr/lib"
|
||||||
##
|
##
|
||||||
## If head is the empty string, tail is returned.
|
## If head is the empty string, tail is returned. If tail is the empty
|
||||||
## If tail is the empty string, head is returned.
|
## string, head is returned with a trailing path separator. If tail starts
|
||||||
|
## with a path separator it will be removed when concatenated to head. Other
|
||||||
|
## path separators not located on boundaries won't be modified. More
|
||||||
|
## examples on Unix:
|
||||||
|
##
|
||||||
|
## .. code-block:: nimrod
|
||||||
|
## assert JoinPath("usr", "") == "usr/"
|
||||||
|
## assert JoinPath("", "lib") == "lib"
|
||||||
|
## assert JoinPath("", "/lib") == "/lib"
|
||||||
|
## assert JoinPath("usr/", "/lib") == "usr/lib"
|
||||||
if len(head) == 0:
|
if len(head) == 0:
|
||||||
result = tail
|
result = tail
|
||||||
elif head[len(head)-1] in {DirSep, AltSep}:
|
elif head[len(head)-1] in {DirSep, AltSep}:
|
||||||
|
|
@ -491,15 +500,24 @@ proc JoinPath*(head, tail: string): string {.
|
||||||
|
|
||||||
proc JoinPath*(parts: varargs[string]): string {.noSideEffect,
|
proc JoinPath*(parts: varargs[string]): string {.noSideEffect,
|
||||||
rtl, extern: "nos$1OpenArray".} =
|
rtl, extern: "nos$1OpenArray".} =
|
||||||
## The same as `JoinPath(head, tail)`, but works with any number
|
## The same as `JoinPath(head, tail)`, but works with any number of directory
|
||||||
## of directory parts.
|
## parts. You need to pass at least one element or the proc will assert in
|
||||||
|
## debug builds and crash on release builds.
|
||||||
result = parts[0]
|
result = parts[0]
|
||||||
for i in 1..high(parts):
|
for i in 1..high(parts):
|
||||||
result = JoinPath(result, parts[i])
|
result = JoinPath(result, parts[i])
|
||||||
|
|
||||||
proc `/` * (head, tail: string): string {.noSideEffect.} =
|
proc `/` * (head, tail: string): string {.noSideEffect.} =
|
||||||
## The same as ``joinPath(head, tail)``
|
## The same as ``JoinPath(head, tail)``
|
||||||
return joinPath(head, tail)
|
##
|
||||||
|
## Here are some examples for Unix:
|
||||||
|
##
|
||||||
|
## .. code-block:: nimrod
|
||||||
|
## assert "usr" / "" == "usr/"
|
||||||
|
## assert "" / "lib" == "lib"
|
||||||
|
## assert "" / "/lib" == "/lib"
|
||||||
|
## assert "usr/" / "/lib" == "usr/lib"
|
||||||
|
return JoinPath(head, tail)
|
||||||
|
|
||||||
proc SplitPath*(path: string): tuple[head, tail: string] {.
|
proc SplitPath*(path: string): tuple[head, tail: string] {.
|
||||||
noSideEffect, rtl, extern: "nos$1".} =
|
noSideEffect, rtl, extern: "nos$1".} =
|
||||||
|
|
@ -814,8 +832,13 @@ proc sameFileContent*(path1, path2: string): bool {.rtl, extern: "nos$1",
|
||||||
|
|
||||||
proc copyFile*(source, dest: string) {.rtl, extern: "nos$1",
|
proc copyFile*(source, dest: string) {.rtl, extern: "nos$1",
|
||||||
tags: [FReadIO, FWriteIO].} =
|
tags: [FReadIO, FWriteIO].} =
|
||||||
## Copies a file from `source` to `dest`. If this fails,
|
## Copies a file from `source` to `dest`.
|
||||||
## `EOS` is raised.
|
##
|
||||||
|
## If this fails, `EOS` is raised. On the Windows platform this proc will
|
||||||
|
## copy the source file's attributes into dest. On other platforms you need
|
||||||
|
## to use getFilePermissions and setFilePermissions to copy them by hand,
|
||||||
|
## otherwise `dest` will inherit the default permissions of a newly created
|
||||||
|
## file for the user.
|
||||||
when defined(Windows):
|
when defined(Windows):
|
||||||
when useWinUnicode:
|
when useWinUnicode:
|
||||||
let s = newWideCString(source)
|
let s = newWideCString(source)
|
||||||
|
|
@ -1498,7 +1521,7 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [FReadIO].} =
|
||||||
if len(result) > 0 and result[0] != DirSep: # not an absolute path?
|
if len(result) > 0 and result[0] != DirSep: # not an absolute path?
|
||||||
# iterate over any path in the $PATH environment variable
|
# iterate over any path in the $PATH environment variable
|
||||||
for p in split(string(getEnv("PATH")), {PathSep}):
|
for p in split(string(getEnv("PATH")), {PathSep}):
|
||||||
var x = joinPath(p, result)
|
var x = JoinPath(p, result)
|
||||||
if ExistsFile(x): return x
|
if ExistsFile(x): return x
|
||||||
|
|
||||||
proc getApplicationFilename*(): string {.rtl, extern: "nos$1", deprecated.} =
|
proc getApplicationFilename*(): string {.rtl, extern: "nos$1", deprecated.} =
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,24 @@ proc toLower(c: char): char {.inline.} =
|
||||||
|
|
||||||
proc parseHex*(s: string, number: var int, start = 0): int {.
|
proc parseHex*(s: string, number: var int, start = 0): int {.
|
||||||
rtl, extern: "npuParseHex", noSideEffect.} =
|
rtl, extern: "npuParseHex", noSideEffect.} =
|
||||||
## parses a hexadecimal number and stores its value in ``number``. Returns
|
## Parses a hexadecimal number and stores its value in ``number``.
|
||||||
## the number of the parsed characters or 0 in case of an error.
|
##
|
||||||
|
## Returns the number of the parsed characters or 0 in case of an error. This
|
||||||
|
## proc is sensitive to the already existing value of ``number`` and will
|
||||||
|
## likely not do what you want unless you make sure ``number`` is zero. You
|
||||||
|
## can use this feature to *chain* calls, though the result int will quickly
|
||||||
|
## overflow. Example:
|
||||||
|
##
|
||||||
|
## .. code-block:: nimrod
|
||||||
|
## var value = 0
|
||||||
|
## discard parseHex("0x38", value)
|
||||||
|
## assert value == 56
|
||||||
|
## discard parseHex("0x34", value)
|
||||||
|
## assert value == 56 * 256 + 52
|
||||||
|
## value = -1
|
||||||
|
## discard parseHex("0x38", value)
|
||||||
|
## assert value == -200
|
||||||
|
##
|
||||||
var i = start
|
var i = start
|
||||||
var foundDigit = false
|
var foundDigit = false
|
||||||
if s[i] == '0' and (s[i+1] == 'x' or s[i+1] == 'X'): inc(i, 2)
|
if s[i] == '0' and (s[i+1] == 'x' or s[i+1] == 'X'): inc(i, 2)
|
||||||
|
|
@ -383,6 +399,14 @@ iterator interpolatedFragments*(s: string): tuple[kind: TInterpolatedKind,
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
for k, v in interpolatedFragments("$test{} $this is ${an{ example}} "):
|
for k, v in interpolatedFragments("$test{} $this is ${an{ example}} "):
|
||||||
echo "(", k, ", \"", v, "\")"
|
echo "(", k, ", \"", v, "\")"
|
||||||
|
var value = 0
|
||||||
|
discard parseHex("0x38", value)
|
||||||
|
assert value == 56
|
||||||
|
discard parseHex("0x34", value)
|
||||||
|
assert value == 56 * 256 + 52
|
||||||
|
value = -1
|
||||||
|
discard parseHex("0x38", value)
|
||||||
|
assert value == -200
|
||||||
|
|
||||||
|
|
||||||
{.pop.}
|
{.pop.}
|
||||||
|
|
|
||||||
367
lib/pure/poly.nim
Normal file
367
lib/pure/poly.nim
Normal file
|
|
@ -0,0 +1,367 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Nimrod's Runtime Library
|
||||||
|
# (c) Copyright 2013 Robert Persson
|
||||||
|
#
|
||||||
|
# See the file "copying.txt", included in this
|
||||||
|
# distribution, for details about the copyright.
|
||||||
|
#
|
||||||
|
|
||||||
|
import math
|
||||||
|
import strutils
|
||||||
|
import numeric
|
||||||
|
|
||||||
|
type
|
||||||
|
TPoly* = object
|
||||||
|
cofs:seq[float]
|
||||||
|
|
||||||
|
|
||||||
|
proc degree*(p:TPoly):int=
|
||||||
|
## Returns the degree of the polynomial,
|
||||||
|
## that is the number of coefficients-1
|
||||||
|
return p.cofs.len-1
|
||||||
|
|
||||||
|
|
||||||
|
proc eval*(p:TPoly,x:float):float=
|
||||||
|
## Evaluates a polynomial function value for `x`
|
||||||
|
## quickly using Horners method
|
||||||
|
var n=p.degree
|
||||||
|
result=p.cofs[n]
|
||||||
|
dec n
|
||||||
|
while n>=0:
|
||||||
|
result = result*x+p.cofs[n]
|
||||||
|
dec n
|
||||||
|
|
||||||
|
proc `[]` *(p:TPoly;idx:int):float=
|
||||||
|
## Gets a coefficient of the polynomial.
|
||||||
|
## p[2] will returns the quadric term, p[3] the cubic etc.
|
||||||
|
## Out of bounds index will return 0.0.
|
||||||
|
if idx<0 or idx>p.degree:
|
||||||
|
return 0.0
|
||||||
|
return p.cofs[idx]
|
||||||
|
|
||||||
|
proc `[]=` *(p:var TPoly;idx:int,v:float)=
|
||||||
|
## Sets an coefficient of the polynomial by index.
|
||||||
|
## p[2] set the quadric term, p[3] the cubic etc.
|
||||||
|
## If index is out of range for the coefficients,
|
||||||
|
## the polynomial grows to the smallest needed degree.
|
||||||
|
assert(idx>=0)
|
||||||
|
|
||||||
|
if idx>p.degree: #polynomial must grow
|
||||||
|
var oldlen=p.cofs.len
|
||||||
|
p.cofs.setLen(idx+1)
|
||||||
|
for q in oldlen.. <high(p.cofs):
|
||||||
|
p.cofs[q]=0.0 #new-grown coefficients set to zero
|
||||||
|
|
||||||
|
p.cofs[idx]=v
|
||||||
|
|
||||||
|
|
||||||
|
iterator items*(p:TPoly):float=
|
||||||
|
## Iterates through the corfficients of the polynomial.
|
||||||
|
var i=p.degree
|
||||||
|
while i>=0:
|
||||||
|
yield p[i]
|
||||||
|
dec i
|
||||||
|
|
||||||
|
proc clean*(p:var TPoly;zerotol=0.0)=
|
||||||
|
## Removes leading zero coefficients of the polynomial.
|
||||||
|
## An optional tolerance can be given for what's considered zero.
|
||||||
|
var n=p.degree
|
||||||
|
var relen=false
|
||||||
|
|
||||||
|
while n>0 and abs(p[n])<=zerotol: # >0 => keep at least one coefficient
|
||||||
|
dec n
|
||||||
|
relen=true
|
||||||
|
|
||||||
|
if relen: p.cofs.setLen(n+1)
|
||||||
|
|
||||||
|
|
||||||
|
proc `$` *(p:TPoly):string =
|
||||||
|
## Gets a somewhat reasonable string representation of the polynomial
|
||||||
|
## The format should be compatible with most online function plotters,
|
||||||
|
## for example directly in google search
|
||||||
|
result=""
|
||||||
|
var first=true #might skip + sign if first coefficient
|
||||||
|
|
||||||
|
for idx in countdown(p.degree,0):
|
||||||
|
let a=p[idx]
|
||||||
|
|
||||||
|
if a==0.0:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if a>= 0.0 and not first:
|
||||||
|
result.add('+')
|
||||||
|
first=false
|
||||||
|
|
||||||
|
if a!=1.0 or idx==0:
|
||||||
|
result.add(formatFloat(a,ffDefault,0))
|
||||||
|
if idx>=2:
|
||||||
|
result.add("x^" & $idx)
|
||||||
|
elif idx==1:
|
||||||
|
result.add("x")
|
||||||
|
|
||||||
|
if result=="":
|
||||||
|
result="0"
|
||||||
|
|
||||||
|
|
||||||
|
proc derivative*(p:TPoly):TPoly=
|
||||||
|
## Returns a new polynomial, which is the derivative of `p`
|
||||||
|
newSeq[float](result.cofs,p.degree)
|
||||||
|
for idx in 0..high(result.cofs):
|
||||||
|
result.cofs[idx]=p.cofs[idx+1]*float(idx+1)
|
||||||
|
|
||||||
|
proc diff*(p:TPoly,x:float):float=
|
||||||
|
## Evaluates the differentiation of a polynomial with
|
||||||
|
## respect to `x` quickly using a modifed Horners method
|
||||||
|
var n=p.degree
|
||||||
|
result=p[n]*float(n)
|
||||||
|
dec n
|
||||||
|
while n>=1:
|
||||||
|
result = result*x+p[n]*float(n)
|
||||||
|
dec n
|
||||||
|
|
||||||
|
proc integral*(p:TPoly):TPoly=
|
||||||
|
## Returns a new polynomial which is the indefinite
|
||||||
|
## integral of `p`. The constant term is set to 0.0
|
||||||
|
newSeq(result.cofs,p.cofs.len+1)
|
||||||
|
result.cofs[0]=0.0 #constant arbitrary term, use 0.0
|
||||||
|
for i in 1..high(result.cofs):
|
||||||
|
result.cofs[i]=p.cofs[i-1]/float(i)
|
||||||
|
|
||||||
|
|
||||||
|
proc integrate*(p:TPoly;xmin,xmax:float):float=
|
||||||
|
## Computes the definite integral of `p` between `xmin` and `xmax`
|
||||||
|
## quickly using a modified version of Horners method
|
||||||
|
var
|
||||||
|
n=p.degree
|
||||||
|
s1=p[n]/float(n+1)
|
||||||
|
s2=s1
|
||||||
|
fac:float
|
||||||
|
|
||||||
|
dec n
|
||||||
|
while n>=0:
|
||||||
|
fac=p[n]/float(n+1)
|
||||||
|
s1 = s1*xmin+fac
|
||||||
|
s2 = s2*xmax+fac
|
||||||
|
dec n
|
||||||
|
|
||||||
|
result=s2*xmax-s1*xmin
|
||||||
|
|
||||||
|
proc initPoly*(cofs:varargs[float]):TPoly=
|
||||||
|
## Initializes a polynomial with given coefficients.
|
||||||
|
## The most significant coefficient is first, so to create x^2-2x+3:
|
||||||
|
## intiPoly(1.0,-2.0,3.0)
|
||||||
|
if len(cofs)<=0:
|
||||||
|
result.cofs= @[0.0] #need at least one coefficient
|
||||||
|
else:
|
||||||
|
# reverse order of coefficients so indexing matches degree of
|
||||||
|
# coefficient...
|
||||||
|
result.cofs= @[]
|
||||||
|
for idx in countdown(cofs.len-1,0):
|
||||||
|
result.cofs.add(cofs[idx])
|
||||||
|
|
||||||
|
result.clean #remove leading zero terms
|
||||||
|
|
||||||
|
|
||||||
|
proc divMod*(p,d:TPoly;q,r:var TPoly)=
|
||||||
|
## Divides `p` with `d`, and stores the quotinent in `q` and
|
||||||
|
## the remainder in `d`
|
||||||
|
var
|
||||||
|
pdeg=p.degree
|
||||||
|
ddeg=d.degree
|
||||||
|
power=p.degree-d.degree
|
||||||
|
ratio:float
|
||||||
|
|
||||||
|
r.cofs = p.cofs #initial remainder=numerator
|
||||||
|
if power<0: #denominator is larger than numerator
|
||||||
|
q.cofs= @ [0.0] #quotinent is 0.0
|
||||||
|
return # keep remainder as numerator
|
||||||
|
|
||||||
|
q.cofs=newSeq[float](power+1)
|
||||||
|
|
||||||
|
for i in countdown(pdeg,ddeg):
|
||||||
|
ratio=r.cofs[i]/d.cofs[ddeg]
|
||||||
|
|
||||||
|
q.cofs[i-ddeg]=ratio
|
||||||
|
r.cofs[i]=0.0
|
||||||
|
|
||||||
|
for j in countup(0,<ddeg):
|
||||||
|
var idx=i-ddeg+j
|
||||||
|
r.cofs[idx] = r.cofs[idx] - d.cofs[j]*ratio
|
||||||
|
|
||||||
|
r.clean # drop zero coefficients in remainder
|
||||||
|
|
||||||
|
proc `+` *(p1:TPoly,p2:TPoly):TPoly=
|
||||||
|
## Adds two polynomials
|
||||||
|
var n=max(p1.cofs.len,p2.cofs.len)
|
||||||
|
newSeq(result.cofs,n)
|
||||||
|
|
||||||
|
for idx in countup(0,n-1):
|
||||||
|
result[idx]=p1[idx]+p2[idx]
|
||||||
|
|
||||||
|
result.clean # drop zero coefficients in remainder
|
||||||
|
|
||||||
|
proc `*` *(p1:TPoly,p2:TPoly):TPoly=
|
||||||
|
## Multiplies the polynomial `p1` with `p2`
|
||||||
|
var
|
||||||
|
d1=p1.degree
|
||||||
|
d2=p2.degree
|
||||||
|
n=d1+d2
|
||||||
|
idx:int
|
||||||
|
|
||||||
|
newSeq(result.cofs,n)
|
||||||
|
|
||||||
|
for i1 in countup(0,d1):
|
||||||
|
for i2 in countup(0,d2):
|
||||||
|
idx=i1+i2
|
||||||
|
result[idx]=result[idx]+p1[i1]*p2[i2]
|
||||||
|
|
||||||
|
result.clean
|
||||||
|
|
||||||
|
proc `*` *(p:TPoly,f:float):TPoly=
|
||||||
|
## Multiplies the polynomial `p` with a real number
|
||||||
|
newSeq(result.cofs,p.cofs.len)
|
||||||
|
for i in 0..high(p.cofs):
|
||||||
|
result[i]=p.cofs[i]*f
|
||||||
|
result.clean
|
||||||
|
|
||||||
|
proc `*` *(f:float,p:TPoly):TPoly=
|
||||||
|
## Multiplies a real number with a polynomial
|
||||||
|
return p*f
|
||||||
|
|
||||||
|
proc `-`*(p:TPoly):TPoly=
|
||||||
|
## Negates a polynomial
|
||||||
|
result=p
|
||||||
|
for i in countup(0,<result.cofs.len):
|
||||||
|
result.cofs[i]= -result.cofs[i]
|
||||||
|
|
||||||
|
proc `-` *(p1:TPoly,p2:TPoly):TPoly=
|
||||||
|
## Subtract `p1` with `p2`
|
||||||
|
var n=max(p1.cofs.len,p2.cofs.len)
|
||||||
|
newSeq(result.cofs,n)
|
||||||
|
|
||||||
|
for idx in countup(0,n-1):
|
||||||
|
result[idx]=p1[idx]-p2[idx]
|
||||||
|
|
||||||
|
result.clean # drop zero coefficients in remainder
|
||||||
|
|
||||||
|
proc `/`*(p:TPoly,f:float):TPoly=
|
||||||
|
## Divides polynomial `p` with a real number `f`
|
||||||
|
newSeq(result.cofs,p.cofs.len)
|
||||||
|
for i in 0..high(p.cofs):
|
||||||
|
result[i]=p.cofs[i]/f
|
||||||
|
result.clean
|
||||||
|
|
||||||
|
proc `/` *(p,q:TPoly):TPoly=
|
||||||
|
## Divides polynomial `p` with polynomial `q`
|
||||||
|
var dummy:TPoly
|
||||||
|
p.divMod(q,result,dummy)
|
||||||
|
|
||||||
|
proc `mod` *(p,q:TPoly):TPoly=
|
||||||
|
## Computes the polynomial modulo operation,
|
||||||
|
## that is the remainder of `p`/`q`
|
||||||
|
var dummy:TPoly
|
||||||
|
p.divMod(q,dummy,result)
|
||||||
|
|
||||||
|
|
||||||
|
proc normalize*(p:var TPoly)=
|
||||||
|
## Multiplies the polynomial inplace by a term so that
|
||||||
|
## the leading term is 1.0.
|
||||||
|
## This might lead to an unstable polynomial
|
||||||
|
## if the leading term is zero.
|
||||||
|
p=p/p[p.degree]
|
||||||
|
|
||||||
|
|
||||||
|
proc solveQuadric*(a,b,c:float;zerotol=0.0):seq[float]=
|
||||||
|
## Solves the quadric equation `ax^2+bx+c`, with a possible
|
||||||
|
## tolerance `zerotol` to find roots of curves just 'touching'
|
||||||
|
## the x axis. Returns sequence with 0,1 or 2 solutions.
|
||||||
|
|
||||||
|
var p,q,d:float
|
||||||
|
|
||||||
|
p=b/(2.0*a)
|
||||||
|
|
||||||
|
if p==inf or p==neginf: #linear equation..
|
||||||
|
var linrt= -c/b
|
||||||
|
if linrt==inf or linrt==neginf: #constant only
|
||||||
|
return @[]
|
||||||
|
return @[linrt]
|
||||||
|
|
||||||
|
q=c/a
|
||||||
|
d=p*p-q
|
||||||
|
|
||||||
|
if d<0.0:
|
||||||
|
#check for inside zerotol range for neg. roots
|
||||||
|
var err=a*p*p-b*p+c #evaluate error at parabola center axis
|
||||||
|
if(err<=zerotol): return @[-p]
|
||||||
|
return @[]
|
||||||
|
else:
|
||||||
|
var sr=sqrt(d)
|
||||||
|
result= @[-sr-p,sr-p]
|
||||||
|
|
||||||
|
proc getRangeForRoots(p:TPoly):tuple[xmin,xmax:float]=
|
||||||
|
## helper function for `roots` function
|
||||||
|
## quickly computes a range, guaranteed to contain
|
||||||
|
## all the real roots of the polynomial
|
||||||
|
# see http://www.mathsisfun.com/algebra/polynomials-bounds-zeros.html
|
||||||
|
|
||||||
|
var deg=p.degree
|
||||||
|
var d=p[deg]
|
||||||
|
var bound1,bound2:float
|
||||||
|
|
||||||
|
for i in countup(0,deg):
|
||||||
|
var c=abs(p.cofs[i]/d)
|
||||||
|
bound1=max(bound1,c+1.0)
|
||||||
|
bound2=bound2+c
|
||||||
|
|
||||||
|
bound2=max(1.0,bound2)
|
||||||
|
result.xmax=min(bound1,bound2)
|
||||||
|
result.xmin= -result.xmax
|
||||||
|
|
||||||
|
|
||||||
|
proc addRoot(p:TPoly,res:var seq[float],xp0,xp1,tol,zerotol,mergetol:float,maxiter:int)=
|
||||||
|
## helper function for `roots` function
|
||||||
|
## try to do a numeric search for a single root in range xp0-xp1,
|
||||||
|
## adding it to `res` (allocating `res` if nil)
|
||||||
|
var br=brent(xp0,xp1, proc(x:float):float=p.eval(x),tol)
|
||||||
|
if br.success:
|
||||||
|
if res.len==0 or br.rootx>=res[high(res)]+mergetol: #dont add equal roots.
|
||||||
|
res.add(br.rootx)
|
||||||
|
else:
|
||||||
|
#this might be a 'touching' case, check function value against
|
||||||
|
#zero tolerance
|
||||||
|
if abs(br.rooty)<=zerotol:
|
||||||
|
if res.len==0 or br.rootx>=res[high(res)]+mergetol: #dont add equal roots.
|
||||||
|
res.add(br.rootx)
|
||||||
|
|
||||||
|
|
||||||
|
proc roots*(p:TPoly,tol=1.0e-9,zerotol=1.0e-6,mergetol=1.0e-12,maxiter=1000):seq[float]=
|
||||||
|
## Computes the real roots of the polynomial `p`
|
||||||
|
## `tol` is the tolerance used to break searching for each root when reached.
|
||||||
|
## `zerotol` is the tolerance, which is 'close enough' to zero to be considered a root
|
||||||
|
## and is used to find roots for curves that only 'touch' the x-axis.
|
||||||
|
## `mergetol` is the tolerance, of which two x-values are considered beeing the same root.
|
||||||
|
## `maxiter` can be used to limit the number of iterations for each root.
|
||||||
|
## Returns a (possibly empty) sorted sequence with the solutions.
|
||||||
|
var deg=p.degree
|
||||||
|
if deg<=0: #constant only => no roots
|
||||||
|
return @[]
|
||||||
|
elif p.degree==1: #linear
|
||||||
|
var linrt= -p.cofs[0]/p.cofs[1]
|
||||||
|
if linrt==inf or linrt==neginf:
|
||||||
|
return @[] #constant only => no roots
|
||||||
|
return @[linrt]
|
||||||
|
elif p.degree==2:
|
||||||
|
return solveQuadric(p.cofs[2],p.cofs[1],p.cofs[0],zerotol)
|
||||||
|
else:
|
||||||
|
# degree >=3 , find min/max points of polynomial with recursive
|
||||||
|
# derivative and do a numerical search for root between each min/max
|
||||||
|
var range=p.getRangeForRoots()
|
||||||
|
var minmax=p.derivative.roots(tol,zerotol,mergetol)
|
||||||
|
result= @[]
|
||||||
|
if minmax!=nil: #ie. we have minimas/maximas in this function
|
||||||
|
for x in minmax.items:
|
||||||
|
addRoot(p,result,range.xmin,x,tol,zerotol,mergetol,maxiter)
|
||||||
|
range.xmin=x
|
||||||
|
addRoot(p,result,range.xmin,range.xmax,tol,zerotol,mergetol,maxiter)
|
||||||
|
|
||||||
|
|
@ -440,16 +440,23 @@ proc repeatStr*(count: int, s: string): string {.noSideEffect,
|
||||||
result = newStringOfCap(count*s.len)
|
result = newStringOfCap(count*s.len)
|
||||||
for i in 0..count-1: result.add(s)
|
for i in 0..count-1: result.add(s)
|
||||||
|
|
||||||
proc align*(s: string, count: int): string {.
|
proc align*(s: string, count: int, padding = ' '): string {.
|
||||||
noSideEffect, rtl, extern: "nsuAlignString".} =
|
noSideEffect, rtl, extern: "nsuAlignString".} =
|
||||||
## Aligns a string `s` with spaces, so that is of length `count`. Spaces are
|
## Aligns a string `s` with `padding`, so that is of length `count`.
|
||||||
## added before `s` resulting in right alignment. If ``s.len >= count``, no
|
## `padding` characters (by default spaces) are added before `s` resulting in
|
||||||
## spaces are added and `s` is returned unchanged. If you need to left align
|
## right alignment. If ``s.len >= count``, no spaces are added and `s` is
|
||||||
## a string use the repeatChar proc.
|
## returned unchanged. If you need to left align a string use the
|
||||||
|
## ``repeatChar`` proc. Example:
|
||||||
|
##
|
||||||
|
## .. code-block:: nimrod
|
||||||
|
## assert align("abc", 4) == " abc"
|
||||||
|
## assert align("a", 0) == "a"
|
||||||
|
## assert align("1232", 6) == " 1232"
|
||||||
|
## assert align("1232", 6, '#') == "##1232"
|
||||||
if s.len < count:
|
if s.len < count:
|
||||||
result = newString(count)
|
result = newString(count)
|
||||||
var spaces = count - s.len
|
var spaces = count - s.len
|
||||||
for i in 0..spaces-1: result[i] = ' '
|
for i in 0..spaces-1: result[i] = padding
|
||||||
for i in spaces..count-1: result[i] = s[i-spaces]
|
for i in spaces..count-1: result[i] = s[i-spaces]
|
||||||
else:
|
else:
|
||||||
result = s
|
result = s
|
||||||
|
|
@ -1211,6 +1218,7 @@ when isMainModule:
|
||||||
doAssert align("abc", 4) == " abc"
|
doAssert align("abc", 4) == " abc"
|
||||||
doAssert align("a", 0) == "a"
|
doAssert align("a", 0) == "a"
|
||||||
doAssert align("1232", 6) == " 1232"
|
doAssert align("1232", 6) == " 1232"
|
||||||
|
doAssert align("1232", 6, '#') == "##1232"
|
||||||
echo wordWrap(""" this is a long text -- muchlongerthan10chars and here
|
echo wordWrap(""" this is a long text -- muchlongerthan10chars and here
|
||||||
it goes""", 10, false)
|
it goes""", 10, false)
|
||||||
doAssert formatBiggestFloat(0.00000000001, ffDecimal, 11) == "0.00000000001"
|
doAssert formatBiggestFloat(0.00000000001, ffDecimal, 11) == "0.00000000001"
|
||||||
|
|
|
||||||
|
|
@ -2392,8 +2392,10 @@ proc `[]=`*[T](s: var seq[T], x: TSlice[int], b: openArray[T]) =
|
||||||
spliceImpl(s, a, L, b)
|
spliceImpl(s, a, L, b)
|
||||||
|
|
||||||
proc slurp*(filename: string): string {.magic: "Slurp".}
|
proc slurp*(filename: string): string {.magic: "Slurp".}
|
||||||
|
## This is an alias for ``staticRead``.
|
||||||
|
|
||||||
proc staticRead*(filename: string): string {.magic: "Slurp".}
|
proc staticRead*(filename: string): string {.magic: "Slurp".}
|
||||||
## compile-time ``readFile`` proc for easy `resource`:idx: embedding:
|
## Compile-time ``readFile`` proc for easy `resource`:idx: embedding:
|
||||||
##
|
##
|
||||||
## .. code-block:: nimrod
|
## .. code-block:: nimrod
|
||||||
## const myResource = staticRead"mydatafile.bin"
|
## const myResource = staticRead"mydatafile.bin"
|
||||||
|
|
@ -2402,9 +2404,11 @@ proc staticRead*(filename: string): string {.magic: "Slurp".}
|
||||||
|
|
||||||
proc gorge*(command: string, input = ""): string {.
|
proc gorge*(command: string, input = ""): string {.
|
||||||
magic: "StaticExec".} = nil
|
magic: "StaticExec".} = nil
|
||||||
|
## This is an alias for ``staticExec``.
|
||||||
|
|
||||||
proc staticExec*(command: string, input = ""): string {.
|
proc staticExec*(command: string, input = ""): string {.
|
||||||
magic: "StaticExec".} = nil
|
magic: "StaticExec".} = nil
|
||||||
## executes an external process at compile-time.
|
## Executes an external process at compile-time.
|
||||||
## if `input` is not an empty string, it will be passed as a standard input
|
## if `input` is not an empty string, it will be passed as a standard input
|
||||||
## to the executed program.
|
## to the executed program.
|
||||||
##
|
##
|
||||||
|
|
@ -2412,7 +2416,9 @@ proc staticExec*(command: string, input = ""): string {.
|
||||||
## const buildInfo = "Revision " & staticExec("git rev-parse HEAD") &
|
## const buildInfo = "Revision " & staticExec("git rev-parse HEAD") &
|
||||||
## "\nCompiled on " & staticExec("uname -v")
|
## "\nCompiled on " & staticExec("uname -v")
|
||||||
##
|
##
|
||||||
## ``gorge`` is an alias for ``staticExec``.
|
## ``gorge`` is an alias for ``staticExec``. Note that you can use this proc
|
||||||
|
## inside a pragma like `passC <nimrodc.html#passc-pragma>`_ or `passL
|
||||||
|
## <nimrodc.html#passl-pragma>`_.
|
||||||
|
|
||||||
proc `+=`*[T: TOrdinal](x: var T, y: T) {.magic: "Inc", noSideEffect.}
|
proc `+=`*[T: TOrdinal](x: var T, y: T) {.magic: "Inc", noSideEffect.}
|
||||||
## Increments an ordinal
|
## Increments an ordinal
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ when defined(unix) and not defined(useLibzipSrc):
|
||||||
when defined(macosx):
|
when defined(macosx):
|
||||||
{.pragma: mydll, dynlib: "libzip2.dylib".}
|
{.pragma: mydll, dynlib: "libzip2.dylib".}
|
||||||
else:
|
else:
|
||||||
{.pragma: mydll, dynlib: "libzip2.so(|.2|.1|.0)".}
|
{.pragma: mydll, dynlib: "libzip(|2).so(|.2|.1|.0)".}
|
||||||
else:
|
else:
|
||||||
when defined(unix):
|
when defined(unix):
|
||||||
{.passl: "-lz".}
|
{.passl: "-lz".}
|
||||||
|
|
|
||||||
8
tests/caas/completion_dot_syntax.txt
Normal file
8
tests/caas/completion_dot_syntax.txt
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
completion_dot_syntax_main.nim
|
||||||
|
> idetools --track:$TESTNIM,24,15 --def
|
||||||
|
def\tskProc\t$MODULE.echoRemainingDollars
|
||||||
|
> idetools --trackDirty:completion_dot_syntax_dirty.nim,$TESTNIM,25,12 --suggest
|
||||||
|
sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingDollars
|
||||||
|
# The suggestion should not mention the other echoRemaining* variants.
|
||||||
|
!sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingEuros
|
||||||
|
!sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingBugs
|
||||||
25
tests/caas/completion_dot_syntax_dirty.nim
Normal file
25
tests/caas/completion_dot_syntax_dirty.nim
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
# Verifies if the --suggestion switch differentiates types for dot notation.
|
||||||
|
|
||||||
|
type
|
||||||
|
TDollar = distinct int
|
||||||
|
TEuro = distinct int
|
||||||
|
|
||||||
|
proc echoRemainingDollars(amount: TDollar) =
|
||||||
|
echo "You have $1 dollars" % [$int(amount)]
|
||||||
|
|
||||||
|
proc echoRemainingEuros(amount: TEuro) =
|
||||||
|
echo "You have $1 euros" % [$int(amount)]
|
||||||
|
|
||||||
|
proc echoRemainingBugs() =
|
||||||
|
echo "You still have bugs"
|
||||||
|
|
||||||
|
proc main =
|
||||||
|
var
|
||||||
|
d: TDollar
|
||||||
|
e: TEuro
|
||||||
|
d = TDollar(23)
|
||||||
|
e = TEuro(32)
|
||||||
|
d.echoRemainingDollars()
|
||||||
|
e.echoRemai
|
||||||
24
tests/caas/completion_dot_syntax_main.nim
Normal file
24
tests/caas/completion_dot_syntax_main.nim
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
# Verifies if the --suggestion switch differentiates types for dot notation.
|
||||||
|
|
||||||
|
type
|
||||||
|
TDollar = distinct int
|
||||||
|
TEuro = distinct int
|
||||||
|
|
||||||
|
proc echoRemainingDollars(amount: TDollar) =
|
||||||
|
echo "You have $1 dollars" % [$int(amount)]
|
||||||
|
|
||||||
|
proc echoRemainingEuros(amount: TEuro) =
|
||||||
|
echo "You have $1 euros" % [$int(amount)]
|
||||||
|
|
||||||
|
proc echoRemainingBugs() =
|
||||||
|
echo "You still have bugs"
|
||||||
|
|
||||||
|
proc main =
|
||||||
|
var
|
||||||
|
d: TDollar
|
||||||
|
e: TEuro
|
||||||
|
d = TDollar(23)
|
||||||
|
e = TEuro(32)
|
||||||
|
d.echoRemainingDollars()
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import unicode, sequtils
|
import unicode, sequtils, macros, re
|
||||||
|
|
||||||
proc test_enums() =
|
proc test_enums() =
|
||||||
var o: Tfile
|
var o: Tfile
|
||||||
|
|
@ -41,3 +41,44 @@ proc newLit(x: int): PLiteral = PLiteral(x: x)
|
||||||
proc newPlus(a, b: PExpr): PPlusExpr = PPlusExpr(a: a, b: b)
|
proc newPlus(a, b: PExpr): PPlusExpr = PPlusExpr(a: a, b: b)
|
||||||
|
|
||||||
echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4)))
|
echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4)))
|
||||||
|
|
||||||
|
proc findVowelPosition(text: string) =
|
||||||
|
var found = -1
|
||||||
|
block loops:
|
||||||
|
for i, letter in pairs(text):
|
||||||
|
for j in ['a', 'e', 'i', 'o', 'u']:
|
||||||
|
if letter == j:
|
||||||
|
found = i
|
||||||
|
break loops # leave both for-loops
|
||||||
|
echo found
|
||||||
|
|
||||||
|
findVowelPosition("Zerg") # should output 1, position of vowel.
|
||||||
|
|
||||||
|
macro expect*(exceptions: varargs[expr], body: stmt): stmt {.immediate.} =
|
||||||
|
## Expect docstrings
|
||||||
|
let exp = callsite()
|
||||||
|
template expectBody(errorTypes, lineInfoLit: expr,
|
||||||
|
body: stmt): PNimrodNode {.dirty.} =
|
||||||
|
try:
|
||||||
|
body
|
||||||
|
assert false
|
||||||
|
except errorTypes:
|
||||||
|
nil
|
||||||
|
|
||||||
|
var body = exp[exp.len - 1]
|
||||||
|
|
||||||
|
var errorTypes = newNimNode(nnkBracket)
|
||||||
|
for i in countup(1, exp.len - 2):
|
||||||
|
errorTypes.add(exp[i])
|
||||||
|
|
||||||
|
result = getAst(expectBody(errorTypes, exp.lineinfo, body))
|
||||||
|
|
||||||
|
proc err =
|
||||||
|
raise newException(EArithmetic, "some exception")
|
||||||
|
|
||||||
|
proc testMacro() =
|
||||||
|
expect(EArithmetic):
|
||||||
|
err()
|
||||||
|
|
||||||
|
testMacro()
|
||||||
|
let notAModule = re"(\w+)=(.*)"
|
||||||
|
|
|
||||||
|
|
@ -42,3 +42,18 @@ def\tskField\t$MODULE.TPerson.name\tbad_string\t
|
||||||
|
|
||||||
> idetools --track:$TESTNIM,43,7 --def $SILENT
|
> idetools --track:$TESTNIM,43,7 --def $SILENT
|
||||||
def\tskMethod\t$MODULE.eval\tproc \(PPlusExpr\): int\t
|
def\tskMethod\t$MODULE.eval\tproc \(PPlusExpr\): int\t
|
||||||
|
|
||||||
|
> idetools --track:$TESTNIM,47,8 --def $SILENT
|
||||||
|
def\tskLabel\t$MODULE.findVowelPosition.loops\t\t
|
||||||
|
# For some reason the use of the label with break displaces its position.
|
||||||
|
> idetools --track:$TESTNIM,52,16 --def $SILENT
|
||||||
|
def\tskLabel\t$MODULE.findVowelPosition.loops\t\t
|
||||||
|
|
||||||
|
# Displaced macro usage by one character.
|
||||||
|
> idetools --track:$TESTNIM,80,2 --def $SILENT
|
||||||
|
def\tskMacro\t$MODULE.expect\tproc \(varargs\[expr\], stmt\): stmt\t
|
||||||
|
|
||||||
|
# The syntax for extended raw string literals should not be returned as module
|
||||||
|
# but as the proc re() inside the re module.
|
||||||
|
> idetools --track:$TESTNIM,84,17 --def $SILENT
|
||||||
|
!def\tskModule
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,13 @@
|
||||||
main.nim
|
main.nim
|
||||||
|
# This example shows how the suggest feature can be used on a partial file
|
||||||
|
# using the --trackDirty switch.
|
||||||
> idetools --trackDirty:main_dirty.nim,$TESTNIM,12,7 --suggest $SILENT
|
> idetools --trackDirty:main_dirty.nim,$TESTNIM,12,7 --suggest $SILENT
|
||||||
skField\tx
|
skField\tx
|
||||||
skField\ty
|
skField\ty
|
||||||
|
# Repeating the query in caas should work always and retrieve same output.
|
||||||
|
CaasRun > idetools --trackDirty:main_dirty.nim,$TESTNIM,12,7 --suggest $SILENT
|
||||||
|
CaasRun skField\tx
|
||||||
|
CaasRun skField\ty
|
||||||
> c --verbosity:0 --hints:on
|
> c --verbosity:0 --hints:on
|
||||||
SuccessX
|
SuccessX
|
||||||
|
|
||||||
|
|
|
||||||
26
tests/caas/suggest-invalid-source.txt
Normal file
26
tests/caas/suggest-invalid-source.txt
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
main_dirty.nim
|
||||||
|
# A variant of the suggest-compile.txt, instead of using a "base" correct
|
||||||
|
# source, this one uses the "broken" main_dirty.nim which won't compile. The
|
||||||
|
# test tries to stress idetools to still provide a valid answer if possible,
|
||||||
|
# and at least provide the same output with repeated queries rather than dying
|
||||||
|
# after the first compilation error.
|
||||||
|
|
||||||
|
# The first query should work and provide valid suggestions.
|
||||||
|
> idetools --track:$TESTNIM,12,6 --suggest $SILENT
|
||||||
|
skField\tx
|
||||||
|
skField\ty
|
||||||
|
|
||||||
|
# Repeating the query should work too.
|
||||||
|
> idetools --track:$TESTNIM,12,6 --suggest $SILENT
|
||||||
|
skField\tx
|
||||||
|
skField\ty
|
||||||
|
|
||||||
|
# Expect now a compilation failure.
|
||||||
|
> c
|
||||||
|
!SuccessX
|
||||||
|
invalid indentation
|
||||||
|
|
||||||
|
# Repeating suggestions *after broken compilation* should work too.
|
||||||
|
> idetools --track:$TESTNIM,12,6 --suggest $SILENT
|
||||||
|
skField\tx
|
||||||
|
skField\ty
|
||||||
|
|
@ -2,45 +2,7 @@ import osproc, streams, os, strutils, re
|
||||||
|
|
||||||
## Compiler as a service tester.
|
## Compiler as a service tester.
|
||||||
##
|
##
|
||||||
## This test cases uses the txt files in the caas/ subdirectory.
|
## Please read docs/idetools.txt for information about this.
|
||||||
##
|
|
||||||
## Each of the text files inside encodes a session with the compiler:
|
|
||||||
##
|
|
||||||
## The first line indicates the main project file.
|
|
||||||
##
|
|
||||||
## Lines starting with '>' indicate a command to be sent to the compiler and
|
|
||||||
## the lines following a command include checks for expected or forbidden
|
|
||||||
## output (! for forbidden).
|
|
||||||
##
|
|
||||||
## If a line starts with '#' it will be ignored completely, so you can use that
|
|
||||||
## for comments.
|
|
||||||
##
|
|
||||||
## All the tests are run both in ProcRun (each command creates a separate
|
|
||||||
## process) and CaasRun (first command starts up a server and it is reused for
|
|
||||||
## the rest) modes. Since some cases are specific to either ProcRun or CaasRun
|
|
||||||
## modes, you can prefix a line with the mode and the line will be processed
|
|
||||||
## only in that mode.
|
|
||||||
##
|
|
||||||
## The rest of the line is treated as a regular expression, so be careful
|
|
||||||
## escaping metacharacters like parenthesis. Before the line is processed as a
|
|
||||||
## regular expression, some basic variables are searched for and replaced in
|
|
||||||
## the tests. The variables which will be replaced are:
|
|
||||||
##
|
|
||||||
## - $TESTNIM: filename specified in the first line of the script.
|
|
||||||
## - $MODULE: like $TESTNIM but without extension, useful for expected output.
|
|
||||||
##
|
|
||||||
## You can optionally pass parameters at the command line to modify the
|
|
||||||
## behaviour of the test suite. By default only tests which fail will be echoed
|
|
||||||
## to stdout. If you want to see all the output pass the word "verbose" as a
|
|
||||||
## parameter.
|
|
||||||
##
|
|
||||||
## If you don't want to run all the test case files, you can pass any substring
|
|
||||||
## as a parameter. Only files matching the passed substring will be run. The
|
|
||||||
## filtering doesn't use any globbing metacharacters, it's a plain match.
|
|
||||||
##
|
|
||||||
## Example to run only "*-compile*.txt" tests in verbose mode:
|
|
||||||
##
|
|
||||||
## ./caasdriver verbose -compile
|
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
@ -84,6 +46,8 @@ proc startNimrodSession(project, script: string, mode: TRunMode):
|
||||||
|
|
||||||
if mode == SymbolProcRun:
|
if mode == SymbolProcRun:
|
||||||
removeDir(nimcacheDir / result.nimcache)
|
removeDir(nimcacheDir / result.nimcache)
|
||||||
|
else:
|
||||||
|
removeDir(nimcacheDir / "nimcache")
|
||||||
|
|
||||||
if mode == CaasRun:
|
if mode == CaasRun:
|
||||||
result.nim = startProcess(NimrodBin, workingDir = dir,
|
result.nim = startProcess(NimrodBin, workingDir = dir,
|
||||||
|
|
|
||||||
10
tests/reject/twrongconst.nim
Normal file
10
tests/reject/twrongconst.nim
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
discard """
|
||||||
|
output: "Error: constant expression expected"
|
||||||
|
line: 7
|
||||||
|
"""
|
||||||
|
|
||||||
|
var x: array[100, char]
|
||||||
|
template Foo : expr = x[42]
|
||||||
|
|
||||||
|
|
||||||
|
const myConst = foo
|
||||||
|
|
@ -17,8 +17,8 @@ ECHO %CC% %COMP_FLAGS% -Ibuild -c ?{f} -o ?{changeFileExt(f, "o")}
|
||||||
# linkCmd.add(" " & changeFileExt(f, "o"))
|
# linkCmd.add(" " & changeFileExt(f, "o"))
|
||||||
# end for
|
# end for
|
||||||
|
|
||||||
ECHO %LINKER% %LINK_FLAGS% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd
|
ECHO %LINKER% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd %LINK_FLAGS%
|
||||||
%LINKER% %LINK_FLAGS% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd
|
%LINKER% -o ?{firstBinPath(c)\toLower(c.name)}.exe ?linkCmd %LINK_FLAGS%
|
||||||
|
|
||||||
# end block
|
# end block
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -121,8 +121,8 @@ case $myos in
|
||||||
$CC $COMP_FLAGS -Ibuild -c ?{f} -o ?{changeFileExt(f, "o")}
|
$CC $COMP_FLAGS -Ibuild -c ?{f} -o ?{changeFileExt(f, "o")}
|
||||||
# add(linkCmd, " \\\n" & changeFileExt(f, "o"))
|
# add(linkCmd, " \\\n" & changeFileExt(f, "o"))
|
||||||
# end for
|
# end for
|
||||||
echo "$LINKER $LINK_FLAGS -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd"
|
echo "$LINKER -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd $LINK_FLAGS"
|
||||||
$LINKER $LINK_FLAGS -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd
|
$LINKER -o ?{firstBinPath(c)/toLower(c.name)} ?linkCmd $LINK_FLAGS
|
||||||
;;
|
;;
|
||||||
# end for
|
# end for
|
||||||
*)
|
*)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue