Fix undefined identifiers resulting in incorrect types
This commit is contained in:
parent
fc587fae03
commit
32c9843548
3 changed files with 30 additions and 2 deletions
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue