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