Bitfield support, space after comments
This commit is contained in:
parent
9387de8638
commit
68ab2dbec1
4 changed files with 31 additions and 14 deletions
|
|
@ -7,24 +7,28 @@ import "."/[getters, globals, grammar, treesitter/api]
|
||||||
proc saveNodeData(node: TSNode, nimState: NimState): bool =
|
proc saveNodeData(node: TSNode, nimState: NimState): bool =
|
||||||
let name = $node.tsNodeType()
|
let name = $node.tsNodeType()
|
||||||
if name in gAtoms:
|
if name in gAtoms:
|
||||||
var
|
|
||||||
val = nimState.getNodeVal(node)
|
|
||||||
|
|
||||||
if name == "primitive_type" and node.tsNodeParent.tsNodeType() == "sized_type_specifier":
|
|
||||||
return true
|
|
||||||
|
|
||||||
if name in ["number_literal", "identifier"] and $node.tsNodeParent.tsNodeType() in gExpressions:
|
|
||||||
return true
|
|
||||||
|
|
||||||
if name in ["primitive_type", "sized_type_specifier"]:
|
|
||||||
val = val.getType()
|
|
||||||
|
|
||||||
let
|
let
|
||||||
pname = node.getPxName(1)
|
pname = node.getPxName(1)
|
||||||
ppname = node.getPxName(2)
|
ppname = node.getPxName(2)
|
||||||
pppname = node.getPxName(3)
|
pppname = node.getPxName(3)
|
||||||
ppppname = node.getPxName(4)
|
ppppname = node.getPxName(4)
|
||||||
|
|
||||||
|
var
|
||||||
|
val = nimState.getNodeVal(node)
|
||||||
|
|
||||||
|
if name == "primitive_type" and pname == "sized_type_specifier":
|
||||||
|
return true
|
||||||
|
|
||||||
|
if name in ["number_literal", "identifier"] and pname in gExpressions:
|
||||||
|
return true
|
||||||
|
|
||||||
|
if name in ["number_literal"] and pname == "bitfield_clause":
|
||||||
|
nimState.data.add(("bitfield_clause", val))
|
||||||
|
return true
|
||||||
|
|
||||||
|
if name in ["primitive_type", "sized_type_specifier"]:
|
||||||
|
val = val.getType()
|
||||||
|
|
||||||
if node.tsNodePrevNamedSibling().tsNodeIsNull():
|
if node.tsNodePrevNamedSibling().tsNodeIsNull():
|
||||||
if pname == "pointer_declarator":
|
if pname == "pointer_declarator":
|
||||||
if ppname notin ["function_declarator", "array_declarator"]:
|
if ppname notin ["function_declarator", "array_declarator"]:
|
||||||
|
|
@ -43,7 +47,7 @@ proc saveNodeData(node: TSNode, nimState: NimState): bool =
|
||||||
|
|
||||||
nimState.data.add((name, val))
|
nimState.data.add((name, val))
|
||||||
|
|
||||||
if node.tsNodeType() == "field_identifier" and
|
if name == "field_identifier" and
|
||||||
pname == "pointer_declarator" and
|
pname == "pointer_declarator" and
|
||||||
ppname == "function_declarator":
|
ppname == "function_declarator":
|
||||||
if pppname == "pointer_declarator":
|
if pppname == "pointer_declarator":
|
||||||
|
|
|
||||||
|
|
@ -290,6 +290,11 @@ proc initGrammar(): Grammar =
|
||||||
flen = nimState.data[i+1].val.getNimExpression()
|
flen = nimState.data[i+1].val.getNimExpression()
|
||||||
nimState.typeStr &= &"{nimState.getComments()}\n {fname}*: {aptr}array[{flen}, {getPtrType(fptr&ftyp)}]"
|
nimState.typeStr &= &"{nimState.getComments()}\n {fname}*: {aptr}array[{flen}, {getPtrType(fptr&ftyp)}]"
|
||||||
i += 2
|
i += 2
|
||||||
|
elif i+1 < nimState.data.len-fend and nimState.data[i+1].name == "bitfield_clause":
|
||||||
|
let
|
||||||
|
size = nimState.data[i+1].val
|
||||||
|
nimState.typeStr &= &"{nimState.getComments()}\n {fname}* {{.bitsize: {size}.}} : {getPtrType(fptr&ftyp)} "
|
||||||
|
i += 2
|
||||||
elif i+1 < nimState.data.len-fend and nimState.data[i+1].name == "function_declarator":
|
elif i+1 < nimState.data.len-fend and nimState.data[i+1].name == "function_declarator":
|
||||||
var
|
var
|
||||||
pout, pname, ptyp, pptr = ""
|
pout, pname, ptyp, pptr = ""
|
||||||
|
|
@ -327,6 +332,9 @@ proc initGrammar(): Grammar =
|
||||||
let
|
let
|
||||||
fieldGrammar = &"""
|
fieldGrammar = &"""
|
||||||
(field_identifier!)
|
(field_identifier!)
|
||||||
|
(bitfield_clause!
|
||||||
|
(number_literal)
|
||||||
|
)
|
||||||
(array_declarator!
|
(array_declarator!
|
||||||
(field_identifier!)
|
(field_identifier!)
|
||||||
(pointer_declarator
|
(pointer_declarator
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ typedef struct {
|
||||||
enum ENUM field3[TEST_INT];
|
enum ENUM field3[TEST_INT];
|
||||||
int *field4[TEST_INT];
|
int *field4[TEST_INT];
|
||||||
ENUM4 *field5[TEST_INT+TEST_INT];
|
ENUM4 *field5[TEST_INT+TEST_INT];
|
||||||
|
int field6 : 1;
|
||||||
} STRUCT4;
|
} STRUCT4;
|
||||||
|
|
||||||
typedef struct struct5 {
|
typedef struct struct5 {
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,10 @@ when defined(cpp):
|
||||||
else:
|
else:
|
||||||
s4.field3[3] = enum1
|
s4.field3[3] = enum1
|
||||||
|
|
||||||
|
s4.field6 = 1
|
||||||
|
s4.field6 += 1
|
||||||
|
check s4.field6 == 0
|
||||||
|
|
||||||
s5.tci = test_call_int
|
s5.tci = test_call_int
|
||||||
s5.tcp = test_call_param
|
s5.tcp = test_call_param
|
||||||
s5.tcp8 = test_call_param8
|
s5.tcp8 = test_call_param8
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue