Example #1
0
 /// <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);
     }
 }
Example #2
0
 /// <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)));
     }
 }
Example #3
0
 /// <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));
     }
 }
Example #5
0
 /// <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)
         };
 }
Example #6
0
 /// <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);
 }
Example #7
0
 /// <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)
         }
     }
     ;
 }
Example #8
0
 /// <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);
 }