@@ -95,7 +95,7 @@ class OpEvalImpl {
9595 }
9696
9797 void Eval (mlir::Operation* Op) {
98- if (isa<GlobalOp, CommandOp>(Op)) {
98+ if (isa<GlobalOp, CommandOp, LoadModuleOp >(Op)) {
9999 BlockItrTy Itr = Visit (Op);
100100
101101 if (Itr == BlockItrTy ())
@@ -192,7 +192,6 @@ class OpEvalImpl {
192192 if (isa<BindingOp>(Op)) return Visit (cast<BindingOp>(Op));
193193 else if (isa<LiteralOp>(Op)) return Visit (cast<LiteralOp>(Op));
194194 else if (isa<ApplyOp>(Op)) return Visit (cast<ApplyOp>(Op));
195- // else if (isa<BuiltinOp>(Op)) return Visit(cast<BuiltinOp>(Op));
196195 else if (isa<ContOp>(Op)) return Visit (cast<ContOp>(Op));
197196 else if (isa<GlobalOp>(Op)) return Visit (cast<GlobalOp>(Op));
198197 else if (isa<LoadClosureOp>(Op)) return Visit (cast<LoadClosureOp>(Op));
@@ -213,6 +212,7 @@ class OpEvalImpl {
213212 else if (isa<RenameOp>(Op)) return Visit (cast<RenameOp>(Op));
214213 else if (isa<ToVectorOp>(Op)) return Visit (cast<ToVectorOp>(Op));
215214 else if (isa<VectorOp>(Op)) return Visit (cast<VectorOp>(Op));
215+ else if (isa<LoadModuleOp>(Op)) return Visit (cast<LoadModuleOp>(Op));
216216 else if (isa<SyntaxClosureOp>(Op))
217217 return Visit (cast<SyntaxClosureOp>(Op));
218218 else if (isa<SourceLocOp>(Op)) return Visit (cast<SourceLocOp>(Op));
@@ -485,6 +485,19 @@ class OpEvalImpl {
485485 return next (Op);
486486 }
487487
488+ BlockItrTy Visit (LoadModuleOp Op) {
489+ heavy::Symbol* ModuleName = Context.CreateSymbol (Op.getName ());
490+ Context.PushCont ([](heavy::Context& C, ValueRefs) {
491+ heavy::Symbol* ModuleName = cast<Symbol>(C.getCapture (0 ));
492+ C.PushCont ([](heavy::Context& C, ValueRefs) {
493+ heavy::Symbol* ModuleName = cast<Symbol>(C.getCapture (0 ));
494+ C.InitModule (ModuleName);
495+ }, CaptureList{ModuleName});
496+ C.LoadModule (ModuleName);
497+ }, CaptureList{ModuleName});
498+ return BlockItrTy ();
499+ }
500+
488501 BlockItrTy Visit (LoadGlobalOp Op) {
489502 Value Val = Context.GetKnownValue (Op.getName ());
490503 if (!Val) {
0 commit comments