/// <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; 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) } } ; if (klass.classMethods.Any(p => p.Name == "new")) { var ctor = klass.classMethods.First(p => p.Name == "new"); ctor.Body(ctx, this, ctorArgs); } }
/// <summary> /// 新しいインスタンスを初期化します。 /// </summary> /// <param name="info"></param> public KecaknoahInteropClassObject(KecaknoahInteropClassInfo info) { Class = info; foreach (var i in Class.classMethods) { methods[i.Name] = (KecaknoahReference.CreateRightReference(new KecaknoahInteropFunction(KecaknoahNil.Instance, i.Body))); } }
/// <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) : this(klass) { if (klass.classMethods.Any(p => p.Name == "new")) { var ctor = klass.classMethods.First(p => p.Name == "new"); ctor.Body(ctx, this, ctorArgs); } }
/// <summary> /// 新しいインスタンスを初期化します。 /// </summary> /// <param name="info"></param> public KecaknoahInteropClassObject(KecaknoahInteropClassInfo info) { Class = info; foreach (var i in Class.classMethods) { methods[i.Name] = (KecaknoahReference.Right(KecaknoahNil.Instance, i.Body)); } }
/// <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) }; }
/// <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) } } ; }
/// <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; 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) }; if (klass.classMethods.Any(p => p.Name == "new")) { var ctor = klass.classMethods.First(p => p.Name == "new"); ctor.Body(ctx, this, ctorArgs); } }
/// <summary> /// 新しいインスタンスを初期化します。 /// </summary> /// <param name="info"></param> public KecaknoahInteropClassObject(KecaknoahInteropClassInfo info) { Class = info; foreach (var i in Class.classMethods) methods[i.Name] = KecaknoahReference.Right(KecaknoahNil.Instance, i.Body); foreach (var i in Class.ConstInfos) consts[i.Name] = KecaknoahReference.Right(i.Value); }