diff options
author | Araq <rumpf_a@web.de> | 2012-11-28 02:02:46 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-11-28 02:02:46 +0100 |
commit | 0d19de18cce2ba62e3c753e7474c29bbe4c47ad7 (patch) | |
tree | 655167b51f60c06c1347ebef9a81516f212ab221 /compiler | |
parent | c43bf78000b21001726b31eb4259b90b3c91e03c (diff) | |
download | Nim-0d19de18cce2ba62e3c753e7474c29bbe4c47ad7.tar.gz |
first steps for the 'export' feature
Diffstat (limited to 'compiler')
-rwxr-xr-x | compiler/ast.nim | 2 | ||||
-rwxr-xr-x | compiler/parser.nim | 38 | ||||
-rwxr-xr-x | compiler/renderer.nim | 15 |
3 files changed, 30 insertions, 25 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim index 027f4d003..77f8723e2 100755 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -173,7 +173,9 @@ type nkStmtList, # a list of statements nkImportStmt, # an import statement nkFromStmt, # a from * import statement + nkImportExceptStmt, # an import x except a statement nkIncludeStmt, # an include statement + nkExportStmt, # an export statement nkBindStmt, # a bind statement nkMixinStmt, # a mixin statement nkCommentStmt, # a comment statement diff --git a/compiler/parser.nim b/compiler/parser.nim index d5457fcd8..7ab87804e 100755 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -901,27 +901,30 @@ proc parseExprStmt(p: var TParser): PNode = addSon(result, b) if b.kind == nkElse: break -proc parseImportOrIncludeStmt(p: var TParser, kind: TNodeKind): PNode = +proc parseModuleName(p: var TParser): PNode {.inline.} = + result = parseExpr(p) + +proc parseImportOrIncludeStmt(p: var TParser, kind: TNodeKind): PNode = var a: PNode result = newNodeP(kind, p) getTok(p) # skip `import` or `include` optInd(p, result) - while true: + while true: case p.tok.tokType - of tkEof, tkSad, tkDed: - break - of tkSymbol, tkAccent: + of tkEof, tkSad, tkDed: + break + of tkSymbol, tkAccent: a = parseSymbol(p) - of tkRStrLit: + of tkRStrLit: a = newStrNodeP(nkRStrLit, p.tok.literal, p) getTok(p) - of tkStrLit: + of tkStrLit: a = newStrNodeP(nkStrLit, p.tok.literal, p) getTok(p) - of tkTripleStrLit: + of tkTripleStrLit: a = newStrNodeP(nkTripleStrLit, p.tok.literal, p) getTok(p) - else: + else: parMessage(p, errIdentifierExpected, p.tok) break addSon(result, a) @@ -931,25 +934,10 @@ proc parseImportOrIncludeStmt(p: var TParser, kind: TNodeKind): PNode = expectNl(p) proc parseFromStmt(p: var TParser): PNode = - var a: PNode result = newNodeP(nkFromStmt, p) getTok(p) # skip `from` optInd(p, result) - case p.tok.tokType - of tkSymbol, tkAccent: - a = parseSymbol(p) - of tkRStrLit: - a = newStrNodeP(nkRStrLit, p.tok.literal, p) - getTok(p) - of tkStrLit: - a = newStrNodeP(nkStrLit, p.tok.literal, p) - getTok(p) - of tkTripleStrLit: - a = newStrNodeP(nkTripleStrLit, p.tok.literal, p) - getTok(p) - else: - parMessage(p, errIdentifierExpected, p.tok) - return + var a = parseModuleName(p) addSon(result, a) #optInd(p, a); eat(p, tkImport) optInd(p, result) diff --git a/compiler/renderer.nim b/compiler/renderer.nim index b9d522694..4444f2ab0 100755 --- a/compiler/renderer.nim +++ b/compiler/renderer.nim @@ -1148,6 +1148,14 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) = putWithSpace(g, tkImport, "import") gcomma(g, n, emptyContext, 1) putNL(g) + of nkImportExceptStmt: + putWithSpace(g, tkImport, "import") + gsub(g, n.sons[0]) + put(g, tkSpaces, Space) + putWithSpace(g, tkExcept, "except") + gcommaAux(g, n, g.indent, 1) + gcoms(g) + putNL(g) of nkIncludeStmt: putWithSpace(g, tkInclude, "include") gcoms(g) @@ -1155,6 +1163,13 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) = gcommaAux(g, n, g.indent) dedent(g) putNL(g) + of nkExportStmt: + putWithSpace(g, tkExport, "export") + gcoms(g) + indentNL(g) + gcommaAux(g, n, g.indent) + dedent(g) + putNL(g) of nkCommentStmt: gcoms(g) optNL(g) |