Make undefined constants keep types
This commit is contained in:
parent
485770dfaf
commit
0deb2939bf
4 changed files with 22 additions and 27 deletions
|
|
@ -574,11 +574,8 @@ iterator newIdentDefs(gState: State, name: string, node: TSNode, offset: SomeInt
|
|||
pident = gState.getIdent(pname, pinfo, exported)
|
||||
result.add pident
|
||||
let tyArray = gState.getTypeArray(node[i], tident, name)
|
||||
if tyArray.kind != nkNone:
|
||||
result.add tyArray
|
||||
result.add newNode(nkEmpty)
|
||||
else:
|
||||
result = nil
|
||||
result.add tyArray
|
||||
result.add newNode(nkEmpty)
|
||||
else:
|
||||
result = nil
|
||||
|
||||
|
|
@ -953,14 +950,16 @@ proc getTypeArray(gState: State, node: TSNode, tident: PNode, name: string): PNo
|
|||
for i in 0 ..< acount:
|
||||
if cnode.len == 2:
|
||||
# type name[X] => array[X, type]
|
||||
let
|
||||
# Size of array could be a Nim expression
|
||||
size = gState.parseCExpression(gState.getNodeVal(cnode[1]))
|
||||
if size.kind != nkNone:
|
||||
result = gState.newArrayTree(cnode, result, size)
|
||||
cnode = cnode[0]
|
||||
else:
|
||||
result = newNode(nkNone)
|
||||
var size: PNode
|
||||
let cnodeVal = gState.getNodeVal(cnode[1])
|
||||
# Size of array could be a Nim expression
|
||||
size = gState.parseCExpression(cnodeVal)
|
||||
if size.kind == nkNone:
|
||||
# If the size could not be parsed, leave it alone
|
||||
size = gState.getIdent(cnodeVal)
|
||||
|
||||
result = gState.newArrayTree(cnode, result, size)
|
||||
cnode = cnode[0]
|
||||
elif cnode.len == 1:
|
||||
# type name[] = UncheckedArray[type]
|
||||
result = gState.newArrayTree(cnode, result)
|
||||
|
|
@ -991,10 +990,6 @@ 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]
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import "."/treesitter/[api, c, cpp]
|
|||
|
||||
import "."/[ast, ast2, build, globals, getters, grammar, tshelp]
|
||||
|
||||
{.passC: "-DNIMTEROP".}
|
||||
|
||||
proc process(gState: State, path: string, astTable: AstTable) =
|
||||
doAssert existsFile(path), &"Invalid path {path}"
|
||||
|
||||
|
|
|
|||
|
|
@ -42,17 +42,16 @@ extern "C" {
|
|||
#define REG_STR "regular string"
|
||||
#define NOTSUPPORTEDSTR "not a " REG_STR
|
||||
|
||||
#define NULLCHAR '\0'/* comments should not break things*/
|
||||
#define OCTCHAR '\012' // nor should this comment
|
||||
#define NULLCHAR '\0'
|
||||
#define OCTCHAR '\012'
|
||||
#define HEXCHAR '\xFE'
|
||||
#define TRICKYSTR "\x4E\034\nfoo\0\'\"\r\v\a\b\e\f\t\\\?bar"
|
||||
|
||||
#define ALLSHL (SHL1 | SHL2 | SHL3)
|
||||
|
||||
// disable for windows for now
|
||||
#ifndef _WIN32
|
||||
// const not supported yet
|
||||
const int SOME_CONST = 8;
|
||||
#ifdef NIMTEROP
|
||||
#define SOME_CONST 8
|
||||
#endif
|
||||
|
||||
struct some_struct_s
|
||||
{
|
||||
|
|
@ -65,7 +64,6 @@ struct parent_struct_s
|
|||
};
|
||||
|
||||
typedef struct some_struct_s SOME_ARRAY[SOME_CONST];
|
||||
#endif
|
||||
|
||||
struct A0;
|
||||
struct A1 {};
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ cOverride:
|
|||
type
|
||||
A1* = A0
|
||||
|
||||
cDefine("SOME_CONST=100")
|
||||
cImport(path, flags="-f:ast2 -ENK_,SDL_ -GVICE=SLICE -TMyInt=cint" & flags)
|
||||
|
||||
proc getPragmas(n: NimNode): HashSet[string] =
|
||||
|
|
@ -155,9 +156,8 @@ assert typeof(POINTERPOINTERPOINTEREXPR) is (ptr ptr ptr cint)
|
|||
|
||||
assert ALLSHL == (SHL1 or SHL2 or SHL3)
|
||||
|
||||
when not defined(windows):
|
||||
assert not compiles(parent_struct_s().s)
|
||||
assert not defined(SOME_ARRAY)
|
||||
assert typeof(parent_struct_s().s) is array[100, some_struct_s]
|
||||
assert typeof(SOME_ARRAY) is array[100, some_struct_s]
|
||||
|
||||
assert A0 is object
|
||||
testFields(A0, "f1!cint")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue