first steps for the 'export' feature
This commit is contained in:
parent
c43bf78000
commit
0d19de18cc
5 changed files with 114 additions and 175 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue