コード例 #1
0
ファイル: KecaknoahInstance.cs プロジェクト: utgwkk/Kecaknoah
 /// <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);
     }
 }
コード例 #2
0
 /// <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);
     }
 }
コード例 #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)
 {
     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);
 }
コード例 #4
0
ファイル: KecaknoahInstance.cs プロジェクト: utgwkk/Kecaknoah
 /// <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)
         }
     }
     ;
 }