Upgrade tree-sitter version, collapse duplicate if, begin func type
This commit is contained in:
parent
0965eea3e9
commit
27e30e30f7
2 changed files with 92 additions and 67 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue