/// <summary> /// 特定の<see cref="KecaknoahScriptClassInfo"/>を元にして、インスタンスを生成します。 /// コンストラクタがあった場合、呼び出します。 /// </summary> /// <param name="klass">クラス</param> /// <param name="ctx">コンテキスト</param> /// <param name="ctorArgs">コンストラクタ引数</param> public KecaknoahInstance(KecaknoahScriptClassInfo klass, KecaknoahContext ctx, KecaknoahObject[] ctorArgs) { Class = klass; ExtraType = klass.Name; LocalFieldReferences = localReferences; InstanceMethodReferences = methodReferences; foreach (var i in klass.LocalInfos) { localReferences[i.Name] = new KecaknoahReference() { IsLeftValue = true }; if (i.InitializeIL != null) { localReferences[i.Name].RawObject = ctx.ExecuteExpressionIL(i.InitializeIL); } } foreach (var i in klass.methods) methodReferences[i.Name] = new KecaknoahReference() { IsLeftValue = true, RawObject = new KecaknoahScriptFunction(this, i) }; var ctor = klass.classMethods.FirstOrDefault(p => p.Name == "new"); if (ctor != null) { new KecaknoahScriptFunction(this, ctor).Call(ctx, ctorArgs); } }