From 882b38f4f642b4d351836f1f1f9645a46b3e7610 Mon Sep 17 00:00:00 2001 From: Ganesh Viswanathan Date: Tue, 20 Nov 2018 17:02:37 -0600 Subject: Fix typedef struct X X --- nimterop/ast.nim | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/nimterop/ast.nim b/nimterop/ast.nim index 1a30ad7..474c918 100644 --- a/nimterop/ast.nim +++ b/nimterop/ast.nim @@ -28,7 +28,7 @@ proc preprocDef(node: ref Ast) = if name.nBl and val.nBl and name notin gConsts: gConsts.add(name) - if val.getType().nBl: + if val.getLit().nBl: # #define NAME VALUE gConstStr &= &" {name.getIdentifier()}* = {val} # preprocDef()\n" @@ -65,13 +65,17 @@ proc structSpecifier(node: ref Ast, name = "") = of "type_identifier": let typ = getNodeValIf(node.children[0], "type_identifier") if typ.nBl: - # typedef struct X Y gTypes.add(name) - gTypeStr &= &" {name}* = {typ} #1 structSpecifier()\n" + if name != typ: + # typedef struct X Y + gTypeStr &= &" {name}* = {typ} #1 structSpecifier()\n" + else: + # typedef struct X X + gTypeStr &= &" {name}* {{.importc: \"{name}\", header: {gCurrentHeader}, bycopy.}} = object #2 structSpecifier()\n" of "field_declaration_list": # typedef struct { fields } X - stmt = &" {name}* {{.importc: \"{name}\", header: {gCurrentHeader}, bycopy.}} = object #2 structSpecifier()\n" + stmt = &" {name}* {{.importc: \"{name}\", header: {gCurrentHeader}, bycopy.}} = object #3 structSpecifier()\n" for field in node.children[0].children: let ts = typeScan(field, "field_declaration", "field_identifier", " ") @@ -85,7 +89,7 @@ proc structSpecifier(node: ref Ast, name = "") = let ename = getNodeValIf(node.children[0], "type_identifier") if ename.nBl and ename notin gTypes: # struct X { fields } - stmt &= &" {ename}* {{.importc: \"struct {ename}\", header: {gCurrentHeader}, bycopy.}} = object #3 structSpecifier()\n" + stmt &= &" {ename}* {{.importc: \"struct {ename}\", header: {gCurrentHeader}, bycopy.}} = object #4 structSpecifier()\n" for field in node.children[1].children: let ts = typeScan(field, "field_declaration", "field_identifier", " ") -- cgit v1.2.3