diff options
-rw-r--r-- | compiler/ccgtypes.nim | 1 | ||||
-rw-r--r-- | compiler/incremental.nim | 5 | ||||
-rw-r--r-- | compiler/rodimpl.nim | 9 |
3 files changed, 11 insertions, 4 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 1264c0b84..bbfd72354 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -1188,6 +1188,7 @@ proc genTypeInfo(m: BModule, t: PType; info: TLineInfo): Rope = let owner = t.skipTypes(typedescPtrs).owner.getModule if owner != m.module: # make sure the type info is created in the owner module + assert m.g.modules[owner.position] != nil discard genTypeInfo(m.g.modules[owner.position], origType, info) # reference the type info as extern here discard cgsym(m, "TNimType") diff --git a/compiler/incremental.nim b/compiler/incremental.nim index 47637b3c1..f66a75efd 100644 --- a/compiler/incremental.nim +++ b/compiler/incremental.nim @@ -59,8 +59,8 @@ when nimIncremental: let id = row[0] let fullhash = hashFileCached(conf, fileIdx, AbsoluteFile fullpath) if id.len == 0: - result = int incr.db.insertID(sql"insert into filenames(fullpath, fullhash) values (?, ?)", - fullpath, fullhash) + result = int incr.db.insertID(sql"insert into filenames(nimid, fullpath, fullhash) values (?, ?, ?)", + int(fileIdx), fullpath, fullhash) else: if row[1] != fullhash: incr.db.exec(sql"update filenames set fullhash = ? where fullpath = ?", fullhash, fullpath) @@ -102,6 +102,7 @@ when nimIncremental: db.exec(sql""" create table if not exists filenames( id integer primary key, + nimid integer not null, fullpath varchar(8000) not null, fullHash varchar(256) not null ); diff --git a/compiler/rodimpl.nim b/compiler/rodimpl.nim index 794c78b8d..c61c4ba04 100644 --- a/compiler/rodimpl.nim +++ b/compiler/rodimpl.nim @@ -847,8 +847,9 @@ proc replay(g: ModuleGraph; module: PSym; n: PNode) = internalAssert g.config, false of nkImportStmt: for x in n: - internalAssert g.config, x.kind == nkStrLit - let imported = g.importModuleCallback(g, module, fileInfoIdx(g.config, AbsoluteFile n[0].strVal)) + internalAssert g.config, x.kind == nkSym + let modpath = AbsoluteFile toFullPath(g.config, x.sym.info) + let imported = g.importModuleCallback(g, module, fileInfoIdx(g.config, modpath)) internalAssert g.config, imported.id < 0 of nkStmtList, nkStmtListExpr: for x in n: replay(g, module, x) @@ -883,6 +884,10 @@ proc setupModuleCache*(g: ModuleGraph) = database="nim") let oldConfig = db.getValue(sql"select config from config") g.incr.configChanged = oldConfig != encodeConfig(g) + # ensure the filename IDs stay consistent: + for row in db.rows(sql"select fullpath, nimid from filenames order by nimid"): + let id = fileInfoIdx(g.config, AbsoluteFile row[0]) + doAssert id.int == parseInt(row[1]) db.exec(sql"pragma journal_mode=off") # This MUST be turned off, otherwise it's way too slow even for testing purposes: db.exec(sql"pragma SYNCHRONOUS=off") |