aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Viswanathan <dev@genotrance.com>2019-10-18 10:51:00 -0500
committerGanesh Viswanathan <dev@genotrance.com>2019-10-18 10:51:00 -0500
commit3c7172983975a41d21e6aea7c4a0d6a7734926aa (patch)
tree96447345ce56d7b30769d76afab480f8b073e1c0
parent438160ac2a916ca0e8e18161d0a757e6bb338426 (diff)
downloadnimterop-3c7172983975a41d21e6aea7c4a0d6a7734926aa.tar.gz
nimterop-3c7172983975a41d21e6aea7c4a0d6a7734926aa.zip
onSymbol for overrides
-rw-r--r--nimterop/getters.nim11
-rw-r--r--nimterop/grammar.nim16
-rw-r--r--nimterop/plugin.nim3
3 files changed, 27 insertions, 3 deletions
diff --git a/nimterop/getters.nim b/nimterop/getters.nim
index 7205213..a3220ec 100644
--- a/nimterop/getters.nim
+++ b/nimterop/getters.nim
@@ -127,6 +127,17 @@ proc getIdentifier*(nimState: NimState, name: string, kind: NimSymKind, parent="
else:
result = ""
+proc getOverride*(nimState: NimState, name: string, kind: NimSymKind, parent=""): string =
+ doAssert name.len != 0, "Blank identifier error"
+
+ if nimState.gState.onSymbol != nil:
+ var
+ nname = nimState.getIdentifier(name, kind, parent)
+ sym = Symbol(name: nname, parent: parent, kind: kind)
+ nimState.gState.onSymbol(sym)
+
+ result = sym.override
+
proc getUniqueIdentifier*(nimState: NimState, prefix = ""): string =
var
name = prefix & "_" & nimState.sourceFile.extractFilename().multiReplace([(".", ""), ("-", "")])
diff --git a/nimterop/grammar.nim b/nimterop/grammar.nim
index 89b3223..65b4935 100644
--- a/nimterop/grammar.nim
+++ b/nimterop/grammar.nim
@@ -648,10 +648,22 @@ proc initGrammar(): Grammar =
case $node.tsNodeType()
of "declaration":
if i.name == "identifier":
- echo "# Unknown declaration " & i.val
+ let
+ override = nimState.getOverride(i.val, nskProc)
+
+ if override.len != 0:
+ nimState.procStr &= &"{nimState.getComments(true)}\n{override}"
+ else:
+ nimState.procStr &= &"{nimState.getComments(true)}\n# Unable to wrap declaration '{i.val}'"
else:
if i.name == "type_identifier":
- echo "# Unknown type " & i.val
+ let
+ override = nimState.getOverride(i.val, nskType)
+
+ if override.len != 0:
+ nimState.typeStr &= &"{nimState.getComments()}\n{override}"
+ else:
+ nimState.typeStr &= &"{nimState.getComments()}\n # Unable to wrap type '{i.val}'"
))
proc initRegex(ast: ref Ast) =
diff --git a/nimterop/plugin.nim b/nimterop/plugin.nim
index 646c83c..333723f 100644
--- a/nimterop/plugin.nim
+++ b/nimterop/plugin.nim
@@ -5,5 +5,6 @@ type
name*: string
parent*: string
kind*: NimSymKind
+ override*: string
- OnSymbol* = proc(sym: var Symbol) {.cdecl.} \ No newline at end of file
+ OnSymbol* = proc(sym: var Symbol) {.cdecl.}