ast2 pragmas for types
This commit is contained in:
parent
c5e978c2ef
commit
e98564528e
2 changed files with 25 additions and 8 deletions
|
|
@ -192,8 +192,13 @@ proc addPragma(nimState: NimState, node: TSNode, pragma: PNode, name: string, va
|
||||||
colExpr.add value
|
colExpr.add value
|
||||||
pragma.add colExpr
|
pragma.add colExpr
|
||||||
|
|
||||||
|
proc addPragma(nimState: NimState, node: TSNode, pragma: PNode, pragmas: seq[string]) =
|
||||||
|
# Add sequence of pragmas to an existing nkPragma tree
|
||||||
|
for name in pragmas:
|
||||||
|
nimState.addPragma(node, pragma, name)
|
||||||
|
|
||||||
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 a table of name:value pragmas to an existing nkPragma tree
|
||||||
for name, value in pragmas.pairs:
|
for name, value in pragmas.pairs:
|
||||||
nimState.addPragma(node, pragma, name, value)
|
nimState.addPragma(node, pragma, name, value)
|
||||||
|
|
||||||
|
|
@ -212,7 +217,7 @@ proc newPragma(nimState: NimState, node: TSNode, name: string, value: PNode = ni
|
||||||
result = newNode(nkPragma)
|
result = newNode(nkPragma)
|
||||||
nimState.addPragma(node, result, name, value)
|
nimState.addPragma(node, result, name, value)
|
||||||
|
|
||||||
proc newPragma(nimState: NimState, node: TSNode, pragmas: OrderedTable[string, PNode]): PNode =
|
proc newPragma(nimState: NimState, node: TSNode, pragmas: seq[string] | OrderedTable[string, PNode]): PNode =
|
||||||
# Create nkPragma tree for multiple name:value
|
# Create nkPragma tree for multiple name:value
|
||||||
result = newNode(nkPragma)
|
result = newNode(nkPragma)
|
||||||
nimState.addPragma(node, result, pragmas)
|
nimState.addPragma(node, result, pragmas)
|
||||||
|
|
@ -237,13 +242,13 @@ proc newPragmaExpr(nimState: NimState, node: TSNode, ident: PNode, name: string,
|
||||||
result.add ident
|
result.add ident
|
||||||
result.add nimState.newPragma(node, name, value)
|
result.add nimState.newPragma(node, name, value)
|
||||||
|
|
||||||
proc newPragmaExpr(nimState: NimState, node: TSNode, ident: PNode, pragmas: OrderedTable[string, PNode]): PNode {.used.} =
|
proc newPragmaExpr(nimState: NimState, node: TSNode, ident: PNode, pragmas: seq[string] | OrderedTable[string, PNode]): PNode =
|
||||||
# Create nkPragmaExpr tree for multiple name:value
|
# Create nkPragmaExpr tree for multiple name:value
|
||||||
result = newNode(nkPragmaExpr)
|
result = newNode(nkPragmaExpr)
|
||||||
result.add ident
|
result.add ident
|
||||||
result.add nimState.newPragma(node, pragmas)
|
result.add nimState.newPragma(node, pragmas)
|
||||||
|
|
||||||
proc newTypeIdent(nimState: NimState, node: TSNode, fname = "", union = false): PNode =
|
proc newTypeIdent(nimState: NimState, node: TSNode, fname = "", pragmas: seq[string] = @[]): PNode =
|
||||||
# Create nkTypeDef PNode with first ident
|
# Create nkTypeDef PNode with first ident
|
||||||
#
|
#
|
||||||
# If `fname`, use it instead of node.getAtom() for name
|
# If `fname`, use it instead of node.getAtom() for name
|
||||||
|
|
@ -258,8 +263,8 @@ proc newTypeIdent(nimState: NimState, node: TSNode, fname = "", union = false):
|
||||||
ident = nimState.getIdent(name, info)
|
ident = nimState.getIdent(name, info)
|
||||||
|
|
||||||
prident =
|
prident =
|
||||||
if union:
|
if pragmas.nBl and not ident.isNil:
|
||||||
nimState.newPragmaExpr(node, ident, "union")
|
nimState.newPragmaExpr(node, ident, pragmas)
|
||||||
else:
|
else:
|
||||||
ident
|
ident
|
||||||
|
|
||||||
|
|
@ -509,9 +514,15 @@ proc addTypeObject(nimState: NimState, node: TSNode, typeDef: PNode = nil, fname
|
||||||
# If `fname` is set, use it as the name when creating new PNode
|
# If `fname` is set, use it as the name when creating new PNode
|
||||||
decho("addTypeObject()")
|
decho("addTypeObject()")
|
||||||
let
|
let
|
||||||
|
pragmas =
|
||||||
|
if union:
|
||||||
|
@["union", "bycopy"]
|
||||||
|
else:
|
||||||
|
@["bycopy"]
|
||||||
|
|
||||||
typeDef =
|
typeDef =
|
||||||
if typeDef.isNil:
|
if typeDef.isNil:
|
||||||
nimState.newTypeIdent(node, fname, union = union)
|
nimState.newTypeIdent(node, fname, pragmas)
|
||||||
else:
|
else:
|
||||||
typeDef
|
typeDef
|
||||||
|
|
||||||
|
|
@ -546,6 +557,12 @@ proc addTypeObject(nimState: NimState, node: TSNode, typeDef: PNode = nil, fname
|
||||||
|
|
||||||
typeDef.add obj
|
typeDef.add obj
|
||||||
|
|
||||||
|
# If typeDef was passed in, need to add pragmas if any
|
||||||
|
if pragmas.nBl and typeDef[0].kind != nkPragmaExpr:
|
||||||
|
let
|
||||||
|
npexpr = nimState.newPragmaExpr(node, typedef[0], pragmas)
|
||||||
|
typedef[0] = npexpr
|
||||||
|
|
||||||
# nkTypeSection.add
|
# nkTypeSection.add
|
||||||
nimState.typeSection.add typeDef
|
nimState.typeSection.add typeDef
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -958,7 +958,7 @@ macro getHeader*(header: static[string], giturl: static[string] = "", dlurl: sta
|
||||||
preBuild = newIdentNode(name & "PreBuild")
|
preBuild = newIdentNode(name & "PreBuild")
|
||||||
|
|
||||||
# Regex for library search
|
# Regex for library search
|
||||||
lre = "(lib)?$1[_]?(static)?[0-9.\\-]*\\"
|
lre = "(lib)?$1[_-]?(static)?[0-9.\\-]*\\"
|
||||||
|
|
||||||
# If -d:xxx set with setDefines()
|
# If -d:xxx set with setDefines()
|
||||||
stdVal = gDefines.hasKey(stdStr)
|
stdVal = gDefines.hasKey(stdStr)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue