aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Viswanathan <dev@genotrance.com>2020-01-04 11:55:15 -0600
committerGanesh Viswanathan <dev@genotrance.com>2020-01-04 11:55:15 -0600
commit27e30e30f72780bfcfcc7960d3cdc2ab929d11fc (patch)
tree6e4299bd2c72c69921ea54f23ba9037bafe5fa0a
parent0965eea3e97e64d8993a5e97387a173a4f581699 (diff)
downloadnimterop-27e30e30f72780bfcfcc7960d3cdc2ab929d11fc.tar.gz
nimterop-27e30e30f72780bfcfcc7960d3cdc2ab929d11fc.zip
Upgrade tree-sitter version, collapse duplicate if, begin func type
-rw-r--r--nimterop/ast2.nim153
-rw-r--r--nimterop/setup.nim6
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();