public override HeronValue Instantiate(VM vm, HeronValue[] args, ModuleInstance m) { if (m != null) { throw new Exception("A module cannot belong to a module"); } ModuleInstance r = new ModuleInstance(this); AddFields(r, m); foreach (Import i in imports) { ModuleDefn importModDef = vm.LookupModuleDefn(i.module); HeronValue[] importArgs = vm.EvalList(i.args).ToArray(); ModuleInstance importInstance = importModDef.Instantiate(vm, args, null) as ModuleInstance; if (importInstance == null) { throw new Exception("Failed to create loaded module instance"); } r.imports.Add(i.alias, importInstance); } CallConstructor(vm, args, m, r); return(r); }
public override HeronValue Instantiate(VM vm, HeronValue[] args, ModuleInstance m) { if (m != null) throw new Exception("A module cannot belong to a module"); ModuleInstance r = new ModuleInstance(this); AddFields(r, m); foreach (Import i in imports) { ModuleDefn importModDef = vm.LookupModuleDefn(i.module); HeronValue[] importArgs = vm.EvalList(i.args).ToArray(); ModuleInstance importInstance = importModDef.Instantiate(vm, args, null) as ModuleInstance; if (importInstance == null) throw new Exception("Failed to create loaded module instance"); r.imports.Add(i.alias, importInstance); } CallConstructor(vm, args, m, r); return r; }