diff options
| author | Ganesh Viswanathan <dev@genotrance.com> | 2019-01-16 00:11:53 -0600 |
|---|---|---|
| committer | Ganesh Viswanathan <dev@genotrance.com> | 2019-01-16 00:11:53 -0600 |
| commit | e9a5ccc007207c89dfb6086dccb816f72fe492ee (patch) | |
| tree | baec1d01df6c7831a463e32618b4415d8e9b9d0c | |
| parent | 80b47c9d4edad831302cc543ce8a8cc5513d72ab (diff) | |
| download | nimterop-e9a5ccc007207c89dfb6086dccb816f72fe492ee.tar.gz nimterop-e9a5ccc007207c89dfb6086dccb816f72fe492ee.zip | |
cstring support
| -rw-r--r-- | nimterop/getters.nim | 9 | ||||
| -rw-r--r-- | nimterop/grammar.nim | 16 |
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" |
