Fix undefined identifiers resulting in incorrect types

This commit is contained in:
Joey Yakimowich-Payne 2020-05-12 16:22:53 -06:00 committed by genotrance
commit 32c9843548
3 changed files with 30 additions and 2 deletions

View file

@ -573,8 +573,12 @@ iterator newIdentDefs(gState: State, name: string, node: TSNode, offset: SomeInt
(pname, _, pinfo) = gState.getNameInfo(node[i].getAtom(), nskField, parent = name)
pident = gState.getIdent(pname, pinfo, exported)
result.add pident
result.add gState.getTypeArray(node[i], tident, name)
result.add newNode(nkEmpty)
let tyArray = gState.getTypeArray(node[i], tident, name)
if tyArray.kind != nkNone:
result.add tyArray
result.add newNode(nkEmpty)
else:
result = nil
else:
result = nil
@ -955,6 +959,8 @@ proc getTypeArray(gState: State, node: TSNode, tident: PNode, name: string): PNo
if size.kind != nkNone:
result = gState.newArrayTree(cnode, result, size)
cnode = cnode[0]
else:
result = newNode(nkNone)
elif cnode.len == 1:
# type name[] = UncheckedArray[type]
result = gState.newArrayTree(cnode, result)
@ -985,6 +991,10 @@ proc addTypeArray(gState: State, node: TSNode) =
name = typeDef.getIdentName()
typ = gState.getTypeArray(node[i], tident, name)
if typ.kind == nkNone:
gecho (&"{gState.getNodeVal(node)} skipped").getCommented()
continue
typeDef.add typ
# type X* = [ptr] array[x, [ptr] Y]

View file

@ -49,6 +49,21 @@ extern "C" {
#define ALLSHL (SHL1 | SHL2 | SHL3)
// const not supported yet
const int SOME_CONST = 8;
struct some_struct_s
{
int x;
};
struct parent_struct_s
{
struct some_struct_s s[SOME_CONST];
};
typedef struct some_struct_s SOME_ARRAY[SOME_CONST];
struct A0;
struct A1 {};
typedef struct A2;

View file

@ -155,6 +155,9 @@ assert typeof(POINTERPOINTERPOINTEREXPR) is (ptr ptr ptr cint)
assert ALLSHL == (SHL1 or SHL2 or SHL3)
assert not compiles(parent_struct_s().s)
assert not defined(SOME_ARRAY)
assert A0 is object
testFields(A0, "f1!cint")
checkPragmas(A0, pHeaderBy, istype = false)