Register imported libraries in dependency order (#3620)
block_mark_referenced walks the joined block backwards and skips the
body of any definition not yet marked referenced, so a library must
precede its importers. f58787c41 registered a library before walking
its dependencies, to have somewhere to keep the `loading` flag, which
reversed that order and made block_drop_unreferenced free definitions
that are still referenced through bound_by.
Keep the libraries being loaded on a stack threaded through the
load_library frames instead, so registration can move back after the
dependency walk.
This commit is contained in:
1 parent
e371bfaa92
commit
12cdd950e9
7 files changed
+59
-23
No files matched your search
@@ -0,0 +1,3 @@
|
||||
import "deep2a" as a;
|
||||
import "deep2b" as b;
|
||||
def f: [1, a::f, b::f];
|
||||
@@ -0,0 +1,2 @@
|
||||
import "deep3" as m;
|
||||
def f: [21, m::f];
|
||||
@@ -0,0 +1,3 @@
|
||||
import "deep3" as m;
|
||||
import "data" as $d;
|
||||
def f: [22, m::f, ($d | length)];
|
||||
@@ -0,0 +1,2 @@
|
||||
def _f: 3;
|
||||
def f: _f;
|
||||
Reference in new issue
Block a user