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) =
|
proc addTypeObject(nimState: NimState, node: TSNode) =
|
||||||
# Add a type of object
|
# Add a type of object
|
||||||
let
|
let
|
||||||
|
# TODO - check blank and override
|
||||||
typeDef = nimState.newTypeIdent(node)
|
typeDef = nimState.newTypeIdent(node)
|
||||||
|
|
||||||
# type X* = object
|
# type X* = object
|
||||||
|
|
@ -141,11 +142,11 @@ proc addTypeTyped(nimState: NimState, node: TSNode) =
|
||||||
# Add a type of a specific type
|
# Add a type of a specific type
|
||||||
let
|
let
|
||||||
# node[1] = identifer = name
|
# node[1] = identifer = name
|
||||||
|
# TODO - check blank and override
|
||||||
typeDef = nimState.newTypeIdent(node[1])
|
typeDef = nimState.newTypeIdent(node[1])
|
||||||
|
|
||||||
# node[0] = identifier = type name
|
# node[0] = identifier = type name
|
||||||
(name, info) = nimState.getNameInfo(node[0].getAtom(), nskType)
|
(name, info) = nimState.getNameInfo(node[0].getAtom(), nskType)
|
||||||
# TODO - check blank and override
|
|
||||||
ident = nimState.getIdent(name, info, exported = false)
|
ident = nimState.getIdent(name, info, exported = false)
|
||||||
|
|
||||||
# node[1] could have nested pointers
|
# node[1] could have nested pointers
|
||||||
|
|
@ -178,14 +179,14 @@ proc addTypeTyped(nimState: NimState, node: TSNode) =
|
||||||
nimState.printDebug(typeDef)
|
nimState.printDebug(typeDef)
|
||||||
|
|
||||||
proc addTypeArray(nimState: NimState, node: TSNode) =
|
proc addTypeArray(nimState: NimState, node: TSNode) =
|
||||||
# Add a type of a array type
|
# Add a type of array type
|
||||||
let
|
let
|
||||||
# node[1] = identifer = name
|
# node[1] = identifer = name
|
||||||
|
# TODO - check blank and override
|
||||||
typeDef = nimState.newTypeIdent(node[1])
|
typeDef = nimState.newTypeIdent(node[1])
|
||||||
|
|
||||||
# node[0] = identifier = type name
|
# node[0] = identifier = type name
|
||||||
(name, info) = nimState.getNameInfo(node[0].getAtom(), nskType)
|
(name, info) = nimState.getNameInfo(node[0].getAtom(), nskType)
|
||||||
# TODO - check blank and override
|
|
||||||
ident = nimState.getIdent(name, info, exported = false)
|
ident = nimState.getIdent(name, info, exported = false)
|
||||||
|
|
||||||
# Top-most array declarator
|
# Top-most array declarator
|
||||||
|
|
@ -226,6 +227,27 @@ proc addTypeArray(nimState: NimState, node: TSNode) =
|
||||||
|
|
||||||
nimState.printDebug(typeDef)
|
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) =
|
proc addType(nimState: NimState, node: TSNode) =
|
||||||
nimState.printDebug(node)
|
nimState.printDebug(node)
|
||||||
|
|
||||||
|
|
@ -279,69 +301,72 @@ proc addType(nimState: NimState, node: TSNode) =
|
||||||
adecl = node[1].anyChildInTree("array_declarator")
|
adecl = node[1].anyChildInTree("array_declarator")
|
||||||
if fdlist.isNil():
|
if fdlist.isNil():
|
||||||
if adecl.isNil and fdecl.isNil:
|
if adecl.isNil and fdecl.isNil:
|
||||||
if not sspec.isNil:
|
# typedef X Y;
|
||||||
# typedef struct X Y;
|
# typedef X *Y;
|
||||||
# typedef struct X *Y;
|
# typedef struct X Y;
|
||||||
#
|
# typedef struct X *Y;
|
||||||
# (type_definition
|
#
|
||||||
# (struct_specifier
|
# (type_definition
|
||||||
# (type_identifier)
|
# (type_identifier|primitive_type|)
|
||||||
# )
|
# (struct_specifier
|
||||||
# (pointer_declarator - optional, nested
|
# (type_identifier)
|
||||||
# (type_identifier)
|
# )
|
||||||
# )
|
#
|
||||||
# )
|
# (pointer_declarator - optional, nested
|
||||||
nimState.addTypeTyped(node)
|
# (type_identifier)
|
||||||
else:
|
# )
|
||||||
# typedef X Y;
|
# )
|
||||||
# typedef X *Y;
|
nimState.addTypeTyped(node)
|
||||||
#
|
|
||||||
# (type_definition
|
|
||||||
# (type_identifier|primitive_type)
|
|
||||||
# (pointer_declarator - optional, nested
|
|
||||||
# (type_identifier)
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
nimState.addTypeTyped(node)
|
|
||||||
elif not fdecl.isNil:
|
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:
|
elif not adecl.isNil:
|
||||||
if not sspec.isNil:
|
# typedef struct X Y[a][..];
|
||||||
# typedef struct X Y[a][..];
|
# typedef struct X *Y[a][..];
|
||||||
# typedef struct X *Y[a][..];
|
# typedef struct X *(*Y)[a][..];
|
||||||
# typedef struct X *(*Y)[a][..];
|
#
|
||||||
#
|
# (type_definition
|
||||||
# (type_definition
|
# (type_identifier|primitive_type|)
|
||||||
# (struct_specifier
|
# (struct_specifier
|
||||||
# (type_identifier)
|
# (type_identifier)
|
||||||
# )
|
# )
|
||||||
# (pointer_declarator - optional, nested
|
#
|
||||||
# (array_declarator - nested
|
# (pointer_declarator - optional, nested
|
||||||
# (pointer_declarator - optional, nested
|
# (array_declarator - nested
|
||||||
# (type_identifier)
|
# (pointer_declarator - optional, nested
|
||||||
# )
|
# (type_identifier)
|
||||||
# (number_literal)
|
# )
|
||||||
# )
|
# (number_literal)
|
||||||
# )
|
# )
|
||||||
# )
|
# )
|
||||||
nimState.addTypeArray(node)
|
# )
|
||||||
else:
|
nimState.addTypeArray(node)
|
||||||
# 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)
|
|
||||||
|
|
||||||
proc addEnum(nimState: NimState, node: TSNode) =
|
proc addEnum(nimState: NimState, node: TSNode) =
|
||||||
nimState.printDebug(node)
|
nimState.printDebug(node)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ proc treesitterSetup*() =
|
||||||
gitPull("https://github.com/tree-sitter/tree-sitter", cacheDir / "treesitter", """
|
gitPull("https://github.com/tree-sitter/tree-sitter", cacheDir / "treesitter", """
|
||||||
lib/include/*
|
lib/include/*
|
||||||
lib/src/*
|
lib/src/*
|
||||||
""", "0.15.5")
|
""", "0.16.2")
|
||||||
|
|
||||||
gitPull("https://github.com/JuliaStrings/utf8proc", cacheDir / "utf8proc", """
|
gitPull("https://github.com/JuliaStrings/utf8proc", cacheDir / "utf8proc", """
|
||||||
*.c
|
*.c
|
||||||
|
|
@ -36,7 +36,7 @@ src/*.h
|
||||||
src/*.c
|
src/*.c
|
||||||
src/*.cc
|
src/*.cc
|
||||||
src/tree_sitter/parser.h
|
src/tree_sitter/parser.h
|
||||||
""", "v0.15.0")
|
""", "v0.16.0")
|
||||||
|
|
||||||
writeFile(cacheDir / "treesitter_c" / "src" / "api.h", """
|
writeFile(cacheDir / "treesitter_c" / "src" / "api.h", """
|
||||||
const TSLanguage *tree_sitter_c();
|
const TSLanguage *tree_sitter_c();
|
||||||
|
|
@ -48,7 +48,7 @@ src/*.h
|
||||||
src/*.c
|
src/*.c
|
||||||
src/*.cc
|
src/*.cc
|
||||||
src/tree_sitter/parser.h
|
src/tree_sitter/parser.h
|
||||||
""", "v0.15.0")
|
""", "v0.16.0")
|
||||||
|
|
||||||
writeFile(cacheDir / "treesitter_cpp" / "src" / "api.h", """
|
writeFile(cacheDir / "treesitter_cpp" / "src" / "api.h", """
|
||||||
const TSLanguage *tree_sitter_cpp();
|
const TSLanguage *tree_sitter_cpp();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue