Clean up ast2 pragma procs

This commit is contained in:
Ganesh Viswanathan 2020-03-18 13:34:14 -05:00
commit 8fadeeb76c

View file

@ -107,23 +107,27 @@ proc addConst(nimState: NimState, node: TSNode) =
nimState.printDebug(constDef) nimState.printDebug(constDef)
proc addPragma(nimState: NimState, node: TSNode, pragma: PNode, name: string, value: PNode = nil) =
# Add pragma to an existing nkPragma tree
let
(_, pinfo) = nimState.getNameInfo(node.getAtom(), nskUnknown)
pident = nimState.getIdent(name, pinfo, exported = false)
if value.isNil:
pragma.add pident
else:
let
colExpr = newNode(nkExprColonExpr)
colExpr.add pident
colExpr.add value
pragma.add colExpr
proc addPragma(nimState: NimState, node: TSNode, pragma: PNode, pragmas: OrderedTable[string, PNode]) = proc addPragma(nimState: NimState, node: TSNode, pragma: PNode, pragmas: OrderedTable[string, PNode]) =
# Add pragmas to an existing nkPragma tree # Add pragmas to an existing nkPragma tree
for name, value in pragmas.pairs: for name, value in pragmas.pairs:
let nimState.addPragma(node, pragma, name, value)
(_, pinfo) = nimState.getNameInfo(node.getAtom(), nskUnknown)
pident = nimState.getIdent(name, pinfo, exported = false)
if value.isNil:
pragma.add pident
else:
let
colExpr = newNode(nkExprColonExpr)
colExpr.add pident
colExpr.add value
pragma.add colExpr
proc newPragma(nimState: NimState, node: TSNode, pragmas: OrderedTable[string, PNode]): PNode = proc newPragma(nimState: NimState, node: TSNode, name: string, value: PNode = nil): PNode =
# Create nkPragma tree for name:value # Create nkPragma tree for name:value
# #
# {.name1, name2: value2.} # {.name1, name2: value2.}
@ -136,10 +140,15 @@ proc newPragma(nimState: NimState, node: TSNode, pragmas: OrderedTable[string, P
# ) # )
# ) # )
result = newNode(nkPragma) result = newNode(nkPragma)
nimState.addPragma(node, result, name, value)
proc newPragma(nimState: NimState, node: TSNode, pragmas: OrderedTable[string, PNode]): PNode =
# Create nkPragma tree for multiple name:value
result = newNode(nkPragma)
nimState.addPragma(node, result, pragmas) nimState.addPragma(node, result, pragmas)
proc newPragmaExpr(nimState: NimState, node: TSNode, ident: PNode, pragmas: OrderedTable[string, PNode]): PNode = proc newPragmaExpr(nimState: NimState, node: TSNode, ident: PNode, name: string, value: PNode = nil): PNode =
# Create nkPragmaExpr tree # Create nkPragmaExpr tree for name:value
# #
# nkPragmaExpr( # nkPragmaExpr(
# nkPostfix( # nkPostfix(
@ -156,6 +165,12 @@ proc newPragmaExpr(nimState: NimState, node: TSNode, ident: PNode, pragmas: Orde
# ) # )
result = newNode(nkPragmaExpr) result = newNode(nkPragmaExpr)
result.add ident result.add ident
result.add nimState.newPragma(node, name, value)
proc newPragmaExpr(nimState: NimState, node: TSNode, ident: PNode, pragmas: OrderedTable[string, PNode]): PNode =
# Create nkPragmaExpr tree for multiple name:value
result = newNode(nkPragmaExpr)
result.add ident
result.add nimState.newPragma(node, pragmas) result.add nimState.newPragma(node, pragmas)
proc newTypeIdent(nimState: NimState, node: TSNode, override = "", union = false): PNode = proc newTypeIdent(nimState: NimState, node: TSNode, override = "", union = false): PNode =
@ -172,9 +187,7 @@ proc newTypeIdent(nimState: NimState, node: TSNode, override = "", union = false
nimState.getIdent(name, info) nimState.getIdent(name, info)
prident = prident =
if union: if union:
var nimState.newPragmaExpr(node, ident, "union")
empty: PNode
nimState.newPragmaExpr(node, ident, {"union": empty}.toOrderedTable())
else: else:
ident ident
@ -1017,31 +1030,22 @@ proc setupPragmas(nimState: NimState, root: TSNode, fullpath: string) =
var var
impPragma = newNode(nkPragma) impPragma = newNode(nkPragma)
impCPragma = newNode(nkPragma) impCPragma = newNode(nkPragma)
empty: PNode
nimState.addPragma(root, impPragma, { nimState.addPragma(root, impPragma, "pragma", nimState.getIdent(nimState.impShort))
"pragma": nimState.getIdent(nimState.impShort), nimState.addPragma(root, impPragma, "importc")
"importc": empty
}.toOrderedTable())
if nimState.includeHeader(): if nimState.includeHeader():
nimState.constSection.add nimState.newConstDef( nimState.constSection.add nimState.newConstDef(
root, name = nimState.currentHeader, val = fullpath) root, name = nimState.currentHeader, val = fullpath)
nimState.addPragma(root, impPragma, { nimState.addPragma(root, impPragma, "header", newStrNode(nkStrLit, nimState.currentHeader))
"header": newStrNode(nkStrLit, nimState.currentHeader)
}.toOrderedTable())
nimState.addPragma(root, impCPragma, { nimState.addPragma(root, impCPragma, "pragma", nimState.getIdent(nimState.impShort & "C"))
"pragma": nimState.getIdent(nimState.impShort & "C"), nimState.addPragma(root, impCPragma, nimState.impShort)
nimState.impShort: empty, nimState.addPragma(root, impCPragma, "cdecl")
"cdecl": empty
}.toOrderedTable())
if nimState.gState.dynlib.nBl: if nimState.gState.dynlib.nBl:
nimState.addPragma(root, impCPragma, { nimState.addPragma(root, impCPragma, "dynlib", nimState.getIdent(nimState.gState.dynlib))
"dynlib": nimState.getIdent(nimState.gState.dynlib)
}.toOrderedTable())
nimState.pragmaSection.add impPragma nimState.pragmaSection.add impPragma
nimState.pragmaSection.add impCPragma nimState.pragmaSection.add impCPragma