diff -r 9db4cc815ebc -r 241d082d6d89 src/compiler/SemanticAnalysis.cpp --- a/src/compiler/SemanticAnalysis.cpp Sun Jan 06 13:56:56 2013 -0800 +++ b/src/compiler/SemanticAnalysis.cpp Sat Jan 12 16:13:46 2013 -0800 @@ -559,6 +559,23 @@ return true; } +static unsigned +BindImplicitName(Module *from, ImplicitSymbol *sym) +{ + if (sym->bound()) + return sym->fieldIndex(); + + Module *module = Module::cast(from->getImportAt(sym->index())); + StructMap *map = module->globals()->map(); + + unsigned fieldIndex; + Descriptor *desc = map->type()->lookupField(sym->name(), &fieldIndex); + assert(desc && desc->type() == sym->type()); + + sym->bind(fieldIndex); + return fieldIndex; +} + void SemanticAnalysis::visitNameProxy(NameProxy *proxy) { @@ -572,6 +589,16 @@ break; } + case Symbol::kImplicit: + { + ImplicitSymbol *import = sym->toImplicit(); + unsigned fieldIndex = BindImplicitName(unit_->module(), import); + + hir_ = new (pool_) HImport(proxy, zone_->types()->getImportable(), import->index()); + hir_ = new (pool_) HField(proxy, hir_, sym->type(), fieldIndex); + break; + } + case Symbol::kConstant: { ConstantSymbol *val = sym->toConstant();