aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Viswanathan <dev@genotrance.com>2019-01-16 00:11:53 -0600
committerGanesh Viswanathan <dev@genotrance.com>2019-01-16 00:11:53 -0600
commite9a5ccc007207c89dfb6086dccb816f72fe492ee (patch)
treebaec1d01df6c7831a463e32618b4415d8e9b9d0c
parent80b47c9d4edad831302cc543ce8a8cc5513d72ab (diff)
downloadnimterop-e9a5ccc007207c89dfb6086dccb816f72fe492ee.tar.gz
nimterop-e9a5ccc007207c89dfb6086dccb816f72fe492ee.zip
cstring support
-rw-r--r--nimterop/getters.nim9
-rw-r--r--nimterop/grammar.nim16
2 files changed, 17 insertions, 8 deletions
diff --git a/nimterop/getters.nim b/nimterop/getters.nim
index bdf92f2..e25f7a9 100644
--- a/nimterop/getters.nim
+++ b/nimterop/getters.nim
@@ -80,6 +80,15 @@ proc getType*(str: string): string =
if gTypeMap.hasKey(result):
result = gTypeMap[result]
+proc getPtrType*(str: string): string =
+ result = case str:
+ of "ptr cchar":
+ "cstring"
+ of "ptr object":
+ "pointer"
+ else:
+ str
+
proc getLit*(str: string): string =
if str.contains(re"^[\-]?[\d]+$") or
str.contains(re"^[\-]?[\d]*\.[\d]+$") or
diff --git a/nimterop/grammar.nim b/nimterop/grammar.nim
index f767ce6..0144073 100644
--- a/nimterop/grammar.nim
+++ b/nimterop/grammar.nim
@@ -85,7 +85,7 @@ proc initGrammar() =
count += 1
i += 1
if ptyp != "object":
- pout &= &"{pname}: {pptr}{ptyp},"
+ pout &= &"{pname}: {getPtrType(pptr&ptyp)},"
# typedef int X
# typedef X Y
@@ -141,7 +141,7 @@ proc initGrammar() =
if pout.len != 0 and pout[^1] == ',':
pout = pout[0 .. ^2]
if typ != "object":
- gStateRT.typeStr &= &" {name}* = proc({pout}): {tptr}{typ} {{.nimcall.}}\n"
+ gStateRT.typeStr &= &" {name}* = proc({pout}): {getPtrType(tptr&typ)} {{.nimcall.}}\n"
else:
gStateRT.typeStr &= &" {name}* = proc({pout}) {{.nimcall.}}\n"
else:
@@ -149,12 +149,12 @@ proc initGrammar() =
if i < gStateRT.data.len and gStateRT.data[i].name in ["identifier", "number_literal"]:
let
flen = gStateRT.data[i].val.getIdentifier()
- gStateRT.typeStr &= &" {name}* = {aptr}array[{flen}, {tptr}{typ}]\n"
+ gStateRT.typeStr &= &" {name}* = {aptr}array[{flen}, {getPtrType(tptr&typ)}]\n"
else:
if name == typ or typ == "object":
gStateRT.typeStr &= &" {name}* = object\n"
else:
- gStateRT.typeStr &= &" {name}* = {tptr}{typ}\n"
+ gStateRT.typeStr &= &" {name}* = {getPtrType(tptr&typ)}\n"
))
proc pStructCommon(ast: ref Ast, node: TSNode, name: string, fstart, fend: int) =
@@ -211,7 +211,7 @@ proc initGrammar() =
if i+1 < gStateRT.data.len-fend and gStateRT.data[i+1].name in ["identifier", "number_literal"]:
let
flen = gStateRT.data[i+1].val.getIdentifier()
- gStateRT.typeStr &= &" {fname}*: {aptr}array[{flen}, {fptr}{ftyp}]\n"
+ gStateRT.typeStr &= &" {fname}*: {aptr}array[{flen}, {getPtrType(fptr&ftyp)}]\n"
i += 2
elif i+1 < gStateRT.data.len-fend and gStateRT.data[i+1].name == "function_declarator":
var
@@ -232,7 +232,7 @@ proc initGrammar() =
if pout.len != 0 and pout[^1] == ',':
pout = pout[0 .. ^2]
if ftyp != "object":
- gStateRT.typeStr &= &" {fname}*: proc({pout}): {fptr}{ftyp} {{.nimcall.}}\n"
+ gStateRT.typeStr &= &" {fname}*: proc({pout}): {getPtrType(fptr&ftyp)} {{.nimcall.}}\n"
else:
gStateRT.typeStr &= &" {fname}*: proc({pout}) {{.nimcall.}}\n"
i += 1
@@ -240,7 +240,7 @@ proc initGrammar() =
if ftyp == "object":
gStateRT.typeStr &= &" {fname}*: pointer\n"
else:
- gStateRT.typeStr &= &" {fname}*: {fptr}{ftyp}\n"
+ gStateRT.typeStr &= &" {fname}*: {getPtrType(fptr&ftyp)}\n"
i += 1
let
@@ -438,7 +438,7 @@ proc initGrammar() =
if fnname notin gStateRT.procs:
gStateRT.procs.add(fnname)
if ftyp != "object":
- gStateRT.procStr &= &"proc {fnname}*({pout}): {fptr}{ftyp} {{.importc: \"{fname}\", header: {gStateRT.currentHeader}.}}\n"
+ gStateRT.procStr &= &"proc {fnname}*({pout}): {getPtrType(fptr&ftyp)} {{.importc: \"{fname}\", header: {gStateRT.currentHeader}.}}\n"
else:
gStateRT.procStr &= &"proc {fnname}*({pout}) {{.importc: \"{fname}\", header: {gStateRT.currentHeader}.}}\n"