diff options
| author | Ganesh Viswanathan <dev@genotrance.com> | 2020-01-04 11:55:15 -0600 |
|---|---|---|
| committer | Ganesh Viswanathan <dev@genotrance.com> | 2020-01-04 11:55:15 -0600 |
| commit | 27e30e30f72780bfcfcc7960d3cdc2ab929d11fc (patch) | |
| tree | 6e4299bd2c72c69921ea54f23ba9037bafe5fa0a | |
| parent | 0965eea3e97e64d8993a5e97387a173a4f581699 (diff) | |
| download | nimterop-27e30e30f72780bfcfcc7960d3cdc2ab929d11fc.tar.gz nimterop-27e30e30f72780bfcfcc7960d3cdc2ab929d11fc.zip | |
Upgrade tree-sitter version, collapse duplicate if, begin func type
| -rw-r--r-- | nimterop/ast2.nim | 153 | ||||
| -rw-r--r-- | nimterop/setup.nim | 6 |
2 files changed, 92 insertions, 67 deletions
diff --git a/nimterop/ast2.nim b/nimterop/ast2.nim index dc1a4b1..9f64eef 100644 --- a/nimterop/ast2.nim +++ b/nimterop/ast2.nim @@ -106,6 +106,7 @@ proc newArrayTree(nimState: NimState, node: TSNode, typ, size: PNode): PNode = proc addTypeObject(nimState: NimState, node: TSNode) = # Add a type of object let + # TODO - check blank and override typeDef = nimState.newTypeIdent(node) # type X* = object @@ -141,11 +142,11 @@ proc addTypeTyped(nimState: NimState, node: TSNode) = # Add a type of a specific type let # node[1] = identifer = name + # TODO - check blank and override typeDef = nimState.newTypeIdent(node[1]) # node[0] = identifier = type name (name, info) = nimState.getNameInfo(node[0].getAtom(), nskType) - # TODO - check blank and override ident = nimState.getIdent(name, info, exported = false) # node[1] could have nested pointers @@ -178,14 +179,14 @@ proc addTypeTyped(nimState: NimState, node: TSNode) = nimState.printDebug(typeDef) proc addTypeArray(nimState: NimState, node: TSNode) = - # Add a type of a array type + # Add a type of array type let # node[1] = identifer = name + # TODO - check blank and override typeDef = nimState.newTypeIdent(node[1]) # node[0] = identifier = type name (name, info) = nimState.getNameInfo(node[0].getAtom(), nskType) - # TODO - check blank and override ident = nimState.getIdent(name, info, exported = false) # Top-most array declarator @@ -226,6 +227,27 @@ proc addTypeArray(nimState: NimState, node: TSNode) = nimState.printDebug(typeDef) +proc addTypeFunc(nimState: NimState, node: TSNode) = + # Add a type of function type + let + # node[1] = identifier = name + # TODO - check blank and override + typeDef = nimState.newTypeIdent(node[1]) + + # node[0] = identifier = return type name + (rname, rinfo) = nimState.getNameInfo(node[0].getAtom(), nskType) + + # node[1] could have nested pointers + count = node[1].getArrayCount() + + # Parameter list + plist = node[1].anyChildInTree("parameter_list") + + var + retType = nimState.getIdent(rname, rinfo) + if count > 0: + retType = newPtrTree(count, retType) + proc addType(nimState: NimState, node: TSNode) = nimState.printDebug(node) @@ -279,69 +301,72 @@ proc addType(nimState: NimState, node: TSNode) = adecl = node[1].anyChildInTree("array_declarator") if fdlist.isNil(): if adecl.isNil and fdecl.isNil: - if not sspec.isNil: - # typedef struct X Y; - # typedef struct X *Y; - # - # (type_definition - # (struct_specifier - # (type_identifier) - # ) - # (pointer_declarator - optional, nested - # (type_identifier) - # ) - # ) - nimState.addTypeTyped(node) - else: - # typedef X Y; - # typedef X *Y; - # - # (type_definition - # (type_identifier|primitive_type) - # (pointer_declarator - optional, nested - # (type_identifier) - # ) - # ) - nimState.addTypeTyped(node) + # typedef X Y; + # typedef X *Y; + # typedef struct X Y; + # typedef struct X *Y; + # + # (type_definition + # (type_identifier|primitive_type|) + # (struct_specifier + # (type_identifier) + # ) + # + # (pointer_declarator - optional, nested + # (type_identifier) + # ) + # ) + nimState.addTypeTyped(node) elif not fdecl.isNil: - discard + # typedef X (*Y)(a1, a2, a3); + # typedef X *(*Y)(a1, a2, a3); + # typedef struct X (*Y)(a1, a2, a3); + # typedef struct X *(*Y)(a1, a2, a3); + # + # (type_definition + # (type_identifier|primitive_type|) + # (struct_specifier + # (type_identifier) + # ) + # + # (pointer_declarator - optional, nested + # (function_declarator + # (parenthesized_declarator + # (pointer_declarator + # (type_identifer) + # ) + # ) + # (parameter_list + # (parameter_declaration + # (struct_specifier|type_identifier|primitive_type|array_declarator|function_declarator) + # (identifier - optional) + # ) + # ) + # ) + # ) + # ) + nimState.addTypeFunc(node) elif not adecl.isNil: - if not sspec.isNil: - # typedef struct X Y[a][..]; - # typedef struct X *Y[a][..]; - # typedef struct X *(*Y)[a][..]; - # - # (type_definition - # (struct_specifier - # (type_identifier) - # ) - # (pointer_declarator - optional, nested - # (array_declarator - nested - # (pointer_declarator - optional, nested - # (type_identifier) - # ) - # (number_literal) - # ) - # ) - # ) - nimState.addTypeArray(node) - else: - # typedef X Y[a][..]; - # typedef X *Y[a][..]; - # typedef X *(*Y)[a][..]; - # - # (type_definition - # (type_identifier|primitive_type) - # (pointer_declarator - optional, nested - # (array_declarator - nested - # (pointer_declarator - optional, nested - # (type_identifier) - # ) - # (number_literal) - # ) - # ) - # ) - nimState.addTypeArray(node) + # typedef struct X Y[a][..]; + # typedef struct X *Y[a][..]; + # typedef struct X *(*Y)[a][..]; + # + # (type_definition + # (type_identifier|primitive_type|) + # (struct_specifier + # (type_identifier) + # ) + # + # (pointer_declarator - optional, nested + # (array_declarator - nested + # (pointer_declarator - optional, nested + # (type_identifier) + # ) + # (number_literal) + # ) + # ) + # ) + nimState.addTypeArray(node) proc addEnum(nimState: NimState, node: TSNode) = nimState.printDebug(node) diff --git a/nimterop/setup.nim b/nimterop/setup.nim index 3f16dd7..cfa9a63 100644 --- a/nimterop/setup.nim +++ b/nimterop/setup.nim @@ -6,7 +6,7 @@ proc treesitterSetup*() = gitPull("https://github.com/tree-sitter/tree-sitter", cacheDir / "treesitter", """ lib/include/* lib/src/* -""", "0.15.5") +""", "0.16.2") gitPull("https://github.com/JuliaStrings/utf8proc", cacheDir / "utf8proc", """ *.c @@ -36,7 +36,7 @@ src/*.h src/*.c src/*.cc src/tree_sitter/parser.h -""", "v0.15.0") +""", "v0.16.0") writeFile(cacheDir / "treesitter_c" / "src" / "api.h", """ const TSLanguage *tree_sitter_c(); @@ -48,7 +48,7 @@ src/*.h src/*.c src/*.cc src/tree_sitter/parser.h -""", "v0.15.0") +""", "v0.16.0") writeFile(cacheDir / "treesitter_cpp" / "src" / "api.h", """ const TSLanguage *tree_sitter_cpp(); |
