diff options
| author | Ganesh Viswanathan <dev@genotrance.com> | 2018-11-20 17:02:37 -0600 |
|---|---|---|
| committer | Ganesh Viswanathan <dev@genotrance.com> | 2018-11-20 17:02:37 -0600 |
| commit | 882b38f4f642b4d351836f1f1f9645a46b3e7610 (patch) | |
| tree | 392242f11da9796d816f45a60d219c56f03c3f91 | |
| parent | b6ca0a815a5a651ed90b2150fdda5ecf1bac9632 (diff) | |
| download | nimterop-882b38f4f642b4d351836f1f1f9645a46b3e7610.tar.gz nimterop-882b38f4f642b4d351836f1f1f9645a46b3e7610.zip | |
Fix typedef struct X X
| -rw-r--r-- | nimterop/ast.nim | 14 |
1 files 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", " ") |
