示例#1
0
        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);
        }
示例#2
0
 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;
 }