better support for unsigned integers.
This commit is contained in:
parent
ce933c90a4
commit
e2d38a57ec
22 changed files with 643 additions and 586 deletions
10
build.bat
10
build.bat
|
|
@ -2,7 +2,7 @@
|
||||||
REM Generated by niminst
|
REM Generated by niminst
|
||||||
SET CC=gcc
|
SET CC=gcc
|
||||||
SET LINKER=gcc
|
SET LINKER=gcc
|
||||||
SET COMP_FLAGS=-w -O3 -fno-strict-aliasing
|
SET COMP_FLAGS=-w -g3 -O0 -O3 -fno-strict-aliasing
|
||||||
SET LINK_FLAGS=
|
SET LINK_FLAGS=
|
||||||
|
|
||||||
REM call the compiler:
|
REM call the compiler:
|
||||||
|
|
@ -143,8 +143,12 @@ 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
|
%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\docgen.c -o build\1_1\docgen.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
|
%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
|
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
|
%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
|
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
|
%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\cgen.c -o build\1_1\cgen.o
|
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_1\cgen.c -o build\1_1\cgen.o
|
||||||
|
|
@ -164,8 +168,8 @@ ECHO %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\parseopt.c -o build\1_1\parseopt.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
|
%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\nim__dat.o build\1_1\system.o build\1_1\nimrod.o build\1_1\times.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\winlean.o build\1_1\commands.o build\1_1\os.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\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\crc.o build\1_1\ropes.o build\1_1\platform.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\lexer.o build\1_1\lexbase.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\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\types.o build\1_1\trees.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\transf.o build\1_1\cgmeth.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\suggest.o build\1_1\aliases.o build\1_1\docgen.o build\1_1\rst.o build\1_1\highlite.o build\1_1\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\ecmasgen.o build\1_1\passaux.o build\1_1\depends.o build\1_1\parseopt.o
|
ECHO %LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_1\nim__dat.o build\1_1\system.o build\1_1\nimrod.o build\1_1\times.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\winlean.o build\1_1\commands.o build\1_1\os.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\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\crc.o build\1_1\ropes.o build\1_1\platform.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\lexer.o build\1_1\lexbase.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\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\types.o build\1_1\trees.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\transf.o build\1_1\cgmeth.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\suggest.o build\1_1\aliases.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\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\ecmasgen.o build\1_1\passaux.o build\1_1\depends.o build\1_1\parseopt.o
|
||||||
%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_1\nim__dat.o build\1_1\system.o build\1_1\nimrod.o build\1_1\times.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\winlean.o build\1_1\commands.o build\1_1\os.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\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\crc.o build\1_1\ropes.o build\1_1\platform.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\lexer.o build\1_1\lexbase.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\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\types.o build\1_1\trees.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\transf.o build\1_1\cgmeth.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\suggest.o build\1_1\aliases.o build\1_1\docgen.o build\1_1\rst.o build\1_1\highlite.o build\1_1\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\ecmasgen.o build\1_1\passaux.o build\1_1\depends.o build\1_1\parseopt.o
|
%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_1\nim__dat.o build\1_1\system.o build\1_1\nimrod.o build\1_1\times.o build\1_1\strutils.o build\1_1\parseutils.o build\1_1\winlean.o build\1_1\commands.o build\1_1\os.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\nversion.o build\1_1\condsyms.o build\1_1\ast.o build\1_1\crc.o build\1_1\ropes.o build\1_1\platform.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\lexer.o build\1_1\lexbase.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\memfiles.o build\1_1\rodwrite.o build\1_1\passes.o build\1_1\types.o build\1_1\trees.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\transf.o build\1_1\cgmeth.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\suggest.o build\1_1\aliases.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\cgen.o build\1_1\ccgutils.o build\1_1\cgendata.o build\1_1\ccgmerge.o build\1_1\ecmasgen.o build\1_1\passaux.o build\1_1\depends.o build\1_1\parseopt.o
|
||||||
|
|
||||||
|
|
||||||
ECHO SUCCESS
|
ECHO SUCCESS
|
||||||
|
|
|
||||||
10
build64.bat
10
build64.bat
|
|
@ -2,7 +2,7 @@
|
||||||
REM Generated by niminst
|
REM Generated by niminst
|
||||||
SET CC=gcc
|
SET CC=gcc
|
||||||
SET LINKER=gcc
|
SET LINKER=gcc
|
||||||
SET COMP_FLAGS=-w -O3 -fno-strict-aliasing
|
SET COMP_FLAGS=-w -g3 -O0 -O3 -fno-strict-aliasing
|
||||||
SET LINK_FLAGS=
|
SET LINK_FLAGS=
|
||||||
|
|
||||||
REM call the compiler:
|
REM call the compiler:
|
||||||
|
|
@ -143,8 +143,12 @@ 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
|
%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\docgen.c -o build\1_2\docgen.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
|
%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
|
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
|
%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
|
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
|
%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\cgen.c -o build\1_2\cgen.o
|
ECHO %CC% %COMP_FLAGS% -Ibuild -c build\1_2\cgen.c -o build\1_2\cgen.o
|
||||||
|
|
@ -164,8 +168,8 @@ ECHO %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\parseopt.c -o build\1_2\parseopt.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
|
%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\nim__dat.o build\1_2\system.o build\1_2\nimrod.o build\1_2\times.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\winlean.o build\1_2\commands.o build\1_2\os.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\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\crc.o build\1_2\ropes.o build\1_2\platform.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\lexer.o build\1_2\lexbase.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\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\types.o build\1_2\trees.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\transf.o build\1_2\cgmeth.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\suggest.o build\1_2\aliases.o build\1_2\docgen.o build\1_2\rst.o build\1_2\highlite.o build\1_2\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\ecmasgen.o build\1_2\passaux.o build\1_2\depends.o build\1_2\parseopt.o
|
ECHO %LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_2\nim__dat.o build\1_2\system.o build\1_2\nimrod.o build\1_2\times.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\winlean.o build\1_2\commands.o build\1_2\os.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\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\crc.o build\1_2\ropes.o build\1_2\platform.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\lexer.o build\1_2\lexbase.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\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\types.o build\1_2\trees.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\transf.o build\1_2\cgmeth.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\suggest.o build\1_2\aliases.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\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\ecmasgen.o build\1_2\passaux.o build\1_2\depends.o build\1_2\parseopt.o
|
||||||
%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_2\nim__dat.o build\1_2\system.o build\1_2\nimrod.o build\1_2\times.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\winlean.o build\1_2\commands.o build\1_2\os.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\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\crc.o build\1_2\ropes.o build\1_2\platform.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\lexer.o build\1_2\lexbase.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\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\types.o build\1_2\trees.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\transf.o build\1_2\cgmeth.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\suggest.o build\1_2\aliases.o build\1_2\docgen.o build\1_2\rst.o build\1_2\highlite.o build\1_2\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\ecmasgen.o build\1_2\passaux.o build\1_2\depends.o build\1_2\parseopt.o
|
%LINKER% %LINK_FLAGS% -o bin\nimrod.exe build\1_2\nim__dat.o build\1_2\system.o build\1_2\nimrod.o build\1_2\times.o build\1_2\strutils.o build\1_2\parseutils.o build\1_2\winlean.o build\1_2\commands.o build\1_2\os.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\nversion.o build\1_2\condsyms.o build\1_2\ast.o build\1_2\crc.o build\1_2\ropes.o build\1_2\platform.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\lexer.o build\1_2\lexbase.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\memfiles.o build\1_2\rodwrite.o build\1_2\passes.o build\1_2\types.o build\1_2\trees.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\transf.o build\1_2\cgmeth.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\suggest.o build\1_2\aliases.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\cgen.o build\1_2\ccgutils.o build\1_2\cgendata.o build\1_2\ccgmerge.o build\1_2\ecmasgen.o build\1_2\passaux.o build\1_2\depends.o build\1_2\parseopt.o
|
||||||
|
|
||||||
|
|
||||||
ECHO SUCCESS
|
ECHO SUCCESS
|
||||||
|
|
|
||||||
|
|
@ -52,9 +52,15 @@ type
|
||||||
nkInt16Lit,
|
nkInt16Lit,
|
||||||
nkInt32Lit,
|
nkInt32Lit,
|
||||||
nkInt64Lit,
|
nkInt64Lit,
|
||||||
|
nkUIntLit, # an unsigned integer literal
|
||||||
|
nkUInt8Lit,
|
||||||
|
nkUInt16Lit,
|
||||||
|
nkUInt32Lit,
|
||||||
|
nkUInt64Lit,
|
||||||
nkFloatLit, # a floating point literal
|
nkFloatLit, # a floating point literal
|
||||||
nkFloat32Lit,
|
nkFloat32Lit,
|
||||||
nkFloat64Lit,
|
nkFloat64Lit,
|
||||||
|
nkFloat128Lit,
|
||||||
nkStrLit, # a string literal ""
|
nkStrLit, # a string literal ""
|
||||||
nkRStrLit, # a raw string literal r""
|
nkRStrLit, # a raw string literal r""
|
||||||
nkTripleStrLit, # a triple string literal """
|
nkTripleStrLit, # a triple string literal """
|
||||||
|
|
@ -323,6 +329,7 @@ type
|
||||||
tfEnumHasHoles, # enum cannot be mapped into a range
|
tfEnumHasHoles, # enum cannot be mapped into a range
|
||||||
tfShallow, # type can be shallow copied on assignment
|
tfShallow, # type can be shallow copied on assignment
|
||||||
tfThread, # proc type is marked as ``thread``
|
tfThread, # proc type is marked as ``thread``
|
||||||
|
tfLiteral # type represents literal value
|
||||||
tfFromGeneric # type is an instantiation of a generic; this is needed
|
tfFromGeneric # type is an instantiation of a generic; this is needed
|
||||||
# because for instantiations of objects, structural
|
# because for instantiations of objects, structural
|
||||||
# type equality has to be used
|
# type equality has to be used
|
||||||
|
|
@ -406,8 +413,11 @@ type
|
||||||
mNewString, mNewStringOfCap,
|
mNewString, mNewStringOfCap,
|
||||||
mReset,
|
mReset,
|
||||||
mArray, mOpenArray, mRange, mSet, mSeq,
|
mArray, mOpenArray, mRange, mSet, mSeq,
|
||||||
mOrdinal, mInt, mInt8, mInt16, mInt32,
|
mOrdinal,
|
||||||
mInt64, mFloat, mFloat32, mFloat64, mBool, mChar, mString, mCstring,
|
mInt, mInt8, mInt16, mInt32, mInt64,
|
||||||
|
mUInt, mUInt8, mUInt16, mUInt32, mUInt64,
|
||||||
|
mFloat, mFloat32, mFloat64, mFloat128,
|
||||||
|
mBool, mChar, mString, mCstring,
|
||||||
mPointer, mEmptySet, mIntSetBaseType, mNil, mExpr, mStmt, mTypeDesc,
|
mPointer, mEmptySet, mIntSetBaseType, mNil, mExpr, mStmt, mTypeDesc,
|
||||||
mVoidType, mPNimrodNode,
|
mVoidType, mPNimrodNode,
|
||||||
mIsMainModule, mCompileDate, mCompileTime, mNimrodVersion, mNimrodMajor,
|
mIsMainModule, mCompileDate, mCompileTime, mNimrodVersion, mNimrodMajor,
|
||||||
|
|
@ -462,9 +472,9 @@ type
|
||||||
info*: TLineInfo
|
info*: TLineInfo
|
||||||
flags*: TNodeFlags
|
flags*: TNodeFlags
|
||||||
case Kind*: TNodeKind
|
case Kind*: TNodeKind
|
||||||
of nkCharLit..nkInt64Lit:
|
of nkCharLit..nkUInt64Lit:
|
||||||
intVal*: biggestInt
|
intVal*: biggestInt
|
||||||
of nkFloatLit..nkFloat64Lit:
|
of nkFloatLit..nkFloat128Lit:
|
||||||
floatVal*: biggestFloat
|
floatVal*: biggestFloat
|
||||||
of nkStrLit..nkTripleStrLit:
|
of nkStrLit..nkTripleStrLit:
|
||||||
strVal*: string
|
strVal*: string
|
||||||
|
|
@ -763,8 +773,8 @@ const # for all kind of hash tables:
|
||||||
|
|
||||||
proc ValueToString*(a: PNode): string =
|
proc ValueToString*(a: PNode): string =
|
||||||
case a.kind
|
case a.kind
|
||||||
of nkCharLit..nkInt64Lit: result = $(a.intVal)
|
of nkCharLit..nkUInt64Lit: result = $(a.intVal)
|
||||||
of nkFloatLit, nkFloat32Lit, nkFloat64Lit: result = $(a.floatVal)
|
of nkFloatLit..nkFloat128Lit: result = $(a.floatVal)
|
||||||
of nkStrLit..nkTripleStrLit: result = a.strVal
|
of nkStrLit..nkTripleStrLit: result = a.strVal
|
||||||
else:
|
else:
|
||||||
InternalError(a.info, "valueToString")
|
InternalError(a.info, "valueToString")
|
||||||
|
|
@ -1019,8 +1029,8 @@ proc copyNode(src: PNode): PNode =
|
||||||
result.typ = src.typ
|
result.typ = src.typ
|
||||||
result.flags = src.flags * PersistentNodeFlags
|
result.flags = src.flags * PersistentNodeFlags
|
||||||
case src.Kind
|
case src.Kind
|
||||||
of nkCharLit..nkInt64Lit: result.intVal = src.intVal
|
of nkCharLit..nkUInt64Lit: result.intVal = src.intVal
|
||||||
of nkFloatLit, nkFloat32Lit, nkFloat64Lit: result.floatVal = src.floatVal
|
of nkFloatLit..nkFloat128Lit: result.floatVal = src.floatVal
|
||||||
of nkSym: result.sym = src.sym
|
of nkSym: result.sym = src.sym
|
||||||
of nkIdent: result.ident = src.ident
|
of nkIdent: result.ident = src.ident
|
||||||
of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
|
of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
|
||||||
|
|
@ -1034,8 +1044,8 @@ proc shallowCopy*(src: PNode): PNode =
|
||||||
result.typ = src.typ
|
result.typ = src.typ
|
||||||
result.flags = src.flags * PersistentNodeFlags
|
result.flags = src.flags * PersistentNodeFlags
|
||||||
case src.Kind
|
case src.Kind
|
||||||
of nkCharLit..nkInt64Lit: result.intVal = src.intVal
|
of nkCharLit..nkUInt64Lit: result.intVal = src.intVal
|
||||||
of nkFloatLit, nkFloat32Lit, nkFloat64Lit: result.floatVal = src.floatVal
|
of nkFloatLit..nkFloat128Lit: result.floatVal = src.floatVal
|
||||||
of nkSym: result.sym = src.sym
|
of nkSym: result.sym = src.sym
|
||||||
of nkIdent: result.ident = src.ident
|
of nkIdent: result.ident = src.ident
|
||||||
of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
|
of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
|
||||||
|
|
@ -1050,8 +1060,8 @@ proc copyTree(src: PNode): PNode =
|
||||||
result.typ = src.typ
|
result.typ = src.typ
|
||||||
result.flags = src.flags * PersistentNodeFlags
|
result.flags = src.flags * PersistentNodeFlags
|
||||||
case src.Kind
|
case src.Kind
|
||||||
of nkCharLit..nkInt64Lit: result.intVal = src.intVal
|
of nkCharLit..nkUInt64Lit: result.intVal = src.intVal
|
||||||
of nkFloatLit, nkFloat32Lit, nkFloat64Lit: result.floatVal = src.floatVal
|
of nkFloatLit..nkFloat128Lit: result.floatVal = src.floatVal
|
||||||
of nkSym: result.sym = src.sym
|
of nkSym: result.sym = src.sym
|
||||||
of nkIdent: result.ident = src.ident
|
of nkIdent: result.ident = src.ident
|
||||||
of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
|
of nkStrLit..nkTripleStrLit: result.strVal = src.strVal
|
||||||
|
|
@ -1101,14 +1111,14 @@ proc sonsNotNil(n: PNode): bool =
|
||||||
|
|
||||||
proc getInt*(a: PNode): biggestInt =
|
proc getInt*(a: PNode): biggestInt =
|
||||||
case a.kind
|
case a.kind
|
||||||
of nkIntLit..nkInt64Lit: result = a.intVal
|
of nkIntLit..nkUInt64Lit: result = a.intVal
|
||||||
else:
|
else:
|
||||||
internalError(a.info, "getInt")
|
internalError(a.info, "getInt")
|
||||||
result = 0
|
result = 0
|
||||||
|
|
||||||
proc getFloat*(a: PNode): biggestFloat =
|
proc getFloat*(a: PNode): biggestFloat =
|
||||||
case a.kind
|
case a.kind
|
||||||
of nkFloatLit..nkFloat64Lit: result = a.floatVal
|
of nkFloatLit..nkFloat128Lit: result = a.floatVal
|
||||||
else:
|
else:
|
||||||
internalError(a.info, "getFloat")
|
internalError(a.info, "getFloat")
|
||||||
result = 0.0
|
result = 0.0
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ proc int32Literal(i: Int): PRope =
|
||||||
proc genHexLiteral(v: PNode): PRope =
|
proc genHexLiteral(v: PNode): PRope =
|
||||||
# hex literals are unsigned in C
|
# hex literals are unsigned in C
|
||||||
# so we don't generate hex literals any longer.
|
# so we don't generate hex literals any longer.
|
||||||
if not (v.kind in {nkIntLit..nkInt64Lit}):
|
if not (v.kind in {nkIntLit..nkUInt64Lit}):
|
||||||
internalError(v.info, "genHexLiteral")
|
internalError(v.info, "genHexLiteral")
|
||||||
result = intLiteral(v.intVal)
|
result = intLiteral(v.intVal)
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ proc getStrLit(m: BModule, s: string): PRope =
|
||||||
proc genLiteral(p: BProc, v: PNode, ty: PType): PRope =
|
proc genLiteral(p: BProc, v: PNode, ty: PType): PRope =
|
||||||
if ty == nil: internalError(v.info, "genLiteral: ty is nil")
|
if ty == nil: internalError(v.info, "genLiteral: ty is nil")
|
||||||
case v.kind
|
case v.kind
|
||||||
of nkCharLit..nkInt64Lit:
|
of nkCharLit..nkUInt64Lit:
|
||||||
case skipTypes(ty, abstractVarRange).kind
|
case skipTypes(ty, abstractVarRange).kind
|
||||||
of tyChar, tyInt64, tyNil:
|
of tyChar, tyInt64, tyNil:
|
||||||
result = intLiteral(v.intVal)
|
result = intLiteral(v.intVal)
|
||||||
|
|
@ -277,7 +277,7 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) =
|
||||||
else:
|
else:
|
||||||
appcg(p, cpsStmts, "$1 = $2;$n", [rdLoc(dest), rdLoc(src)])
|
appcg(p, cpsStmts, "$1 = $2;$n", [rdLoc(dest), rdLoc(src)])
|
||||||
of tyPtr, tyPointer, tyChar, tyBool, tyEnum, tyCString,
|
of tyPtr, tyPointer, tyChar, tyBool, tyEnum, tyCString,
|
||||||
tyInt..tyFloat128, tyRange:
|
tyInt..tyUInt64, tyRange:
|
||||||
appcg(p, cpsStmts, "$1 = $2;$n", [rdLoc(dest), rdLoc(src)])
|
appcg(p, cpsStmts, "$1 = $2;$n", [rdLoc(dest), rdLoc(src)])
|
||||||
else: InternalError("genAssignment(" & $ty.kind & ')')
|
else: InternalError("genAssignment(" & $ty.kind & ')')
|
||||||
|
|
||||||
|
|
@ -582,7 +582,7 @@ proc genTupleElem(p: BProc, e: PNode, d: var TLoc) =
|
||||||
var ty = a.t
|
var ty = a.t
|
||||||
var r = rdLoc(a)
|
var r = rdLoc(a)
|
||||||
case e.sons[1].kind
|
case e.sons[1].kind
|
||||||
of nkIntLit..nkInt64Lit: i = int(e.sons[1].intVal)
|
of nkIntLit..nkUInt64Lit: i = int(e.sons[1].intVal)
|
||||||
else: internalError(e.info, "genTupleElem")
|
else: internalError(e.info, "genTupleElem")
|
||||||
when false:
|
when false:
|
||||||
if ty.n != nil:
|
if ty.n != nil:
|
||||||
|
|
@ -1684,8 +1684,8 @@ proc expr(p: BProc, e: PNode, d: var TLoc) =
|
||||||
InternalError(e.info, "expr: param not init " & sym.name.s)
|
InternalError(e.info, "expr: param not init " & sym.name.s)
|
||||||
putLocIntoDest(p, d, sym.loc)
|
putLocIntoDest(p, d, sym.loc)
|
||||||
else: InternalError(e.info, "expr(" & $sym.kind & "); unknown symbol")
|
else: InternalError(e.info, "expr(" & $sym.kind & "); unknown symbol")
|
||||||
of nkStrLit..nkTripleStrLit, nkIntLit..nkInt64Lit, nkFloatLit..nkFloat64Lit,
|
of nkStrLit..nkTripleStrLit, nkIntLit..nkUInt64Lit,
|
||||||
nkNilLit, nkCharLit:
|
nkFloatLit..nkFloat128Lit, nkNilLit, nkCharLit:
|
||||||
putIntoDest(p, d, e.typ, genLiteral(p, e))
|
putIntoDest(p, d, e.typ, genLiteral(p, e))
|
||||||
of nkCall, nkHiddenCallConv, nkInfix, nkPrefix, nkPostfix, nkCommand,
|
of nkCall, nkHiddenCallConv, nkInfix, nkPrefix, nkPostfix, nkCommand,
|
||||||
nkCallStrLit:
|
nkCallStrLit:
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ proc mapType(typ: PType): TCTypeKind =
|
||||||
of tyProc: result = if typ.callConv != ccClosure: ctProc else: ctStruct
|
of tyProc: result = if typ.callConv != ccClosure: ctProc else: ctStruct
|
||||||
of tyString: result = ctNimStr
|
of tyString: result = ctNimStr
|
||||||
of tyCString: result = ctCString
|
of tyCString: result = ctCString
|
||||||
of tyInt..tyFloat128:
|
of tyInt..tyUInt64:
|
||||||
result = TCTypeKind(ord(typ.kind) - ord(tyInt) + ord(ctInt))
|
result = TCTypeKind(ord(typ.kind) - ord(tyInt) + ord(ctInt))
|
||||||
else: InternalError("mapType")
|
else: InternalError("mapType")
|
||||||
|
|
||||||
|
|
@ -313,8 +313,10 @@ proc typeNameOrLiteral(t: PType, literal: string): PRope =
|
||||||
|
|
||||||
proc getSimpleTypeDesc(m: BModule, typ: PType): PRope =
|
proc getSimpleTypeDesc(m: BModule, typ: PType): PRope =
|
||||||
const
|
const
|
||||||
NumericalTypeToStr: array[tyInt..tyFloat128, string] = ["NI", "NI8",
|
NumericalTypeToStr: array[tyInt..tyUInt64, string] = [
|
||||||
"NI16", "NI32", "NI64", "NF", "NF32", "NF64", "NF128"]
|
"NI", "NI8", "NI16", "NI32", "NI64",
|
||||||
|
"NF", "NF32", "NF64", "NF128",
|
||||||
|
"NU", "NU8", "NU16", "NU32", "NU64",]
|
||||||
case typ.Kind
|
case typ.Kind
|
||||||
of tyPointer:
|
of tyPointer:
|
||||||
result = typeNameOrLiteral(typ, "void*")
|
result = typeNameOrLiteral(typ, "void*")
|
||||||
|
|
@ -337,7 +339,7 @@ proc getSimpleTypeDesc(m: BModule, typ: PType): PRope =
|
||||||
of tyBool: result = typeNameOrLiteral(typ, "NIM_BOOL")
|
of tyBool: result = typeNameOrLiteral(typ, "NIM_BOOL")
|
||||||
of tyChar: result = typeNameOrLiteral(typ, "NIM_CHAR")
|
of tyChar: result = typeNameOrLiteral(typ, "NIM_CHAR")
|
||||||
of tyNil: result = typeNameOrLiteral(typ, "0")
|
of tyNil: result = typeNameOrLiteral(typ, "0")
|
||||||
of tyInt..tyFloat128, tyUInt..tyUInt64:
|
of tyInt..tyUInt64:
|
||||||
result = typeNameOrLiteral(typ, NumericalTypeToStr[typ.Kind])
|
result = typeNameOrLiteral(typ, NumericalTypeToStr[typ.Kind])
|
||||||
of tyRange: result = getSimpleTypeDesc(m, typ.sons[0])
|
of tyRange: result = getSimpleTypeDesc(m, typ.sons[0])
|
||||||
else: result = nil
|
else: result = nil
|
||||||
|
|
@ -871,7 +873,7 @@ proc genTypeInfo(m: BModule, typ: PType): PRope =
|
||||||
if dataGenerated: return
|
if dataGenerated: return
|
||||||
case t.kind
|
case t.kind
|
||||||
of tyEmpty: result = toRope"0"
|
of tyEmpty: result = toRope"0"
|
||||||
of tyPointer, tyBool, tyChar, tyCString, tyString, tyInt..tyFloat128, tyVar:
|
of tyPointer, tyBool, tyChar, tyCString, tyString, tyInt..tyUInt64, tyVar:
|
||||||
genTypeInfoAuxBase(gNimDat, t, result, toRope"0")
|
genTypeInfoAuxBase(gNimDat, t, result, toRope"0")
|
||||||
of tyProc:
|
of tyProc:
|
||||||
if t.callConv != ccClosure:
|
if t.callConv != ccClosure:
|
||||||
|
|
|
||||||
|
|
@ -70,9 +70,7 @@ proc GetUniqueType*(key: PType): PType =
|
||||||
var k = key.kind
|
var k = key.kind
|
||||||
case k
|
case k
|
||||||
of tyBool, tyChar,
|
of tyBool, tyChar,
|
||||||
tyInt, tyInt8, tyInt16, tyInt32, tyInt64,
|
tyInt..tyUInt64:
|
||||||
tyFloat, tyFloat32, tyFloat64, tyFloat128,
|
|
||||||
tyUInt, tyUInt8, tyUInt16, tyUInt32, tyUInt64:
|
|
||||||
# no canonicalization for integral types, so that e.g. ``pid_t`` is
|
# no canonicalization for integral types, so that e.g. ``pid_t`` is
|
||||||
# produced instead of ``NI``.
|
# produced instead of ``NI``.
|
||||||
result = key
|
result = key
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,11 @@ type
|
||||||
cfsDynLibDeinit # section for deinitialization of dynamic
|
cfsDynLibDeinit # section for deinitialization of dynamic
|
||||||
# libraries
|
# libraries
|
||||||
TCTypeKind* = enum # describes the type kind of a C type
|
TCTypeKind* = enum # describes the type kind of a C type
|
||||||
ctVoid, ctChar, ctBool, ctUInt, ctUInt8, ctUInt16, ctUInt32, ctUInt64,
|
ctVoid, ctChar, ctBool,
|
||||||
ctInt, ctInt8, ctInt16, ctInt32, ctInt64, ctFloat, ctFloat32, ctFloat64,
|
ctInt, ctInt8, ctInt16, ctInt32, ctInt64,
|
||||||
ctFloat128, ctArray, ctStruct, ctPtr, ctNimStr, ctNimSeq, ctProc, ctCString
|
ctFloat, ctFloat32, ctFloat64, ctFloat128,
|
||||||
|
ctUInt, ctUInt8, ctUInt16, ctUInt32, ctUInt64,
|
||||||
|
ctArray, ctStruct, ctPtr, ctNimStr, ctNimSeq, ctProc, ctCString
|
||||||
TCFileSections* = array[TCFileSection, PRope] # represents a generated C file
|
TCFileSections* = array[TCFileSection, PRope] # represents a generated C file
|
||||||
TCProcSection* = enum # the sections a generated C proc consists of
|
TCProcSection* = enum # the sections a generated C proc consists of
|
||||||
cpsLocals, # section of local variables for C proc
|
cpsLocals, # section of local variables for C proc
|
||||||
|
|
|
||||||
|
|
@ -206,10 +206,10 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
|
||||||
of tkCharLit:
|
of tkCharLit:
|
||||||
dispA(result, "<span class=\"CharLit\">$1</span>", "\\spanCharLit{$1}",
|
dispA(result, "<span class=\"CharLit\">$1</span>", "\\spanCharLit{$1}",
|
||||||
[toRope(esc(d.target, literal))])
|
[toRope(esc(d.target, literal))])
|
||||||
of tkIntLit..tkInt64Lit:
|
of tkIntLit..tkUInt64Lit:
|
||||||
dispA(result, "<span class=\"DecNumber\">$1</span>",
|
dispA(result, "<span class=\"DecNumber\">$1</span>",
|
||||||
"\\spanDecNumber{$1}", [toRope(esc(d.target, literal))])
|
"\\spanDecNumber{$1}", [toRope(esc(d.target, literal))])
|
||||||
of tkFloatLit..tkFloat64Lit:
|
of tkFloatLit..tkFloat128Lit:
|
||||||
dispA(result, "<span class=\"FloatNumber\">$1</span>",
|
dispA(result, "<span class=\"FloatNumber\">$1</span>",
|
||||||
"\\spanFloatNumber{$1}", [toRope(esc(d.target, literal))])
|
"\\spanFloatNumber{$1}", [toRope(esc(d.target, literal))])
|
||||||
of tkSymbol:
|
of tkSymbol:
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,8 @@ proc getNullValue(typ: PType, info: TLineInfo): PNode =
|
||||||
case t.kind
|
case t.kind
|
||||||
of tyBool, tyEnum, tyChar, tyInt..tyInt64:
|
of tyBool, tyEnum, tyChar, tyInt..tyInt64:
|
||||||
result = newNodeIT(nkIntLit, info, t)
|
result = newNodeIT(nkIntLit, info, t)
|
||||||
|
of tyUInt..tyUInt64:
|
||||||
|
result = newNodeIT(nkUIntLit, info, t)
|
||||||
of tyFloat..tyFloat128:
|
of tyFloat..tyFloat128:
|
||||||
result = newNodeIt(nkFloatLit, info, t)
|
result = newNodeIt(nkFloatLit, info, t)
|
||||||
of tyVar, tyPointer, tyPtr, tyRef, tyCString, tySequence, tyString, tyExpr,
|
of tyVar, tyPointer, tyPtr, tyRef, tyCString, tySequence, tyString, tyExpr,
|
||||||
|
|
|
||||||
|
|
@ -597,7 +597,7 @@ proc CallCCompiler*(projectfile: string) =
|
||||||
proc genMappingFiles(list: TLinkedList): PRope =
|
proc genMappingFiles(list: TLinkedList): PRope =
|
||||||
var it = PStrEntry(list.head)
|
var it = PStrEntry(list.head)
|
||||||
while it != nil:
|
while it != nil:
|
||||||
appf(result, "--file:r\"$1\"$n", [toRope(AddFileExt(it.data, cExt))])
|
appf(result, "--file:r\"$1\"$N", [toRope(AddFileExt(it.data, cExt))])
|
||||||
it = PStrEntry(it.next)
|
it = PStrEntry(it.next)
|
||||||
|
|
||||||
proc writeMapping*(gSymbolMapping: PRope) =
|
proc writeMapping*(gSymbolMapping: PRope) =
|
||||||
|
|
|
||||||
|
|
@ -45,8 +45,10 @@ type
|
||||||
tkTemplate,
|
tkTemplate,
|
||||||
tkTry, tkTuple, tkType, tkVar, tkWhen, tkWhile, tkWith, tkWithout, tkXor,
|
tkTry, tkTuple, tkType, tkVar, tkWhen, tkWhile, tkWith, tkWithout, tkXor,
|
||||||
tkYield, # end of keywords
|
tkYield, # end of keywords
|
||||||
tkIntLit, tkInt8Lit, tkInt16Lit, tkInt32Lit, tkInt64Lit, tkFloatLit,
|
tkIntLit, tkInt8Lit, tkInt16Lit, tkInt32Lit, tkInt64Lit,
|
||||||
tkFloat32Lit, tkFloat64Lit, tkStrLit, tkRStrLit, tkTripleStrLit,
|
tkUIntLit, tkUInt8Lit, tkUInt16Lit, tkUInt32Lit, tkUInt64Lit,
|
||||||
|
tkFloatLit, tkFloat32Lit, tkFloat64Lit, tkFloat128Lit,
|
||||||
|
tkStrLit, tkRStrLit, tkTripleStrLit,
|
||||||
tkGStrLit, tkGTripleStrLit, tkCharLit, tkParLe, tkParRi, tkBracketLe,
|
tkGStrLit, tkGTripleStrLit, tkCharLit, tkParLe, tkParRi, tkBracketLe,
|
||||||
tkBracketRi, tkCurlyLe, tkCurlyRi,
|
tkBracketRi, tkCurlyLe, tkCurlyRi,
|
||||||
tkBracketDotLe, tkBracketDotRi, # [. and .]
|
tkBracketDotLe, tkBracketDotRi, # [. and .]
|
||||||
|
|
@ -78,7 +80,9 @@ const
|
||||||
"try", "tuple", "type", "var", "when", "while", "with", "without", "xor",
|
"try", "tuple", "type", "var", "when", "while", "with", "without", "xor",
|
||||||
"yield",
|
"yield",
|
||||||
"tkIntLit", "tkInt8Lit", "tkInt16Lit", "tkInt32Lit", "tkInt64Lit",
|
"tkIntLit", "tkInt8Lit", "tkInt16Lit", "tkInt32Lit", "tkInt64Lit",
|
||||||
"tkFloatLit", "tkFloat32Lit", "tkFloat64Lit", "tkStrLit", "tkRStrLit",
|
"tkUIntLit", "tkUInt8Lit", "tkUInt16Lit", "tkUInt32Lit", "tkUInt64Lit",
|
||||||
|
"tkFloatLit", "tkFloat32Lit", "tkFloat64Lit", "tkFloat128Lit",
|
||||||
|
"tkStrLit", "tkRStrLit",
|
||||||
"tkTripleStrLit", "tkGStrLit", "tkGTripleStrLit", "tkCharLit", "(",
|
"tkTripleStrLit", "tkGStrLit", "tkGTripleStrLit", "tkCharLit", "(",
|
||||||
")", "[", "]", "{", "}", "[.", ".]", "{.", ".}", "(.", ".)",
|
")", "[", "]", "{", "}", "[.", ".]", "{.", ".}", "(.", ".)",
|
||||||
",", ";",
|
",", ";",
|
||||||
|
|
@ -283,12 +287,17 @@ proc GetNumber(L: var TLexer): TToken =
|
||||||
case L.buf[endpos]
|
case L.buf[endpos]
|
||||||
of 'f', 'F':
|
of 'f', 'F':
|
||||||
inc(endpos)
|
inc(endpos)
|
||||||
if (L.buf[endpos] == '6') and (L.buf[endpos + 1] == '4'):
|
if (L.buf[endpos] == '3') and (L.buf[endpos + 1] == '2'):
|
||||||
result.tokType = tkFloat64Lit
|
|
||||||
inc(endpos, 2)
|
|
||||||
elif (L.buf[endpos] == '3') and (L.buf[endpos + 1] == '2'):
|
|
||||||
result.tokType = tkFloat32Lit
|
result.tokType = tkFloat32Lit
|
||||||
inc(endpos, 2)
|
inc(endpos, 2)
|
||||||
|
elif (L.buf[endpos] == '6') and (L.buf[endpos + 1] == '4'):
|
||||||
|
result.tokType = tkFloat64Lit
|
||||||
|
inc(endpos, 2)
|
||||||
|
elif (L.buf[endpos] == '1') and
|
||||||
|
(L.buf[endpos + 1] == '2') and
|
||||||
|
(L.buf[endpos + 2] == '8'):
|
||||||
|
result.tokType = tkFloat128Lit
|
||||||
|
inc(endpos, 3)
|
||||||
else:
|
else:
|
||||||
lexMessage(L, errInvalidNumber, result.literal & "'f" & L.buf[endpos])
|
lexMessage(L, errInvalidNumber, result.literal & "'f" & L.buf[endpos])
|
||||||
of 'i', 'I':
|
of 'i', 'I':
|
||||||
|
|
@ -307,6 +316,22 @@ proc GetNumber(L: var TLexer): TToken =
|
||||||
inc(endpos)
|
inc(endpos)
|
||||||
else:
|
else:
|
||||||
lexMessage(L, errInvalidNumber, result.literal & "'i" & L.buf[endpos])
|
lexMessage(L, errInvalidNumber, result.literal & "'i" & L.buf[endpos])
|
||||||
|
of 'u', 'U':
|
||||||
|
inc(endpos)
|
||||||
|
if (L.buf[endpos] == '6') and (L.buf[endpos + 1] == '4'):
|
||||||
|
result.tokType = tkUInt64Lit
|
||||||
|
inc(endpos, 2)
|
||||||
|
elif (L.buf[endpos] == '3') and (L.buf[endpos + 1] == '2'):
|
||||||
|
result.tokType = tkUInt32Lit
|
||||||
|
inc(endpos, 2)
|
||||||
|
elif (L.buf[endpos] == '1') and (L.buf[endpos + 1] == '6'):
|
||||||
|
result.tokType = tkUInt16Lit
|
||||||
|
inc(endpos, 2)
|
||||||
|
elif (L.buf[endpos] == '8'):
|
||||||
|
result.tokType = tkUInt8Lit
|
||||||
|
inc(endpos)
|
||||||
|
else:
|
||||||
|
result.tokType = tkUIntLit
|
||||||
else: lexMessage(L, errInvalidNumber, result.literal & "'" & L.buf[endpos])
|
else: lexMessage(L, errInvalidNumber, result.literal & "'" & L.buf[endpos])
|
||||||
else:
|
else:
|
||||||
L.bufpos = pos # restore position
|
L.bufpos = pos # restore position
|
||||||
|
|
|
||||||
|
|
@ -53,9 +53,15 @@ proc getSysType(kind: TTypeKind): PType =
|
||||||
of tyInt16: result = sysTypeFromName("int16")
|
of tyInt16: result = sysTypeFromName("int16")
|
||||||
of tyInt32: result = sysTypeFromName("int32")
|
of tyInt32: result = sysTypeFromName("int32")
|
||||||
of tyInt64: result = sysTypeFromName("int64")
|
of tyInt64: result = sysTypeFromName("int64")
|
||||||
|
of tyUInt: result = sysTypeFromName("uint")
|
||||||
|
of tyUInt8: result = sysTypeFromName("uint8")
|
||||||
|
of tyUInt16: result = sysTypeFromName("uint16")
|
||||||
|
of tyUInt32: result = sysTypeFromName("uint32")
|
||||||
|
of tyUInt64: result = sysTypeFromName("uint64")
|
||||||
of tyFloat: result = sysTypeFromName("float")
|
of tyFloat: result = sysTypeFromName("float")
|
||||||
of tyFloat32: result = sysTypeFromName("float32")
|
of tyFloat32: result = sysTypeFromName("float32")
|
||||||
of tyFloat64: result = sysTypeFromName("float64")
|
of tyFloat64: result = sysTypeFromName("float64")
|
||||||
|
of tyFloat128: result = sysTypeFromName("float128")
|
||||||
of tyBool: result = sysTypeFromName("bool")
|
of tyBool: result = sysTypeFromName("bool")
|
||||||
of tyChar: result = sysTypeFromName("char")
|
of tyChar: result = sysTypeFromName("char")
|
||||||
of tyString: result = sysTypeFromName("string")
|
of tyString: result = sysTypeFromName("string")
|
||||||
|
|
|
||||||
|
|
@ -416,6 +416,26 @@ proc identOrLiteral(p: var TParser): PNode =
|
||||||
result = newIntNodeP(nkInt64Lit, p.tok.iNumber, p)
|
result = newIntNodeP(nkInt64Lit, p.tok.iNumber, p)
|
||||||
setBaseFlags(result, p.tok.base)
|
setBaseFlags(result, p.tok.base)
|
||||||
getTok(p)
|
getTok(p)
|
||||||
|
of tkUIntLit:
|
||||||
|
result = newIntNodeP(nkUIntLit, p.tok.iNumber, p)
|
||||||
|
setBaseFlags(result, p.tok.base)
|
||||||
|
getTok(p)
|
||||||
|
of tkUInt8Lit:
|
||||||
|
result = newIntNodeP(nkUInt8Lit, p.tok.iNumber, p)
|
||||||
|
setBaseFlags(result, p.tok.base)
|
||||||
|
getTok(p)
|
||||||
|
of tkUInt16Lit:
|
||||||
|
result = newIntNodeP(nkUInt16Lit, p.tok.iNumber, p)
|
||||||
|
setBaseFlags(result, p.tok.base)
|
||||||
|
getTok(p)
|
||||||
|
of tkUInt32Lit:
|
||||||
|
result = newIntNodeP(nkUInt32Lit, p.tok.iNumber, p)
|
||||||
|
setBaseFlags(result, p.tok.base)
|
||||||
|
getTok(p)
|
||||||
|
of tkUInt64Lit:
|
||||||
|
result = newIntNodeP(nkUInt64Lit, p.tok.iNumber, p)
|
||||||
|
setBaseFlags(result, p.tok.base)
|
||||||
|
getTok(p)
|
||||||
of tkFloatLit:
|
of tkFloatLit:
|
||||||
result = newFloatNodeP(nkFloatLit, p.tok.fNumber, p)
|
result = newFloatNodeP(nkFloatLit, p.tok.fNumber, p)
|
||||||
setBaseFlags(result, p.tok.base)
|
setBaseFlags(result, p.tok.base)
|
||||||
|
|
@ -428,6 +448,10 @@ proc identOrLiteral(p: var TParser): PNode =
|
||||||
result = newFloatNodeP(nkFloat64Lit, p.tok.fNumber, p)
|
result = newFloatNodeP(nkFloat64Lit, p.tok.fNumber, p)
|
||||||
setBaseFlags(result, p.tok.base)
|
setBaseFlags(result, p.tok.base)
|
||||||
getTok(p)
|
getTok(p)
|
||||||
|
of tkFloat128Lit:
|
||||||
|
result = newFloatNodeP(nkFloat128Lit, p.tok.fNumber, p)
|
||||||
|
setBaseFlags(result, p.tok.base)
|
||||||
|
getTok(p)
|
||||||
of tkStrLit:
|
of tkStrLit:
|
||||||
result = newStrNodeP(nkStrLit, p.tok.literal, p)
|
result = newStrNodeP(nkStrLit, p.tok.literal, p)
|
||||||
getTok(p)
|
getTok(p)
|
||||||
|
|
|
||||||
|
|
@ -705,9 +705,15 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) =
|
||||||
of nkInt16Lit: put(g, tkInt16Lit, atom(n))
|
of nkInt16Lit: put(g, tkInt16Lit, atom(n))
|
||||||
of nkInt32Lit: put(g, tkInt32Lit, atom(n))
|
of nkInt32Lit: put(g, tkInt32Lit, atom(n))
|
||||||
of nkInt64Lit: put(g, tkInt64Lit, atom(n))
|
of nkInt64Lit: put(g, tkInt64Lit, atom(n))
|
||||||
|
of nkUIntLit: put(g, tkUIntLit, atom(n))
|
||||||
|
of nkUInt8Lit: put(g, tkUInt8Lit, atom(n))
|
||||||
|
of nkUInt16Lit: put(g, tkUInt16Lit, atom(n))
|
||||||
|
of nkUInt32Lit: put(g, tkUInt32Lit, atom(n))
|
||||||
|
of nkUInt64Lit: put(g, tkUInt64Lit, atom(n))
|
||||||
of nkFloatLit: put(g, tkFloatLit, atom(n))
|
of nkFloatLit: put(g, tkFloatLit, atom(n))
|
||||||
of nkFloat32Lit: put(g, tkFloat32Lit, atom(n))
|
of nkFloat32Lit: put(g, tkFloat32Lit, atom(n))
|
||||||
of nkFloat64Lit: put(g, tkFloat64Lit, atom(n))
|
of nkFloat64Lit: put(g, tkFloat64Lit, atom(n))
|
||||||
|
of nkFloat128Lit: put(g, tkFloat128Lit, atom(n))
|
||||||
of nkStrLit: put(g, tkStrLit, atom(n))
|
of nkStrLit: put(g, tkStrLit, atom(n))
|
||||||
of nkRStrLit: put(g, tkRStrLit, atom(n))
|
of nkRStrLit: put(g, tkRStrLit, atom(n))
|
||||||
of nkCharLit: put(g, tkCharLit, atom(n))
|
of nkCharLit: put(g, tkCharLit, atom(n))
|
||||||
|
|
|
||||||
|
|
@ -132,10 +132,10 @@ proc checkConversionBetweenObjects(info: TLineInfo, castDest, src: PType) =
|
||||||
|
|
||||||
proc checkConvertible(info: TLineInfo, castDest, src: PType) =
|
proc checkConvertible(info: TLineInfo, castDest, src: PType) =
|
||||||
const
|
const
|
||||||
IntegralTypes = {tyBool, tyEnum, tyChar, tyInt..tyFloat128}
|
IntegralTypes = {tyBool, tyEnum, tyChar, tyInt..tyUInt64}
|
||||||
if sameType(castDest, src) and castDest.sym == src.sym:
|
if sameType(castDest, src) and castDest.sym == src.sym:
|
||||||
# don't annoy conversions that may be needed on another processor:
|
# don't annoy conversions that may be needed on another processor:
|
||||||
if not (castDest.kind in {tyInt..tyFloat128, tyNil}):
|
if not (castDest.kind in {tyInt..tyUInt64, tyNil}):
|
||||||
Message(info, hintConvFromXtoItselfNotNeeded, typeToString(castDest))
|
Message(info, hintConvFromXtoItselfNotNeeded, typeToString(castDest))
|
||||||
return
|
return
|
||||||
var d = skipTypes(castDest, abstractVar)
|
var d = skipTypes(castDest, abstractVar)
|
||||||
|
|
@ -1283,6 +1283,20 @@ proc semMacroStmt(c: PContext, n: PNode, semCheck = true): PNode =
|
||||||
GlobalError(n.info, errInvalidExpressionX,
|
GlobalError(n.info, errInvalidExpressionX,
|
||||||
renderTree(a, {renderNoComments}))
|
renderTree(a, {renderNoComments}))
|
||||||
|
|
||||||
|
proc litIntType(kind: TTypeKind): PType =
|
||||||
|
result = getSysType(kind).copyType(getCurrOwner(), true)
|
||||||
|
result.flags.incl(tfLiteral)
|
||||||
|
|
||||||
|
template memoize(e: expr): expr =
|
||||||
|
var `*guard` {.global.} = false
|
||||||
|
var `*memo` {.global.} : type(e)
|
||||||
|
|
||||||
|
if not `*guard`:
|
||||||
|
`*memo` = e
|
||||||
|
`*guard` = true
|
||||||
|
|
||||||
|
`*memo`
|
||||||
|
|
||||||
proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
|
proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
|
||||||
result = n
|
result = n
|
||||||
if gCmd == cmdIdeTools: suggestExpr(c, n)
|
if gCmd == cmdIdeTools: suggestExpr(c, n)
|
||||||
|
|
@ -1303,9 +1317,9 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
|
||||||
if result.typ == nil:
|
if result.typ == nil:
|
||||||
let i = result.intVal
|
let i = result.intVal
|
||||||
if i >= low(int32) and i <= high(int32):
|
if i >= low(int32) and i <= high(int32):
|
||||||
result.typ = getSysType(tyInt)
|
result.typ = litIntType(tyInt).memoize
|
||||||
else:
|
else:
|
||||||
result.typ = getSysType(tyInt64)
|
result.typ = litIntType(tyInt64).memoize
|
||||||
of nkInt8Lit:
|
of nkInt8Lit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyInt8)
|
if result.typ == nil: result.typ = getSysType(tyInt8)
|
||||||
of nkInt16Lit:
|
of nkInt16Lit:
|
||||||
|
|
@ -1314,12 +1328,24 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
|
||||||
if result.typ == nil: result.typ = getSysType(tyInt32)
|
if result.typ == nil: result.typ = getSysType(tyInt32)
|
||||||
of nkInt64Lit:
|
of nkInt64Lit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyInt64)
|
if result.typ == nil: result.typ = getSysType(tyInt64)
|
||||||
|
of nkUIntLit:
|
||||||
|
if result.typ == nil: result.typ = getSysType(tyUInt)
|
||||||
|
of nkUInt8Lit:
|
||||||
|
if result.typ == nil: result.typ = getSysType(tyUInt8)
|
||||||
|
of nkUInt16Lit:
|
||||||
|
if result.typ == nil: result.typ = getSysType(tyUInt16)
|
||||||
|
of nkUInt32Lit:
|
||||||
|
if result.typ == nil: result.typ = getSysType(tyUInt32)
|
||||||
|
of nkUInt64Lit:
|
||||||
|
if result.typ == nil: result.typ = getSysType(tyUInt64)
|
||||||
of nkFloatLit:
|
of nkFloatLit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyFloat)
|
if result.typ == nil: result.typ = getSysType(tyFloat)
|
||||||
of nkFloat32Lit:
|
of nkFloat32Lit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyFloat32)
|
if result.typ == nil: result.typ = getSysType(tyFloat32)
|
||||||
of nkFloat64Lit:
|
of nkFloat64Lit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyFloat64)
|
if result.typ == nil: result.typ = getSysType(tyFloat64)
|
||||||
|
of nkFloat128Lit:
|
||||||
|
if result.typ == nil: result.typ = getSysType(tyFloat128)
|
||||||
of nkStrLit..nkTripleStrLit:
|
of nkStrLit..nkTripleStrLit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyString)
|
if result.typ == nil: result.typ = getSysType(tyString)
|
||||||
of nkCharLit:
|
of nkCharLit:
|
||||||
|
|
|
||||||
|
|
@ -258,15 +258,15 @@ proc partialOrExpr(c: PSym, n: PNode): PNode =
|
||||||
proc leValueConv(a, b: PNode): bool =
|
proc leValueConv(a, b: PNode): bool =
|
||||||
result = false
|
result = false
|
||||||
case a.kind
|
case a.kind
|
||||||
of nkCharLit..nkInt64Lit:
|
of nkCharLit..nkUInt64Lit:
|
||||||
case b.kind
|
case b.kind
|
||||||
of nkCharLit..nkInt64Lit: result = a.intVal <= b.intVal
|
of nkCharLit..nkUInt64Lit: result = a.intVal <= b.intVal
|
||||||
of nkFloatLit..nkFloat64Lit: result = a.intVal <= round(b.floatVal)
|
of nkFloatLit..nkFloat128Lit: result = a.intVal <= round(b.floatVal)
|
||||||
else: InternalError(a.info, "leValueConv")
|
else: InternalError(a.info, "leValueConv")
|
||||||
of nkFloatLit..nkFloat64Lit:
|
of nkFloatLit..nkFloat128Lit:
|
||||||
case b.kind
|
case b.kind
|
||||||
of nkFloatLit..nkFloat64Lit: result = a.floatVal <= b.floatVal
|
of nkFloatLit..nkFloat128Lit: result = a.floatVal <= b.floatVal
|
||||||
of nkCharLit..nkInt64Lit: result = a.floatVal <= toFloat(int(b.intVal))
|
of nkCharLit..nkUInt64Lit: result = a.floatVal <= toFloat(int(b.intVal))
|
||||||
else: InternalError(a.info, "leValueConv")
|
else: InternalError(a.info, "leValueConv")
|
||||||
else: InternalError(a.info, "leValueConv")
|
else: InternalError(a.info, "leValueConv")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -822,9 +822,15 @@ proc processMagicType(c: PContext, m: PSym) =
|
||||||
of mInt16: setMagicType(m, tyInt16, 2)
|
of mInt16: setMagicType(m, tyInt16, 2)
|
||||||
of mInt32: setMagicType(m, tyInt32, 4)
|
of mInt32: setMagicType(m, tyInt32, 4)
|
||||||
of mInt64: setMagicType(m, tyInt64, 8)
|
of mInt64: setMagicType(m, tyInt64, 8)
|
||||||
|
of mUInt: setMagicType(m, tyUInt, intSize)
|
||||||
|
of mUInt8: setMagicType(m, tyUInt8, 1)
|
||||||
|
of mUInt16: setMagicType(m, tyUInt16, 2)
|
||||||
|
of mUInt32: setMagicType(m, tyUInt32, 4)
|
||||||
|
of mUInt64: setMagicType(m, tyUInt64, 8)
|
||||||
of mFloat: setMagicType(m, tyFloat, floatSize)
|
of mFloat: setMagicType(m, tyFloat, floatSize)
|
||||||
of mFloat32: setMagicType(m, tyFloat32, 4)
|
of mFloat32: setMagicType(m, tyFloat32, 4)
|
||||||
of mFloat64: setMagicType(m, tyFloat64, 8)
|
of mFloat64: setMagicType(m, tyFloat64, 8)
|
||||||
|
of mFloat128: setMagicType(m, tyFloat128, 16)
|
||||||
of mBool: setMagicType(m, tyBool, 1)
|
of mBool: setMagicType(m, tyBool, 1)
|
||||||
of mChar: setMagicType(m, tyChar, 1)
|
of mChar: setMagicType(m, tyChar, 1)
|
||||||
of mString:
|
of mString:
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,9 @@ proc handleRange(f, a: PType, min, max: TTypeKind): TTypeRelation =
|
||||||
var k = skipTypes(a, {tyRange}).kind
|
var k = skipTypes(a, {tyRange}).kind
|
||||||
if k == f.kind: result = isSubtype
|
if k == f.kind: result = isSubtype
|
||||||
elif f.kind == tyInt and k in {tyInt..tyInt32}: result = isIntConv
|
elif f.kind == tyInt and k in {tyInt..tyInt32}: result = isIntConv
|
||||||
|
elif f.kind == tyUInt and k in {tyUInt..tyUInt32}: result = isIntConv
|
||||||
|
elif f.kind in {tyUInt..tyUInt64} and k == tyInt and tfLiteral in a.flags:
|
||||||
|
result = isIntConv
|
||||||
elif k >= min and k <= max: result = isConvertible
|
elif k >= min and k <= max: result = isConvertible
|
||||||
else: result = isNone
|
else: result = isNone
|
||||||
|
|
||||||
|
|
@ -306,6 +309,11 @@ proc typeRel(mapping: var TIdTable, f, a: PType): TTypeRelation =
|
||||||
of tyInt16: result = handleRange(f, a, tyInt8, tyInt16)
|
of tyInt16: result = handleRange(f, a, tyInt8, tyInt16)
|
||||||
of tyInt32: result = handleRange(f, a, tyInt, tyInt32)
|
of tyInt32: result = handleRange(f, a, tyInt, tyInt32)
|
||||||
of tyInt64: result = handleRange(f, a, tyInt, tyInt64)
|
of tyInt64: result = handleRange(f, a, tyInt, tyInt64)
|
||||||
|
of tyUInt: result = handleRange(f, a, tyUInt8, tyUInt32)
|
||||||
|
of tyUInt8: result = handleRange(f, a, tyUInt8, tyUInt8)
|
||||||
|
of tyUInt16: result = handleRange(f, a, tyUInt8, tyUInt16)
|
||||||
|
of tyUInt32: result = handleRange(f, a, tyUInt, tyUInt32)
|
||||||
|
of tyUInt64: result = handleRange(f, a, tyUInt, tyUInt64)
|
||||||
of tyFloat: result = handleFloatRange(f, a)
|
of tyFloat: result = handleFloatRange(f, a)
|
||||||
of tyFloat32: result = handleFloatRange(f, a)
|
of tyFloat32: result = handleFloatRange(f, a)
|
||||||
of tyFloat64: result = handleFloatRange(f, a)
|
of tyFloat64: result = handleFloatRange(f, a)
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ proc skipTypes(t: PType, kinds: TTypeKinds): PType =
|
||||||
|
|
||||||
proc isOrdinalType(t: PType): bool =
|
proc isOrdinalType(t: PType): bool =
|
||||||
assert(t != nil)
|
assert(t != nil)
|
||||||
result = (t.Kind in {tyChar, tyInt..tyInt64, tyBool, tyEnum}) or
|
result = (t.Kind in {tyChar, tyInt..tyInt64, tyUInt..tyUInt64, tyBool, tyEnum}) or
|
||||||
(t.Kind in {tyRange, tyOrdinal, tyConst, tyMutable, tyGenericInst}) and
|
(t.Kind in {tyRange, tyOrdinal, tyConst, tyMutable, tyGenericInst}) and
|
||||||
isOrdinalType(t.sons[0])
|
isOrdinalType(t.sons[0])
|
||||||
|
|
||||||
|
|
@ -386,10 +386,11 @@ proc TypeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
|
||||||
"GenericInvokation", "GenericBody", "GenericInst", "GenericParam",
|
"GenericInvokation", "GenericBody", "GenericInst", "GenericParam",
|
||||||
"distinct $1", "enum", "ordinal[$1]", "array[$1, $2]", "object", "tuple",
|
"distinct $1", "enum", "ordinal[$1]", "array[$1, $2]", "object", "tuple",
|
||||||
"set[$1]", "range[$1]", "ptr ", "ref ", "var ", "seq[$1]", "proc",
|
"set[$1]", "range[$1]", "ptr ", "ref ", "var ", "seq[$1]", "proc",
|
||||||
"pointer", "OpenArray[$1]", "string", "CString", "Forward", "int", "int8",
|
"pointer", "OpenArray[$1]", "string", "CString", "Forward",
|
||||||
"int16", "int32", "int64", "float", "float32", "float64", "float128",
|
"int", "int8", "int16", "int32", "int64",
|
||||||
|
"float", "float32", "float64", "float128",
|
||||||
"uint", "uint8", "uint16", "uint32", "uint64", "bignum", "const ",
|
"uint", "uint8", "uint16", "uint32", "uint64",
|
||||||
|
"bignum", "const ",
|
||||||
"!", "varargs[$1]", "iter[$1]", "proxy[$1]", "TypeClass" ]
|
"!", "varargs[$1]", "iter[$1]", "proxy[$1]", "TypeClass" ]
|
||||||
var t = typ
|
var t = typ
|
||||||
result = ""
|
result = ""
|
||||||
|
|
@ -494,6 +495,7 @@ proc firstOrd(t: PType): biggestInt =
|
||||||
of tyInt16: result = - 32768
|
of tyInt16: result = - 32768
|
||||||
of tyInt32: result = - 2147483646 - 2
|
of tyInt32: result = - 2147483646 - 2
|
||||||
of tyInt64: result = 0x8000000000000000'i64
|
of tyInt64: result = 0x8000000000000000'i64
|
||||||
|
of tyUInt..tyUInt64: result = 0
|
||||||
of tyEnum:
|
of tyEnum:
|
||||||
# if basetype <> nil then return firstOrd of basetype
|
# if basetype <> nil then return firstOrd of basetype
|
||||||
if (sonsLen(t) > 0) and (t.sons[0] != nil):
|
if (sonsLen(t) > 0) and (t.sons[0] != nil):
|
||||||
|
|
@ -524,6 +526,13 @@ proc lastOrd(t: PType): biggestInt =
|
||||||
of tyInt16: result = 0x00007FFF
|
of tyInt16: result = 0x00007FFF
|
||||||
of tyInt32: result = 0x7FFFFFFF
|
of tyInt32: result = 0x7FFFFFFF
|
||||||
of tyInt64: result = 0x7FFFFFFFFFFFFFFF'i64
|
of tyInt64: result = 0x7FFFFFFFFFFFFFFF'i64
|
||||||
|
of tyUInt:
|
||||||
|
if platform.intSize == 4: result = 0xFFFFFFFF
|
||||||
|
else: result = 0x7FFFFFFFFFFFFFFF'i64
|
||||||
|
of tyUInt8: result = 0x7F # XXX: Fix these
|
||||||
|
of tyUInt16: result = 0x7FFF
|
||||||
|
of tyUInt32: result = 0x7FFFFFFF
|
||||||
|
of tyUInt64: result = 0x7FFFFFFFFFFFFFFF'i64
|
||||||
of tyEnum:
|
of tyEnum:
|
||||||
assert(t.n.sons[sonsLen(t.n) - 1].kind == nkSym)
|
assert(t.n.sons[sonsLen(t.n) - 1].kind == nkSym)
|
||||||
result = t.n.sons[sonsLen(t.n) - 1].sym.position
|
result = t.n.sons[sonsLen(t.n) - 1].sym.position
|
||||||
|
|
@ -980,6 +989,9 @@ proc computeSizeAux(typ: PType, a: var biggestInt): biggestInt =
|
||||||
of tyInt64, tyUInt64, tyFloat64:
|
of tyInt64, tyUInt64, tyFloat64:
|
||||||
result = 8
|
result = 8
|
||||||
a = result
|
a = result
|
||||||
|
of tyFloat128:
|
||||||
|
result = 16
|
||||||
|
a = result
|
||||||
of tyFloat:
|
of tyFloat:
|
||||||
result = floatSize
|
result = floatSize
|
||||||
a = result
|
a = result
|
||||||
|
|
|
||||||
845
install.sh
845
install.sh
File diff suppressed because it is too large
Load diff
|
|
@ -17,8 +17,9 @@ type
|
||||||
TNimrodNodeKind* = enum
|
TNimrodNodeKind* = enum
|
||||||
nnkNone, nnkEmpty, nnkIdent, nnkSym,
|
nnkNone, nnkEmpty, nnkIdent, nnkSym,
|
||||||
nnkType, nnkCharLit, nnkIntLit, nnkInt8Lit,
|
nnkType, nnkCharLit, nnkIntLit, nnkInt8Lit,
|
||||||
nnkInt16Lit, nnkInt32Lit, nnkInt64Lit, nnkFloatLit,
|
nnkInt16Lit, nnkInt32Lit, nnkInt64Lit, nnkUIntLit, nnkUInt8Lit,
|
||||||
nnkFloat32Lit, nnkFloat64Lit, nnkStrLit, nnkRStrLit,
|
nnkUInt16Lit, nnkUInt32Lit, nnkUInt64Lit, nnkFloatLit,
|
||||||
|
nnkFloat32Lit, nnkFloat64Lit, nnkFloat128Lit, nnkStrLit, nnkRStrLit,
|
||||||
nnkTripleStrLit, nnkNilLit, nnkMetaNode, nnkDotCall,
|
nnkTripleStrLit, nnkNilLit, nnkMetaNode, nnkDotCall,
|
||||||
nnkCommand, nnkCall, nnkCallStrLit, nnkExprEqExpr,
|
nnkCommand, nnkCall, nnkCallStrLit, nnkExprEqExpr,
|
||||||
nnkExprColonExpr, nnkIdentDefs, nnkVarTuple, nnkInfix,
|
nnkExprColonExpr, nnkIdentDefs, nnkVarTuple, nnkInfix,
|
||||||
|
|
|
||||||
114
lib/system.nim
114
lib/system.nim
|
|
@ -21,9 +21,15 @@ type
|
||||||
int16* {.magic: Int16.} ## signed 16 bit integer type
|
int16* {.magic: Int16.} ## signed 16 bit integer type
|
||||||
int32* {.magic: Int32.} ## signed 32 bit integer type
|
int32* {.magic: Int32.} ## signed 32 bit integer type
|
||||||
int64* {.magic: Int64.} ## signed 64 bit integer type
|
int64* {.magic: Int64.} ## signed 64 bit integer type
|
||||||
|
uint* {.magic: UInt.} ## unsigned default integer type
|
||||||
|
uint8* {.magic: UInt8.} ## unsigned 8 bit integer type
|
||||||
|
uint16* {.magic: UInt16.} ## unsigned 16 bit integer type
|
||||||
|
uint32* {.magic: UInt32.} ## unsigned 32 bit integer type
|
||||||
|
uint64* {.magic: UInt64.} ## unsigned 64 bit integer type
|
||||||
float* {.magic: Float.} ## default floating point type
|
float* {.magic: Float.} ## default floating point type
|
||||||
float32* {.magic: Float32.} ## 32 bit floating point type
|
float32* {.magic: Float32.} ## 32 bit floating point type
|
||||||
float64* {.magic: Float64.} ## 64 bit floating point type
|
float64* {.magic: Float64.} ## 64 bit floating point type
|
||||||
|
|
||||||
type # we need to start a new type section here, so that ``0`` can have a type
|
type # we need to start a new type section here, so that ``0`` can have a type
|
||||||
bool* {.magic: Bool.} = enum ## built-in boolean type
|
bool* {.magic: Bool.} = enum ## built-in boolean type
|
||||||
false = 0, true = 1
|
false = 0, true = 1
|
||||||
|
|
@ -49,14 +55,23 @@ type
|
||||||
## a type description (for templates)
|
## a type description (for templates)
|
||||||
void* {.magic: "VoidType".} ## meta type to denote the absense of any type
|
void* {.magic: "VoidType".} ## meta type to denote the absense of any type
|
||||||
|
|
||||||
TInteger* = int|int8|int16|int32|int64
|
TSignedInt* = distinct int|int8|int16|int32|int64
|
||||||
|
## type class matching all signed integer types
|
||||||
|
|
||||||
|
TUnsignedInt* = distinct uint|uint8|uint16|uint32|uint64
|
||||||
|
## type class matching all unsigned integer types
|
||||||
|
|
||||||
|
TInteger* = distinct TSignedInt|TUnsignedInt
|
||||||
## type class matching all integer types
|
## type class matching all integer types
|
||||||
|
|
||||||
TOrdinal* = TInteger|bool|enum
|
TOrdinal* = distinct TInteger|bool|enum
|
||||||
## type class matching all ordinal types; however this includes enums with
|
## type class matching all ordinal types; however this includes enums with
|
||||||
## holes.
|
## holes.
|
||||||
|
|
||||||
TNumber* = TInteger|float|float32|float64
|
TReal* = distinct float|float32|float64
|
||||||
|
## type class matching all floating point number types
|
||||||
|
|
||||||
|
TNumber* = distinct TInteger|TReal
|
||||||
## type class matching all number types
|
## type class matching all number types
|
||||||
|
|
||||||
proc defined*(x: expr): bool {.magic: "Defined", noSideEffect.}
|
proc defined*(x: expr): bool {.magic: "Defined", noSideEffect.}
|
||||||
|
|
@ -517,65 +532,88 @@ proc abs*(x: int64): int64 {.magic: "AbsI64", noSideEffect.}
|
||||||
## is -MININT for its type), an overflow exception is thrown (if overflow
|
## is -MININT for its type), an overflow exception is thrown (if overflow
|
||||||
## checking is turned on).
|
## checking is turned on).
|
||||||
|
|
||||||
proc `+%` *(x, y: int): int {.magic: "AddU", noSideEffect.}
|
type
|
||||||
proc `+%` *(x, y: int8): int8 {.magic: "AddU", noSideEffect.}
|
UIntMax32 = distinct uint|uint8|uint16|uint32
|
||||||
proc `+%` *(x, y: int16): int16 {.magic: "AddU", noSideEffect.}
|
IntMax32 = distinct int|int8|int16|int32
|
||||||
proc `+%` *(x, y: int32): int32 {.magic: "AddU", noSideEffect.}
|
|
||||||
proc `+%` *(x, y: int64): int64 {.magic: "AddU64", noSideEffect.}
|
proc `+` *(x, y: UIntMax32): UIntMax32 {.magic: "AddU", noSideEffect.}
|
||||||
|
proc `+` *(x, y: UInt64): uint64 {.magic: "AddU64", noSideEffect.}
|
||||||
|
## Binary `+` operator for unsigned integers.
|
||||||
|
|
||||||
|
proc `+%` *(x, y: IntMax32): IntMax32 {.magic: "AddU", noSideEffect.}
|
||||||
|
proc `+%` *(x, y: Int64): Int64 {.magic: "AddU64", noSideEffect.}
|
||||||
## treats `x` and `y` as unsigned and adds them. The result is truncated to
|
## treats `x` and `y` as unsigned and adds them. The result is truncated to
|
||||||
## fit into the result. This implements modulo arithmetic. No overflow
|
## fit into the result. This implements modulo arithmetic. No overflow
|
||||||
## errors are possible.
|
## errors are possible.
|
||||||
|
|
||||||
proc `-%` *(x, y: int): int {.magic: "SubU", noSideEffect.}
|
proc `-` *(x, y: UIntMax32): UIntMax32 {.magic: "SubU", noSideEffect.}
|
||||||
proc `-%` *(x, y: int8): int8 {.magic: "SubU", noSideEffect.}
|
proc `-` *(x, y: UInt64): UInt64 {.magic: "SubU64", noSideEffect.}
|
||||||
proc `-%` *(x, y: int16): int16 {.magic: "SubU", noSideEffect.}
|
## Binary `-` operator for unsigned integers.
|
||||||
proc `-%` *(x, y: int32): int32 {.magic: "SubU", noSideEffect.}
|
|
||||||
proc `-%` *(x, y: int64): int64 {.magic: "SubU64", noSideEffect.}
|
proc `-%` *(x, y: IntMax32): IntMax32 {.magic: "SubU", noSideEffect.}
|
||||||
|
proc `-%` *(x, y: Int64): Int64 {.magic: "SubU64", noSideEffect.}
|
||||||
## treats `x` and `y` as unsigned and subtracts them. The result is
|
## treats `x` and `y` as unsigned and subtracts them. The result is
|
||||||
## truncated to fit into the result. This implements modulo arithmetic.
|
## truncated to fit into the result. This implements modulo arithmetic.
|
||||||
## No overflow errors are possible.
|
## No overflow errors are possible.
|
||||||
|
|
||||||
proc `*%` *(x, y: int): int {.magic: "MulU", noSideEffect.}
|
proc `*` *(x, y: UIntMax32): UIntMax32 {.magic: "MulU", noSideEffect.}
|
||||||
proc `*%` *(x, y: int8): int8 {.magic: "MulU", noSideEffect.}
|
proc `*` *(x, y: UInt64): UInt64 {.magic: "MulU64", noSideEffect.}
|
||||||
proc `*%` *(x, y: int16): int16 {.magic: "MulU", noSideEffect.}
|
## Binary `*` operator for unsigned integers.
|
||||||
proc `*%` *(x, y: int32): int32 {.magic: "MulU", noSideEffect.}
|
|
||||||
proc `*%` *(x, y: int64): int64 {.magic: "MulU64", noSideEffect.}
|
proc `*%` *(x, y: IntMax32): IntMax32 {.magic: "MulU", noSideEffect.}
|
||||||
|
proc `*%` *(x, y: Int64): Int64 {.magic: "MulU64", noSideEffect.}
|
||||||
## treats `x` and `y` as unsigned and multiplies them. The result is
|
## treats `x` and `y` as unsigned and multiplies them. The result is
|
||||||
## truncated to fit into the result. This implements modulo arithmetic.
|
## truncated to fit into the result. This implements modulo arithmetic.
|
||||||
## No overflow errors are possible.
|
## No overflow errors are possible.
|
||||||
|
|
||||||
proc `/%` *(x, y: int): int {.magic: "DivU", noSideEffect.}
|
proc `div` *(x, y: UIntMax32): UIntMax32 {.magic: "DivU", noSideEffect.}
|
||||||
proc `/%` *(x, y: int8): int8 {.magic: "DivU", noSideEffect.}
|
proc `div` *(x, y: UInt64): UInt64 {.magic: "DivU64", noSideEffect.}
|
||||||
proc `/%` *(x, y: int16): int16 {.magic: "DivU", noSideEffect.}
|
## computes the integer division. This is roughly the same as
|
||||||
proc `/%` *(x, y: int32): int32 {.magic: "DivU", noSideEffect.}
|
## ``floor(x/y)``.
|
||||||
proc `/%` *(x, y: int64): int64 {.magic: "DivU64", noSideEffect.}
|
|
||||||
|
proc `/` *(x, y: UIntMax32): UIntMax32 {.magic: "DivU", noSideEffect.}
|
||||||
|
proc `/` *(x, y: UInt64): UInt64 {.magic: "DivU64", noSideEffect.}
|
||||||
|
## computes the integer division. This is roughly the same as
|
||||||
|
## ``floor(x/y)``.
|
||||||
|
|
||||||
|
proc `/%` *(x, y: IntMax32): IntMax32 {.magic: "DivU", noSideEffect.}
|
||||||
|
proc `/%` *(x, y: Int64): Int64 {.magic: "DivU64", noSideEffect.}
|
||||||
## treats `x` and `y` as unsigned and divides them. The result is
|
## treats `x` and `y` as unsigned and divides them. The result is
|
||||||
## truncated to fit into the result. This implements modulo arithmetic.
|
## truncated to fit into the result. This implements modulo arithmetic.
|
||||||
## No overflow errors are possible.
|
## No overflow errors are possible.
|
||||||
|
|
||||||
proc `%%` *(x, y: int): int {.magic: "ModU", noSideEffect.}
|
proc `%` *(x, y: UIntMax32): UIntMax32 {.magic: "DivU", noSideEffect.}
|
||||||
proc `%%` *(x, y: int8): int8 {.magic: "ModU", noSideEffect.}
|
proc `%` *(x, y: UInt64): UInt64 {.magic: "DivU64", noSideEffect.}
|
||||||
proc `%%` *(x, y: int16): int16 {.magic: "ModU", noSideEffect.}
|
## computes the integer modulo operation. This is the same as
|
||||||
proc `%%` *(x, y: int32): int32 {.magic: "ModU", noSideEffect.}
|
## ``x - (x div y) * y``.
|
||||||
proc `%%` *(x, y: int64): int64 {.magic: "ModU64", noSideEffect.}
|
|
||||||
|
proc `mod` *(x, y: UIntMax32): UIntMax32 {.magic: "DivU", noSideEffect.}
|
||||||
|
proc `mod` *(x, y: UInt64): UInt64 {.magic: "DivU64", noSideEffect.}
|
||||||
|
## computes the integer modulo operation. This is the same as
|
||||||
|
## ``x - (x div y) * y``.
|
||||||
|
|
||||||
|
proc `%%` *(x, y: IntMax32): IntMax32 {.magic: "ModU", noSideEffect.}
|
||||||
|
proc `%%` *(x, y: Int64): Int64 {.magic: "ModU64", noSideEffect.}
|
||||||
## treats `x` and `y` as unsigned and compute the modulo of `x` and `y`.
|
## treats `x` and `y` as unsigned and compute the modulo of `x` and `y`.
|
||||||
## The result is truncated to fit into the result.
|
## The result is truncated to fit into the result.
|
||||||
## This implements modulo arithmetic.
|
## This implements modulo arithmetic.
|
||||||
## No overflow errors are possible.
|
## No overflow errors are possible.
|
||||||
|
|
||||||
proc `<=%` *(x, y: int): bool {.magic: "LeU", noSideEffect.}
|
proc `<=` *(x, y: UIntMax32): bool {.magic: "LeU", noSideEffect.}
|
||||||
proc `<=%` *(x, y: int8): bool {.magic: "LeU", noSideEffect.}
|
proc `<=` *(x, y: UInt64): bool {.magic: "LeU64", noSideEffect.}
|
||||||
proc `<=%` *(x, y: int16): bool {.magic: "LeU", noSideEffect.}
|
## Returns true iff ``x <= y``.
|
||||||
proc `<=%` *(x, y: int32): bool {.magic: "LeU", noSideEffect.}
|
|
||||||
proc `<=%` *(x, y: int64): bool {.magic: "LeU64", noSideEffect.}
|
proc `<=%` *(x, y: IntMax32): bool {.magic: "LeU", noSideEffect.}
|
||||||
|
proc `<=%` *(x, y: Int64): bool {.magic: "LeU64", noSideEffect.}
|
||||||
## treats `x` and `y` as unsigned and compares them.
|
## treats `x` and `y` as unsigned and compares them.
|
||||||
## Returns true iff ``unsigned(x) <= unsigned(y)``.
|
## Returns true iff ``unsigned(x) <= unsigned(y)``.
|
||||||
|
|
||||||
proc `<%` *(x, y: int): bool {.magic: "LtU", noSideEffect.}
|
proc `<` *(x, y: UIntMax32): bool {.magic: "LtU", noSideEffect.}
|
||||||
proc `<%` *(x, y: int8): bool {.magic: "LtU", noSideEffect.}
|
proc `<` *(x, y: UInt64): bool {.magic: "LtU64", noSideEffect.}
|
||||||
proc `<%` *(x, y: int16): bool {.magic: "LtU", noSideEffect.}
|
## Returns true iff ``unsigned(x) < unsigned(y)``.
|
||||||
proc `<%` *(x, y: int32): bool {.magic: "LtU", noSideEffect.}
|
|
||||||
proc `<%` *(x, y: int64): bool {.magic: "LtU64", noSideEffect.}
|
proc `<%` *(x, y: IntMax32): bool {.magic: "LtU", noSideEffect.}
|
||||||
|
proc `<%` *(x, y: Int64): bool {.magic: "LtU64", noSideEffect.}
|
||||||
## treats `x` and `y` as unsigned and compares them.
|
## treats `x` and `y` as unsigned and compares them.
|
||||||
## Returns true iff ``unsigned(x) < unsigned(y)``.
|
## Returns true iff ``unsigned(x) < unsigned(y)``.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue