resolved conflicts with master
This commit is contained in:
commit
36afdca87f
22 changed files with 225 additions and 611 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -58,6 +58,7 @@ examples/cross_calculator/android/tags
|
||||||
# Generated files.
|
# Generated files.
|
||||||
/compile.json
|
/compile.json
|
||||||
/compiler/c2nim/c2nim
|
/compiler/c2nim/c2nim
|
||||||
|
/compiler/nimrod.dot
|
||||||
/compiler/pas2nim/pas2nim
|
/compiler/pas2nim/pas2nim
|
||||||
/compiler/service
|
/compiler/service
|
||||||
/examples/allany
|
/examples/allany
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nimrod Compiler
|
# The Nimrod Compiler
|
||||||
# (c) Copyright 2013 Andreas Rumpf
|
# (c) Copyright 2014 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -249,10 +249,13 @@ proc processSwitch(switch, arg: string, pass: TCmdLinePass, info: TLineInfo) =
|
||||||
expectArg(switch, arg, pass, info)
|
expectArg(switch, arg, pass, info)
|
||||||
addPath(processPath(arg), info)
|
addPath(processPath(arg), info)
|
||||||
of "babelpath":
|
of "babelpath":
|
||||||
if pass in {passCmd2, passPP}:
|
if pass in {passCmd2, passPP} and not options.gNoBabelPath:
|
||||||
expectArg(switch, arg, pass, info)
|
expectArg(switch, arg, pass, info)
|
||||||
let path = processPath(arg, notRelativeToProj=true)
|
let path = processPath(arg, notRelativeToProj=true)
|
||||||
babelPath(path, info)
|
babelpath(path, info)
|
||||||
|
of "nobabelpath":
|
||||||
|
expectNoArg(switch, arg, pass, info)
|
||||||
|
options.gNoBabelPath = true
|
||||||
of "excludepath":
|
of "excludepath":
|
||||||
expectArg(switch, arg, pass, info)
|
expectArg(switch, arg, pass, info)
|
||||||
let path = processPath(arg)
|
let path = processPath(arg)
|
||||||
|
|
|
||||||
|
|
@ -614,7 +614,7 @@ proc callCCompiler*(projectfile: string) =
|
||||||
exefile = splitFile(projectfile).name & platform.OS[targetOS].exeExt
|
exefile = splitFile(projectfile).name & platform.OS[targetOS].exeExt
|
||||||
builddll = ""
|
builddll = ""
|
||||||
if options.outFile.len > 0:
|
if options.outFile.len > 0:
|
||||||
exefile = options.outFile
|
exefile = options.outFile.expandTilde
|
||||||
if not noAbsolutePaths():
|
if not noAbsolutePaths():
|
||||||
if not exefile.isAbsolute():
|
if not exefile.isAbsolute():
|
||||||
exefile = joinPath(splitFile(projectfile).dir, exefile)
|
exefile = joinPath(splitFile(projectfile).dir, exefile)
|
||||||
|
|
|
||||||
|
|
@ -1,591 +0,0 @@
|
||||||
digraph nimrod {
|
|
||||||
times -> strutils;
|
|
||||||
os -> strutils;
|
|
||||||
os -> times;
|
|
||||||
posix -> times;
|
|
||||||
os -> posix;
|
|
||||||
nhashes -> strutils;
|
|
||||||
nstrtabs -> os;
|
|
||||||
nstrtabs -> nhashes;
|
|
||||||
nstrtabs -> strutils;
|
|
||||||
options -> os;
|
|
||||||
options -> lists;
|
|
||||||
options -> strutils;
|
|
||||||
options -> nstrtabs;
|
|
||||||
msgs -> options;
|
|
||||||
msgs -> strutils;
|
|
||||||
msgs -> os;
|
|
||||||
crc -> strutils;
|
|
||||||
platform -> strutils;
|
|
||||||
ropes -> msgs;
|
|
||||||
ropes -> strutils;
|
|
||||||
ropes -> platform;
|
|
||||||
ropes -> nhashes;
|
|
||||||
ropes -> crc;
|
|
||||||
idents -> nhashes;
|
|
||||||
idents -> strutils;
|
|
||||||
ast -> msgs;
|
|
||||||
ast -> nhashes;
|
|
||||||
ast -> nversion;
|
|
||||||
ast -> options;
|
|
||||||
ast -> strutils;
|
|
||||||
ast -> crc;
|
|
||||||
ast -> ropes;
|
|
||||||
ast -> idents;
|
|
||||||
ast -> lists;
|
|
||||||
astalgo -> ast;
|
|
||||||
astalgo -> nhashes;
|
|
||||||
astalgo -> strutils;
|
|
||||||
astalgo -> options;
|
|
||||||
astalgo -> msgs;
|
|
||||||
astalgo -> ropes;
|
|
||||||
astalgo -> idents;
|
|
||||||
condsyms -> ast;
|
|
||||||
condsyms -> astalgo;
|
|
||||||
condsyms -> msgs;
|
|
||||||
condsyms -> nhashes;
|
|
||||||
condsyms -> platform;
|
|
||||||
condsyms -> strutils;
|
|
||||||
condsyms -> idents;
|
|
||||||
hashes -> strutils;
|
|
||||||
strtabs -> os;
|
|
||||||
strtabs -> hashes;
|
|
||||||
strtabs -> strutils;
|
|
||||||
osproc -> strutils;
|
|
||||||
osproc -> os;
|
|
||||||
osproc -> strtabs;
|
|
||||||
osproc -> streams;
|
|
||||||
osproc -> posix;
|
|
||||||
extccomp -> lists;
|
|
||||||
extccomp -> ropes;
|
|
||||||
extccomp -> os;
|
|
||||||
extccomp -> strutils;
|
|
||||||
extccomp -> osproc;
|
|
||||||
extccomp -> platform;
|
|
||||||
extccomp -> condsyms;
|
|
||||||
extccomp -> options;
|
|
||||||
extccomp -> msgs;
|
|
||||||
wordrecg -> nhashes;
|
|
||||||
wordrecg -> strutils;
|
|
||||||
wordrecg -> idents;
|
|
||||||
commands -> os;
|
|
||||||
commands -> msgs;
|
|
||||||
commands -> options;
|
|
||||||
commands -> nversion;
|
|
||||||
commands -> condsyms;
|
|
||||||
commands -> strutils;
|
|
||||||
commands -> extccomp;
|
|
||||||
commands -> platform;
|
|
||||||
commands -> lists;
|
|
||||||
commands -> wordrecg;
|
|
||||||
llstream -> strutils;
|
|
||||||
lexbase -> llstream;
|
|
||||||
lexbase -> strutils;
|
|
||||||
scanner -> nhashes;
|
|
||||||
scanner -> options;
|
|
||||||
scanner -> msgs;
|
|
||||||
scanner -> strutils;
|
|
||||||
scanner -> platform;
|
|
||||||
scanner -> idents;
|
|
||||||
scanner -> lexbase;
|
|
||||||
scanner -> llstream;
|
|
||||||
scanner -> wordrecg;
|
|
||||||
nimconf -> llstream;
|
|
||||||
nimconf -> nversion;
|
|
||||||
nimconf -> commands;
|
|
||||||
nimconf -> os;
|
|
||||||
nimconf -> strutils;
|
|
||||||
nimconf -> msgs;
|
|
||||||
nimconf -> platform;
|
|
||||||
nimconf -> condsyms;
|
|
||||||
nimconf -> scanner;
|
|
||||||
nimconf -> options;
|
|
||||||
nimconf -> idents;
|
|
||||||
nimconf -> wordrecg;
|
|
||||||
pnimsyn -> llstream;
|
|
||||||
pnimsyn -> scanner;
|
|
||||||
pnimsyn -> idents;
|
|
||||||
pnimsyn -> strutils;
|
|
||||||
pnimsyn -> ast;
|
|
||||||
pnimsyn -> msgs;
|
|
||||||
pbraces -> llstream;
|
|
||||||
pbraces -> scanner;
|
|
||||||
pbraces -> idents;
|
|
||||||
pbraces -> strutils;
|
|
||||||
pbraces -> ast;
|
|
||||||
pbraces -> msgs;
|
|
||||||
pbraces -> pnimsyn;
|
|
||||||
rnimsyn -> scanner;
|
|
||||||
rnimsyn -> options;
|
|
||||||
rnimsyn -> idents;
|
|
||||||
rnimsyn -> strutils;
|
|
||||||
rnimsyn -> ast;
|
|
||||||
rnimsyn -> msgs;
|
|
||||||
rnimsyn -> lists;
|
|
||||||
filters -> llstream;
|
|
||||||
filters -> os;
|
|
||||||
filters -> wordrecg;
|
|
||||||
filters -> idents;
|
|
||||||
filters -> strutils;
|
|
||||||
filters -> ast;
|
|
||||||
filters -> astalgo;
|
|
||||||
filters -> msgs;
|
|
||||||
filters -> options;
|
|
||||||
filters -> rnimsyn;
|
|
||||||
ptmplsyn -> llstream;
|
|
||||||
ptmplsyn -> os;
|
|
||||||
ptmplsyn -> wordrecg;
|
|
||||||
ptmplsyn -> idents;
|
|
||||||
ptmplsyn -> strutils;
|
|
||||||
ptmplsyn -> ast;
|
|
||||||
ptmplsyn -> astalgo;
|
|
||||||
ptmplsyn -> msgs;
|
|
||||||
ptmplsyn -> options;
|
|
||||||
ptmplsyn -> rnimsyn;
|
|
||||||
ptmplsyn -> filters;
|
|
||||||
syntaxes -> strutils;
|
|
||||||
syntaxes -> llstream;
|
|
||||||
syntaxes -> ast;
|
|
||||||
syntaxes -> astalgo;
|
|
||||||
syntaxes -> idents;
|
|
||||||
syntaxes -> scanner;
|
|
||||||
syntaxes -> options;
|
|
||||||
syntaxes -> msgs;
|
|
||||||
syntaxes -> pnimsyn;
|
|
||||||
syntaxes -> pbraces;
|
|
||||||
syntaxes -> ptmplsyn;
|
|
||||||
syntaxes -> filters;
|
|
||||||
syntaxes -> rnimsyn;
|
|
||||||
paslex -> nhashes;
|
|
||||||
paslex -> options;
|
|
||||||
paslex -> msgs;
|
|
||||||
paslex -> strutils;
|
|
||||||
paslex -> platform;
|
|
||||||
paslex -> idents;
|
|
||||||
paslex -> lexbase;
|
|
||||||
paslex -> wordrecg;
|
|
||||||
paslex -> scanner;
|
|
||||||
pasparse -> os;
|
|
||||||
pasparse -> llstream;
|
|
||||||
pasparse -> scanner;
|
|
||||||
pasparse -> paslex;
|
|
||||||
pasparse -> idents;
|
|
||||||
pasparse -> wordrecg;
|
|
||||||
pasparse -> strutils;
|
|
||||||
pasparse -> ast;
|
|
||||||
pasparse -> astalgo;
|
|
||||||
pasparse -> msgs;
|
|
||||||
pasparse -> options;
|
|
||||||
rodread -> os;
|
|
||||||
rodread -> options;
|
|
||||||
rodread -> strutils;
|
|
||||||
rodread -> nversion;
|
|
||||||
rodread -> ast;
|
|
||||||
rodread -> astalgo;
|
|
||||||
rodread -> msgs;
|
|
||||||
rodread -> platform;
|
|
||||||
rodread -> condsyms;
|
|
||||||
rodread -> ropes;
|
|
||||||
rodread -> idents;
|
|
||||||
rodread -> crc;
|
|
||||||
trees -> ast;
|
|
||||||
trees -> astalgo;
|
|
||||||
trees -> scanner;
|
|
||||||
trees -> msgs;
|
|
||||||
trees -> strutils;
|
|
||||||
types -> ast;
|
|
||||||
types -> astalgo;
|
|
||||||
types -> trees;
|
|
||||||
types -> msgs;
|
|
||||||
types -> strutils;
|
|
||||||
types -> platform;
|
|
||||||
magicsys -> ast;
|
|
||||||
magicsys -> astalgo;
|
|
||||||
magicsys -> nhashes;
|
|
||||||
magicsys -> msgs;
|
|
||||||
magicsys -> platform;
|
|
||||||
magicsys -> nversion;
|
|
||||||
magicsys -> times;
|
|
||||||
magicsys -> idents;
|
|
||||||
magicsys -> rodread;
|
|
||||||
nimsets -> ast;
|
|
||||||
nimsets -> astalgo;
|
|
||||||
nimsets -> trees;
|
|
||||||
nimsets -> nversion;
|
|
||||||
nimsets -> msgs;
|
|
||||||
nimsets -> platform;
|
|
||||||
nimsets -> bitsets;
|
|
||||||
nimsets -> types;
|
|
||||||
nimsets -> rnimsyn;
|
|
||||||
passes -> strutils;
|
|
||||||
passes -> lists;
|
|
||||||
passes -> options;
|
|
||||||
passes -> ast;
|
|
||||||
passes -> astalgo;
|
|
||||||
passes -> llstream;
|
|
||||||
passes -> msgs;
|
|
||||||
passes -> platform;
|
|
||||||
passes -> os;
|
|
||||||
passes -> condsyms;
|
|
||||||
passes -> idents;
|
|
||||||
passes -> rnimsyn;
|
|
||||||
passes -> types;
|
|
||||||
passes -> extccomp;
|
|
||||||
passes -> math;
|
|
||||||
passes -> magicsys;
|
|
||||||
passes -> nversion;
|
|
||||||
passes -> nimsets;
|
|
||||||
passes -> syntaxes;
|
|
||||||
passes -> times;
|
|
||||||
passes -> rodread;
|
|
||||||
treetab -> nhashes;
|
|
||||||
treetab -> ast;
|
|
||||||
treetab -> astalgo;
|
|
||||||
treetab -> types;
|
|
||||||
semdata -> strutils;
|
|
||||||
semdata -> lists;
|
|
||||||
semdata -> options;
|
|
||||||
semdata -> scanner;
|
|
||||||
semdata -> ast;
|
|
||||||
semdata -> astalgo;
|
|
||||||
semdata -> trees;
|
|
||||||
semdata -> treetab;
|
|
||||||
semdata -> wordrecg;
|
|
||||||
semdata -> ropes;
|
|
||||||
semdata -> msgs;
|
|
||||||
semdata -> platform;
|
|
||||||
semdata -> os;
|
|
||||||
semdata -> condsyms;
|
|
||||||
semdata -> idents;
|
|
||||||
semdata -> rnimsyn;
|
|
||||||
semdata -> types;
|
|
||||||
semdata -> extccomp;
|
|
||||||
semdata -> math;
|
|
||||||
semdata -> magicsys;
|
|
||||||
semdata -> nversion;
|
|
||||||
semdata -> nimsets;
|
|
||||||
semdata -> pnimsyn;
|
|
||||||
semdata -> times;
|
|
||||||
semdata -> passes;
|
|
||||||
semdata -> rodread;
|
|
||||||
lookups -> ast;
|
|
||||||
lookups -> astalgo;
|
|
||||||
lookups -> idents;
|
|
||||||
lookups -> semdata;
|
|
||||||
lookups -> types;
|
|
||||||
lookups -> msgs;
|
|
||||||
lookups -> options;
|
|
||||||
lookups -> rodread;
|
|
||||||
lookups -> rnimsyn;
|
|
||||||
importer -> strutils;
|
|
||||||
importer -> os;
|
|
||||||
importer -> ast;
|
|
||||||
importer -> astalgo;
|
|
||||||
importer -> msgs;
|
|
||||||
importer -> options;
|
|
||||||
importer -> idents;
|
|
||||||
importer -> rodread;
|
|
||||||
importer -> lookups;
|
|
||||||
importer -> semdata;
|
|
||||||
importer -> passes;
|
|
||||||
rodwrite -> os;
|
|
||||||
rodwrite -> options;
|
|
||||||
rodwrite -> strutils;
|
|
||||||
rodwrite -> nversion;
|
|
||||||
rodwrite -> ast;
|
|
||||||
rodwrite -> astalgo;
|
|
||||||
rodwrite -> msgs;
|
|
||||||
rodwrite -> platform;
|
|
||||||
rodwrite -> condsyms;
|
|
||||||
rodwrite -> ropes;
|
|
||||||
rodwrite -> idents;
|
|
||||||
rodwrite -> crc;
|
|
||||||
rodwrite -> rodread;
|
|
||||||
rodwrite -> passes;
|
|
||||||
rodwrite -> importer;
|
|
||||||
semfold -> strutils;
|
|
||||||
semfold -> lists;
|
|
||||||
semfold -> options;
|
|
||||||
semfold -> ast;
|
|
||||||
semfold -> astalgo;
|
|
||||||
semfold -> trees;
|
|
||||||
semfold -> treetab;
|
|
||||||
semfold -> nimsets;
|
|
||||||
semfold -> times;
|
|
||||||
semfold -> nversion;
|
|
||||||
semfold -> platform;
|
|
||||||
semfold -> math;
|
|
||||||
semfold -> msgs;
|
|
||||||
semfold -> os;
|
|
||||||
semfold -> condsyms;
|
|
||||||
semfold -> idents;
|
|
||||||
semfold -> rnimsyn;
|
|
||||||
semfold -> types;
|
|
||||||
evals -> strutils;
|
|
||||||
evals -> magicsys;
|
|
||||||
evals -> lists;
|
|
||||||
evals -> options;
|
|
||||||
evals -> ast;
|
|
||||||
evals -> astalgo;
|
|
||||||
evals -> trees;
|
|
||||||
evals -> treetab;
|
|
||||||
evals -> nimsets;
|
|
||||||
evals -> msgs;
|
|
||||||
evals -> os;
|
|
||||||
evals -> condsyms;
|
|
||||||
evals -> idents;
|
|
||||||
evals -> rnimsyn;
|
|
||||||
evals -> types;
|
|
||||||
evals -> passes;
|
|
||||||
evals -> semfold;
|
|
||||||
procfind -> ast;
|
|
||||||
procfind -> astalgo;
|
|
||||||
procfind -> msgs;
|
|
||||||
procfind -> semdata;
|
|
||||||
procfind -> types;
|
|
||||||
procfind -> trees;
|
|
||||||
pragmas -> os;
|
|
||||||
pragmas -> platform;
|
|
||||||
pragmas -> condsyms;
|
|
||||||
pragmas -> ast;
|
|
||||||
pragmas -> astalgo;
|
|
||||||
pragmas -> idents;
|
|
||||||
pragmas -> semdata;
|
|
||||||
pragmas -> msgs;
|
|
||||||
pragmas -> rnimsyn;
|
|
||||||
pragmas -> wordrecg;
|
|
||||||
pragmas -> ropes;
|
|
||||||
pragmas -> options;
|
|
||||||
pragmas -> strutils;
|
|
||||||
pragmas -> lists;
|
|
||||||
pragmas -> extccomp;
|
|
||||||
pragmas -> math;
|
|
||||||
pragmas -> magicsys;
|
|
||||||
pragmas -> trees;
|
|
||||||
sem -> strutils;
|
|
||||||
sem -> nhashes;
|
|
||||||
sem -> lists;
|
|
||||||
sem -> options;
|
|
||||||
sem -> scanner;
|
|
||||||
sem -> ast;
|
|
||||||
sem -> astalgo;
|
|
||||||
sem -> trees;
|
|
||||||
sem -> treetab;
|
|
||||||
sem -> wordrecg;
|
|
||||||
sem -> ropes;
|
|
||||||
sem -> msgs;
|
|
||||||
sem -> os;
|
|
||||||
sem -> condsyms;
|
|
||||||
sem -> idents;
|
|
||||||
sem -> rnimsyn;
|
|
||||||
sem -> types;
|
|
||||||
sem -> platform;
|
|
||||||
sem -> math;
|
|
||||||
sem -> magicsys;
|
|
||||||
sem -> pnimsyn;
|
|
||||||
sem -> nversion;
|
|
||||||
sem -> nimsets;
|
|
||||||
sem -> semdata;
|
|
||||||
sem -> evals;
|
|
||||||
sem -> semfold;
|
|
||||||
sem -> importer;
|
|
||||||
sem -> procfind;
|
|
||||||
sem -> lookups;
|
|
||||||
sem -> rodread;
|
|
||||||
sem -> pragmas;
|
|
||||||
sem -> passes;
|
|
||||||
rst -> os;
|
|
||||||
rst -> msgs;
|
|
||||||
rst -> strutils;
|
|
||||||
rst -> platform;
|
|
||||||
rst -> nhashes;
|
|
||||||
rst -> ropes;
|
|
||||||
rst -> options;
|
|
||||||
highlite -> nhashes;
|
|
||||||
highlite -> options;
|
|
||||||
highlite -> msgs;
|
|
||||||
highlite -> strutils;
|
|
||||||
highlite -> platform;
|
|
||||||
highlite -> idents;
|
|
||||||
highlite -> lexbase;
|
|
||||||
highlite -> wordrecg;
|
|
||||||
highlite -> scanner;
|
|
||||||
docgen -> ast;
|
|
||||||
docgen -> astalgo;
|
|
||||||
docgen -> strutils;
|
|
||||||
docgen -> nhashes;
|
|
||||||
docgen -> options;
|
|
||||||
docgen -> nversion;
|
|
||||||
docgen -> msgs;
|
|
||||||
docgen -> os;
|
|
||||||
docgen -> ropes;
|
|
||||||
docgen -> idents;
|
|
||||||
docgen -> wordrecg;
|
|
||||||
docgen -> math;
|
|
||||||
docgen -> syntaxes;
|
|
||||||
docgen -> rnimsyn;
|
|
||||||
docgen -> scanner;
|
|
||||||
docgen -> rst;
|
|
||||||
docgen -> times;
|
|
||||||
docgen -> highlite;
|
|
||||||
ccgutils -> ast;
|
|
||||||
ccgutils -> astalgo;
|
|
||||||
ccgutils -> ropes;
|
|
||||||
ccgutils -> lists;
|
|
||||||
ccgutils -> nhashes;
|
|
||||||
ccgutils -> strutils;
|
|
||||||
ccgutils -> types;
|
|
||||||
ccgutils -> msgs;
|
|
||||||
cgmeth -> options;
|
|
||||||
cgmeth -> ast;
|
|
||||||
cgmeth -> astalgo;
|
|
||||||
cgmeth -> msgs;
|
|
||||||
cgmeth -> idents;
|
|
||||||
cgmeth -> rnimsyn;
|
|
||||||
cgmeth -> types;
|
|
||||||
cgmeth -> magicsys;
|
|
||||||
cgen -> ast;
|
|
||||||
cgen -> astalgo;
|
|
||||||
cgen -> strutils;
|
|
||||||
cgen -> nhashes;
|
|
||||||
cgen -> trees;
|
|
||||||
cgen -> platform;
|
|
||||||
cgen -> magicsys;
|
|
||||||
cgen -> extccomp;
|
|
||||||
cgen -> options;
|
|
||||||
cgen -> nversion;
|
|
||||||
cgen -> nimsets;
|
|
||||||
cgen -> msgs;
|
|
||||||
cgen -> crc;
|
|
||||||
cgen -> bitsets;
|
|
||||||
cgen -> idents;
|
|
||||||
cgen -> lists;
|
|
||||||
cgen -> types;
|
|
||||||
cgen -> ccgutils;
|
|
||||||
cgen -> os;
|
|
||||||
cgen -> times;
|
|
||||||
cgen -> ropes;
|
|
||||||
cgen -> math;
|
|
||||||
cgen -> passes;
|
|
||||||
cgen -> rodread;
|
|
||||||
cgen -> wordrecg;
|
|
||||||
cgen -> rnimsyn;
|
|
||||||
cgen -> treetab;
|
|
||||||
cgen -> cgmeth;
|
|
||||||
jsgen -> ast;
|
|
||||||
jsgen -> astalgo;
|
|
||||||
jsgen -> strutils;
|
|
||||||
jsgen -> nhashes;
|
|
||||||
jsgen -> trees;
|
|
||||||
jsgen -> platform;
|
|
||||||
jsgen -> magicsys;
|
|
||||||
jsgen -> extccomp;
|
|
||||||
jsgen -> options;
|
|
||||||
jsgen -> nversion;
|
|
||||||
jsgen -> nimsets;
|
|
||||||
jsgen -> msgs;
|
|
||||||
jsgen -> crc;
|
|
||||||
jsgen -> bitsets;
|
|
||||||
jsgen -> idents;
|
|
||||||
jsgen -> lists;
|
|
||||||
jsgen -> types;
|
|
||||||
jsgen -> os;
|
|
||||||
jsgen -> times;
|
|
||||||
jsgen -> ropes;
|
|
||||||
jsgen -> math;
|
|
||||||
jsgen -> passes;
|
|
||||||
jsgen -> ccgutils;
|
|
||||||
jsgen -> wordrecg;
|
|
||||||
jsgen -> rnimsyn;
|
|
||||||
jsgen -> rodread;
|
|
||||||
interact -> llstream;
|
|
||||||
interact -> strutils;
|
|
||||||
interact -> ropes;
|
|
||||||
interact -> nstrtabs;
|
|
||||||
interact -> msgs;
|
|
||||||
passaux -> strutils;
|
|
||||||
passaux -> ast;
|
|
||||||
passaux -> astalgo;
|
|
||||||
passaux -> passes;
|
|
||||||
passaux -> msgs;
|
|
||||||
passaux -> options;
|
|
||||||
depends -> os;
|
|
||||||
depends -> options;
|
|
||||||
depends -> ast;
|
|
||||||
depends -> astalgo;
|
|
||||||
depends -> msgs;
|
|
||||||
depends -> ropes;
|
|
||||||
depends -> idents;
|
|
||||||
depends -> passes;
|
|
||||||
depends -> importer;
|
|
||||||
transf -> strutils;
|
|
||||||
transf -> lists;
|
|
||||||
transf -> options;
|
|
||||||
transf -> ast;
|
|
||||||
transf -> astalgo;
|
|
||||||
transf -> trees;
|
|
||||||
transf -> treetab;
|
|
||||||
transf -> evals;
|
|
||||||
transf -> msgs;
|
|
||||||
transf -> os;
|
|
||||||
transf -> idents;
|
|
||||||
transf -> rnimsyn;
|
|
||||||
transf -> types;
|
|
||||||
transf -> passes;
|
|
||||||
transf -> semfold;
|
|
||||||
transf -> magicsys;
|
|
||||||
transf -> cgmeth;
|
|
||||||
main -> llstream;
|
|
||||||
main -> strutils;
|
|
||||||
main -> ast;
|
|
||||||
main -> astalgo;
|
|
||||||
main -> scanner;
|
|
||||||
main -> syntaxes;
|
|
||||||
main -> rnimsyn;
|
|
||||||
main -> options;
|
|
||||||
main -> msgs;
|
|
||||||
main -> os;
|
|
||||||
main -> lists;
|
|
||||||
main -> condsyms;
|
|
||||||
main -> paslex;
|
|
||||||
main -> pasparse;
|
|
||||||
main -> rodread;
|
|
||||||
main -> rodwrite;
|
|
||||||
main -> ropes;
|
|
||||||
main -> trees;
|
|
||||||
main -> wordrecg;
|
|
||||||
main -> sem;
|
|
||||||
main -> semdata;
|
|
||||||
main -> idents;
|
|
||||||
main -> passes;
|
|
||||||
main -> docgen;
|
|
||||||
main -> extccomp;
|
|
||||||
main -> cgen;
|
|
||||||
main -> jsgen;
|
|
||||||
main -> platform;
|
|
||||||
main -> interact;
|
|
||||||
main -> nimconf;
|
|
||||||
main -> importer;
|
|
||||||
main -> passaux;
|
|
||||||
main -> depends;
|
|
||||||
main -> transf;
|
|
||||||
main -> evals;
|
|
||||||
main -> types;
|
|
||||||
parseopt -> os;
|
|
||||||
parseopt -> strutils;
|
|
||||||
nimrod -> times;
|
|
||||||
nimrod -> commands;
|
|
||||||
nimrod -> scanner;
|
|
||||||
nimrod -> condsyms;
|
|
||||||
nimrod -> options;
|
|
||||||
nimrod -> msgs;
|
|
||||||
nimrod -> nversion;
|
|
||||||
nimrod -> nimconf;
|
|
||||||
nimrod -> ropes;
|
|
||||||
nimrod -> extccomp;
|
|
||||||
nimrod -> strutils;
|
|
||||||
nimrod -> os;
|
|
||||||
nimrod -> platform;
|
|
||||||
nimrod -> main;
|
|
||||||
nimrod -> parseopt;
|
|
||||||
}
|
|
||||||
|
|
@ -111,6 +111,7 @@ var
|
||||||
gDirtyBufferIdx* = 0'i32 # indicates the fileIdx of the dirty version of
|
gDirtyBufferIdx* = 0'i32 # indicates the fileIdx of the dirty version of
|
||||||
# the tracked source X, saved by the CAAS client.
|
# the tracked source X, saved by the CAAS client.
|
||||||
gDirtyOriginalIdx* = 0'i32 # the original source file of the dirtified buffer.
|
gDirtyOriginalIdx* = 0'i32 # the original source file of the dirtified buffer.
|
||||||
|
gNoBabelPath* = false
|
||||||
|
|
||||||
proc importantComments*(): bool {.inline.} = gCmd in {cmdDoc, cmdIdeTools}
|
proc importantComments*(): bool {.inline.} = gCmd in {cmdDoc, cmdIdeTools}
|
||||||
proc usesNativeGC*(): bool {.inline.} = gSelectedGC >= gcRefc
|
proc usesNativeGC*(): bool {.inline.} = gSelectedGC >= gcRefc
|
||||||
|
|
|
||||||
|
|
@ -62,3 +62,9 @@ Currently, the following C compilers are supported under Windows:
|
||||||
| http://www.digitalmars.com/download/freecompiler.html
|
| http://www.digitalmars.com/download/freecompiler.html
|
||||||
|
|
||||||
However, most testing is done with GCC.
|
However, most testing is done with GCC.
|
||||||
|
|
||||||
|
Bootstrapping from Github
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Take a look at the readme file on github `here <https://github.com/Araq/Nimrod#readme>`_
|
||||||
|
for instructions.
|
||||||
|
|
|
||||||
|
|
@ -699,7 +699,18 @@ proc formatNamedVars*(frmt: string, varnames: openArray[string],
|
||||||
|
|
||||||
|
|
||||||
proc defaultConfig*(): PStringTable =
|
proc defaultConfig*(): PStringTable =
|
||||||
## creates a default configuration for HTML generation.
|
## Returns a default configuration for embedded HTML generation.
|
||||||
|
##
|
||||||
|
## The returned ``PStringTable`` contains the paramters used by the HTML
|
||||||
|
## engine to build the final output. For information on what these parameters
|
||||||
|
## are and their purpose, please look up the file ``config/nimdoc.cfg``
|
||||||
|
## bundled with the compiler.
|
||||||
|
##
|
||||||
|
## The only difference between the contents of that file and the values
|
||||||
|
## provided by this proc is the ``doc.file`` variable. The ``doc.file``
|
||||||
|
## variable of the configuration file contains HTML to build standalone
|
||||||
|
## pages, while this proc returns just the content for procs like
|
||||||
|
## ``rstToHtml`` to generate the bare minimum HTML.
|
||||||
result = newStringTable(modeStyleInsensitive)
|
result = newStringTable(modeStyleInsensitive)
|
||||||
|
|
||||||
template setConfigVar(key, val: expr) =
|
template setConfigVar(key, val: expr) =
|
||||||
|
|
|
||||||
|
|
@ -233,8 +233,11 @@ proc asyncSockHandleWrite(h: PObject) =
|
||||||
let sock = PAsyncSocket(h)
|
let sock = PAsyncSocket(h)
|
||||||
try:
|
try:
|
||||||
let bytesSent = sock.socket.sendAsync(sock.sendBuffer)
|
let bytesSent = sock.socket.sendAsync(sock.sendBuffer)
|
||||||
assert bytesSent > 0
|
if bytesSent == 0:
|
||||||
if bytesSent != sock.sendBuffer.len:
|
# Apparently the socket cannot be written to. Even though select
|
||||||
|
# just told us that it can be... This used to be an assert. Just
|
||||||
|
# do nothing instead.
|
||||||
|
elif bytesSent != sock.sendBuffer.len:
|
||||||
sock.sendBuffer = sock.sendBuffer[bytesSent .. -1]
|
sock.sendBuffer = sock.sendBuffer[bytesSent .. -1]
|
||||||
elif bytesSent == sock.sendBuffer.len:
|
elif bytesSent == sock.sendBuffer.len:
|
||||||
sock.sendBuffer = ""
|
sock.sendBuffer = ""
|
||||||
|
|
|
||||||
|
|
@ -220,9 +220,8 @@ proc parseResponse(s: TSocket, getBody: bool, timeout: int): TResponse =
|
||||||
inc(linei, le)
|
inc(linei, le)
|
||||||
if line[linei] != ':': httpError("invalid headers")
|
if line[linei] != ':': httpError("invalid headers")
|
||||||
inc(linei) # Skip :
|
inc(linei) # Skip :
|
||||||
linei += skipWhitespace(line, linei)
|
|
||||||
|
|
||||||
result.headers[name] = line[linei.. -1]
|
result.headers[name] = line[linei.. -1].strip()
|
||||||
if not fullyRead:
|
if not fullyRead:
|
||||||
httpError("Connection was closed before full request has been made")
|
httpError("Connection was closed before full request has been made")
|
||||||
if getBody:
|
if getBody:
|
||||||
|
|
|
||||||
|
|
@ -387,6 +387,14 @@ proc existsDir*(dir: string): bool {.rtl, extern: "nos$1", tags: [FReadDir].} =
|
||||||
var res: TStat
|
var res: TStat
|
||||||
return stat(dir, res) >= 0'i32 and S_ISDIR(res.st_mode)
|
return stat(dir, res) >= 0'i32 and S_ISDIR(res.st_mode)
|
||||||
|
|
||||||
|
proc fileExists*(filename: string): bool {.inline.} =
|
||||||
|
## Synonym for existsFile
|
||||||
|
existsFile(filename)
|
||||||
|
|
||||||
|
proc dirExists*(dir: string): bool {.inline.} =
|
||||||
|
## Synonym for existsDir
|
||||||
|
existsDir(dir)
|
||||||
|
|
||||||
proc getLastModificationTime*(file: string): TTime {.rtl, extern: "nos$1".} =
|
proc getLastModificationTime*(file: string): TTime {.rtl, extern: "nos$1".} =
|
||||||
## Returns the `file`'s last modification time.
|
## Returns the `file`'s last modification time.
|
||||||
when defined(posix):
|
when defined(posix):
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,10 @@ proc toUTF8*(c: TRune): string {.rtl, extern: "nuc$1".} =
|
||||||
result = newString(1)
|
result = newString(1)
|
||||||
result[0] = chr(i)
|
result[0] = chr(i)
|
||||||
|
|
||||||
|
proc `$`*(rune: TRune): string =
|
||||||
|
## converts a rune to a string
|
||||||
|
rune.toUTF8
|
||||||
|
|
||||||
proc `$`*(runes: seq[TRune]): string =
|
proc `$`*(runes: seq[TRune]): string =
|
||||||
## converts a sequence of runes to a string
|
## converts a sequence of runes to a string
|
||||||
result = ""
|
result = ""
|
||||||
|
|
|
||||||
|
|
@ -2708,7 +2708,23 @@ proc locals*(): TObject {.magic: "Locals", noSideEffect.} =
|
||||||
## in the current scope. This is quite fast as it does not rely
|
## in the current scope. This is quite fast as it does not rely
|
||||||
## on any debug or runtime information. Note that in constrast to what
|
## on any debug or runtime information. Note that in constrast to what
|
||||||
## the official signature says, the return type is not ``TObject`` but a
|
## the official signature says, the return type is not ``TObject`` but a
|
||||||
## tuple of a structure that depends on the current scope.
|
## tuple of a structure that depends on the current scope. Example:
|
||||||
|
##
|
||||||
|
## .. code-block:: nimrod
|
||||||
|
## proc testLocals() =
|
||||||
|
## var
|
||||||
|
## a = "something"
|
||||||
|
## b = 4
|
||||||
|
## c = locals()
|
||||||
|
## d = "super!"
|
||||||
|
##
|
||||||
|
## b = 1
|
||||||
|
## for name, value in fieldPairs(c):
|
||||||
|
## echo "name ", name, " with value ", value
|
||||||
|
## echo "B is ", b
|
||||||
|
## # -> name a with value something
|
||||||
|
## # -> name b with value 4
|
||||||
|
## # -> B is 1
|
||||||
discard
|
discard
|
||||||
|
|
||||||
when not defined(booting):
|
when not defined(booting):
|
||||||
|
|
@ -2719,4 +2735,3 @@ when not defined(booting):
|
||||||
|
|
||||||
template isStatic*(x): expr = compiles(static(x))
|
template isStatic*(x): expr = compiles(static(x))
|
||||||
# checks whether `x` is a value known at compile-time
|
# checks whether `x` is a value known at compile-time
|
||||||
|
|
||||||
|
|
|
||||||
57
tests/showoff/tformatopt.nim
Normal file
57
tests/showoff/tformatopt.nim
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
discard """
|
||||||
|
output: '''(a: 3
|
||||||
|
b: 4
|
||||||
|
s: abc
|
||||||
|
)'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
import macros
|
||||||
|
|
||||||
|
proc invalidFormatString() =
|
||||||
|
echo "invalidFormatString"
|
||||||
|
|
||||||
|
template formatImpl(handleChar: expr) =
|
||||||
|
var i = 0
|
||||||
|
while i < f.len:
|
||||||
|
if f[i] == '$':
|
||||||
|
case f[i+1]
|
||||||
|
of '1'..'9':
|
||||||
|
var j = 0
|
||||||
|
i += 1
|
||||||
|
while f[i] in {'0'..'9'}:
|
||||||
|
j = j * 10 + ord(f[i]) - ord('0')
|
||||||
|
i += 1
|
||||||
|
result.add(a[j-1])
|
||||||
|
else:
|
||||||
|
invalidFormatString()
|
||||||
|
else:
|
||||||
|
result.add(handleChar(f[i]))
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
proc `%`*(f: string, a: openArray[string]): string =
|
||||||
|
template identity(x: expr): expr = x
|
||||||
|
result = ""
|
||||||
|
formatImpl(identity)
|
||||||
|
|
||||||
|
macro optFormat{`%`(f, a)}(f: string{lit}, a: openArray[string]): expr =
|
||||||
|
result = newNimNode(nnkBracket)
|
||||||
|
let f = f.strVal
|
||||||
|
formatImpl(newLit)
|
||||||
|
result = nestList(!"&", result)
|
||||||
|
|
||||||
|
template optAdd1{x = y; add(x, z)}(x, y, z: string) =
|
||||||
|
x = y & z
|
||||||
|
|
||||||
|
proc `/&` [T: object](x: T): string =
|
||||||
|
result = "("
|
||||||
|
for name, value in fieldPairs(x):
|
||||||
|
result.add("$1: $2\n" % [name, $value])
|
||||||
|
result.add(")")
|
||||||
|
|
||||||
|
type
|
||||||
|
MyObject = object
|
||||||
|
a, b: int
|
||||||
|
s: string
|
||||||
|
|
||||||
|
let obj = MyObject(a: 3, b: 4, s: "abc")
|
||||||
|
echo(/&obj)
|
||||||
11
tests/showoff/thello2.nim
Normal file
11
tests/showoff/thello2.nim
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
discard """
|
||||||
|
output: '''(a: 3, b: 4, s: abc)'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
type
|
||||||
|
MyObject = object
|
||||||
|
a, b: int
|
||||||
|
s: string
|
||||||
|
|
||||||
|
let obj = MyObject(a: 3, b: 4, s: "abc")
|
||||||
|
echo obj
|
||||||
11
tests/showoff/thtml1.nim
Normal file
11
tests/showoff/thtml1.nim
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
discard """
|
||||||
|
output: "<br>"
|
||||||
|
"""
|
||||||
|
|
||||||
|
template htmlTag(tag: expr) {.immediate.} =
|
||||||
|
proc tag(): string = "<" & astToStr(tag) & ">"
|
||||||
|
|
||||||
|
htmlTag(br)
|
||||||
|
htmlTag(html)
|
||||||
|
|
||||||
|
echo br()
|
||||||
37
tests/showoff/thtml2.nim
Normal file
37
tests/showoff/thtml2.nim
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
discard """
|
||||||
|
output: "<html><head><title>now look at this</title></head><body><ul><li>Nimrod is quite capable</li></ul></body></html>"
|
||||||
|
"""
|
||||||
|
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
template html(name: expr, matter: stmt) {.immediate.} =
|
||||||
|
proc name(): string =
|
||||||
|
result = "<html>"
|
||||||
|
matter
|
||||||
|
result.add("</html>")
|
||||||
|
|
||||||
|
template nestedTag(tag: expr) {.immediate.} =
|
||||||
|
template tag(matter: stmt) {.immediate.} =
|
||||||
|
result.add("<" & astToStr(tag) & ">")
|
||||||
|
matter
|
||||||
|
result.add("</" & astToStr(tag) & ">")
|
||||||
|
|
||||||
|
template simpleTag(tag: expr) {.immediate.} =
|
||||||
|
template tag(matter: expr) {.immediate.} =
|
||||||
|
result.add("<$1>$2</$1>" % [astToStr(tag), matter])
|
||||||
|
|
||||||
|
nestedTag body
|
||||||
|
nestedTag head
|
||||||
|
nestedTag ul
|
||||||
|
simpleTag title
|
||||||
|
simpleTag li
|
||||||
|
|
||||||
|
|
||||||
|
html mainPage:
|
||||||
|
head:
|
||||||
|
title "now look at this"
|
||||||
|
body:
|
||||||
|
ul:
|
||||||
|
li "Nimrod is quite capable"
|
||||||
|
|
||||||
|
echo mainPage()
|
||||||
22
tests/showoff/tonce.nim
Normal file
22
tests/showoff/tonce.nim
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
discard """
|
||||||
|
output: '''first call of p
|
||||||
|
some call of p
|
||||||
|
new instantiation
|
||||||
|
some call of p'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
template once(body: stmt) =
|
||||||
|
var x {.global.} = false
|
||||||
|
if not x:
|
||||||
|
x = true
|
||||||
|
body
|
||||||
|
|
||||||
|
proc p() =
|
||||||
|
once:
|
||||||
|
echo "first call of p"
|
||||||
|
echo "some call of p"
|
||||||
|
|
||||||
|
p()
|
||||||
|
once:
|
||||||
|
echo "new instantiation"
|
||||||
|
p()
|
||||||
14
tests/showoff/tquasiquote.nim
Normal file
14
tests/showoff/tquasiquote.nim
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
discard """
|
||||||
|
outputsub: '''tquasiquote.nim(14,8): Check failed: 1 > 2'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
import macros
|
||||||
|
|
||||||
|
macro check(ex: expr): stmt =
|
||||||
|
var info = ex.lineInfo
|
||||||
|
var expString = ex.toStrLit
|
||||||
|
result = quote do:
|
||||||
|
if not `ex`:
|
||||||
|
echo `info`, ": Check failed: ", `expString`
|
||||||
|
|
||||||
|
check 1 > 2
|
||||||
|
|
@ -17,8 +17,8 @@ REM call the compiler:
|
||||||
# var linkCmd = ""
|
# var linkCmd = ""
|
||||||
# for ff in items(c.cfiles[winIndex][cpuIndex]):
|
# for ff in items(c.cfiles[winIndex][cpuIndex]):
|
||||||
# let f = ff.toWin
|
# let f = ff.toWin
|
||||||
ECHO %CC% %COMP_FLAGS% -Inimcache -c ?{f} -o ?{changeFileExt(f, "o")}
|
ECHO %CC% %COMP_FLAGS% -Ic_code -c ?{f} -o ?{changeFileExt(f, "o")}
|
||||||
%CC% %COMP_FLAGS% -Inimcache -c ?{f} -o ?{changeFileExt(f, "o")}
|
%CC% %COMP_FLAGS% -Ic_code -c ?{f} -o ?{changeFileExt(f, "o")}
|
||||||
# linkCmd.add(" " & changeFileExt(f, "o"))
|
# linkCmd.add(" " & changeFileExt(f, "o"))
|
||||||
# end for
|
# end for
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,8 +128,8 @@ case $myos in
|
||||||
# var linkCmd = ""
|
# var linkCmd = ""
|
||||||
# for ff in items(c.cfiles[osA][cpuA]):
|
# for ff in items(c.cfiles[osA][cpuA]):
|
||||||
# let f = ff.toUnix
|
# let f = ff.toUnix
|
||||||
echo "$CC $COMP_FLAGS -Inimcache -c ?{f} -o ?{changeFileExt(f, "o")}"
|
echo "$CC $COMP_FLAGS -Ic_code -c ?{f} -o ?{changeFileExt(f, "o")}"
|
||||||
$CC $COMP_FLAGS -Inimcache -c ?{f} -o ?{changeFileExt(f, "o")}
|
$CC $COMP_FLAGS -Ic_code -c ?{f} -o ?{changeFileExt(f, "o")}
|
||||||
# add(linkCmd, " \\\n" & changeFileExt(f, "o"))
|
# add(linkCmd, " \\\n" & changeFileExt(f, "o"))
|
||||||
# end for
|
# end for
|
||||||
echo "$LINKER -o ?{"$binDir/" & toLower(c.name)} ?linkCmd $LINK_FLAGS"
|
echo "$LINKER -o ?{"$binDir/" & toLower(c.name)} ?linkCmd $LINK_FLAGS"
|
||||||
|
|
|
||||||
|
|
@ -392,7 +392,7 @@ proc readCFiles(c: var TConfigData, osA, cpuA: int) =
|
||||||
quit("Cannot open: " & f)
|
quit("Cannot open: " & f)
|
||||||
|
|
||||||
proc buildDir(os, cpu: int): string =
|
proc buildDir(os, cpu: int): string =
|
||||||
return "nimcache" / ($os & "_" & $cpu)
|
return "c_code" / ($os & "_" & $cpu)
|
||||||
|
|
||||||
proc getOutputDir(c: var TConfigData): string =
|
proc getOutputDir(c: var TConfigData): string =
|
||||||
if c.outdir.len > 0: c.outdir else: "build"
|
if c.outdir.len > 0: c.outdir else: "build"
|
||||||
|
|
@ -432,11 +432,11 @@ proc writeInstallScripts(c: var TConfigData) =
|
||||||
writeFile(deinstallShFile, generateDeinstallScript(c), "\10")
|
writeFile(deinstallShFile, generateDeinstallScript(c), "\10")
|
||||||
|
|
||||||
proc srcdist(c: var TConfigData) =
|
proc srcdist(c: var TConfigData) =
|
||||||
if not existsDir(getOutputDir(c) / "nimcache"):
|
if not existsDir(getOutputDir(c) / "c_code"):
|
||||||
createDir(getOutputDir(c) / "nimcache")
|
createDir(getOutputDir(c) / "c_code")
|
||||||
for x in walkFiles(c.libpath / "lib/*.h"):
|
for x in walkFiles(c.libpath / "lib/*.h"):
|
||||||
echo(getOutputDir(c) / "nimcache" / extractFilename(x))
|
echo(getOutputDir(c) / "c_code" / extractFilename(x))
|
||||||
copyFile(dest=getOutputDir(c) / "nimcache" / extractFilename(x), source=x)
|
copyFile(dest=getOutputDir(c) / "c_code" / extractFilename(x), source=x)
|
||||||
var winIndex = -1
|
var winIndex = -1
|
||||||
var intel32Index = -1
|
var intel32Index = -1
|
||||||
var intel64Index = -1
|
var intel64Index = -1
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ Bug reports: http://github.com/Araq/Nimrod/issues.
|
||||||
For quickest feedback, join our IRC channel: irc://irc.freenode.net/nimrod
|
For quickest feedback, join our IRC channel: irc://irc.freenode.net/nimrod
|
||||||
(logs at `<http://build.nimrod-code.org/irclogs/>`_).
|
(logs at `<http://build.nimrod-code.org/irclogs/>`_).
|
||||||
|
|
||||||
|
Check out our Twitter account for latest news and announcements: `@nimrodlang <http://twitter.com/nimrodlang>`_.
|
||||||
|
|
||||||
How to help
|
How to help
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue