Skip to content

Commit ecf3397

Browse files
committed
fix(config_compiler): linking failure on blocking root node of a dependency resource
1 parent 478c073 commit ecf3397

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/rime/config/config_compiler.cc

+8-2
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,11 @@ static an<ConfigItem> ResolveReference(ConfigCompiler* compiler,
468468
if (!resource) {
469469
DLOG(INFO) << "resource not loaded, compiling: " << reference.resource_id;
470470
resource = compiler->Compile(reference.resource_id);
471+
// dependency doesn't require full resolution, this allows non conflicting
472+
// mutual references between config files.
473+
// this call is made even if resource is not loaded because plugins can
474+
// edit the empty config data, adding new dependencies.
475+
ResolveBlockingDependencies(compiler, reference.resource_id + ":");
471476
if (!resource->loaded) {
472477
if (reference.optional) {
473478
LOG(INFO) << "optional resource not loaded: " << reference.resource_id;
@@ -557,10 +562,11 @@ bool ConfigCompiler::Link(an<ConfigResource> target) {
557562

558563
bool ConfigCompiler::ResolveDependencies(const string& path) {
559564
DLOG(INFO) << "ResolveDependencies(" << path << ")";
560-
if (!graph_->deps.count(path)) {
565+
auto found = graph_->deps.find(path);
566+
if (found == graph_->deps.end()) {
561567
return true;
562568
}
563-
auto& deps = graph_->deps[path];
569+
auto& deps = found->second;
564570
for (auto iter = deps.begin(); iter != deps.end(); ) {
565571
if (!(*iter)->Resolve(this)) {
566572
LOG(ERROR) << "unresolved dependency: " << **iter;

0 commit comments

Comments
 (0)