Ejemplo n.º 1
0
        static IList <string> AssembleClass(KecaknoahScriptClassInfo info)
        {
            var result = new List <string>();

            result.Add($".class {info.Name}");
            foreach (var i in info.Locals)
            {
                result.Add("  .local" + i);
            }
            result.Add("  ");
            foreach (var i in info.InstanceMethods)
            {
                result.AddRange(AssembleFunction(i as KecaknoahScriptMethodInfo).Select(p => "  " + p));
                result.Add("  ");
            }
            foreach (var i in info.ClassMethods)
            {
                result.AddRange(AssembleFunction(i as KecaknoahScriptMethodInfo).Select(p => "  " + p));
                result.Add("  ");
            }
            foreach (var i in info.InnerClasses)
            {
                result.AddRange(AssembleClass(i as KecaknoahScriptClassInfo).Select(p => "  " + p));
                result.Add("  ");
            }
            return(result);
        }
Ejemplo n.º 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;
     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);
     }
 }
Ejemplo n.º 3
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);
     }
 }
Ejemplo n.º 4
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) : this(klass)
 {
     if (klass.classMethods.Any(p => p.Name == "new"))
     {
         var ctor = klass.classMethods.First(p => p.Name == "new");
         new KecaknoahScriptFunction(this, ctor).Call(ctx, ctorArgs);
     }
 }
Ejemplo n.º 5
0
 /// <summary>
 /// 新しいインスタンスを初期化します。
 /// </summary>
 /// <param name="info"></param>
 public KecaknoahScriptClassObject(KecaknoahScriptClassInfo info)
 {
     Class = info;
     Constructor = KecaknoahReference.CreateRightReference(new KecaknoahInteropFunction(this, CreateInstance));
     foreach (var i in Class.classMethods)
     {
         methods[i.Name] = (KecaknoahReference.CreateRightReference(new KecaknoahScriptFunction(KecaknoahNil.Instance, i)));
     }
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 新しいインスタンスを初期化します。
 /// </summary>
 /// <param name="info"></param>
 public KecaknoahScriptClassObject(KecaknoahScriptClassInfo info)
 {
     Class       = info;
     Constructor = KecaknoahReference.CreateRightReference(new KecaknoahInteropFunction(this, CreateInstance));
     foreach (var i in Class.classMethods)
     {
         methods[i.Name] = (KecaknoahReference.CreateRightReference(new KecaknoahScriptFunction(KecaknoahNil.Instance, i)));
     }
 }
Ejemplo n.º 7
0
 /// <summary>
 /// 新しいインスタンスを初期化します。
 /// </summary>
 /// <param name="info"></param>
 public KecaknoahScriptClassObject(KecaknoahScriptClassInfo info)
 {
     Class       = info;
     ExtraType   = "ScriptClass";
     Constructor = KecaknoahReference.Right(this, CreateInstance);
     foreach (var i in Class.classMethods)
     {
         methods[i.Name] = (KecaknoahReference.Right(new KecaknoahScriptFunction(KecaknoahNil.Instance, i)));
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// 新しいインスタンスを初期化します。
 /// </summary>
 /// <param name="info"></param>
 public KecaknoahScriptClassObject(KecaknoahScriptClassInfo info)
 {
     Class = info;
     ExtraType = "ScriptClass";
     Constructor = KecaknoahReference.Right(this, CreateInstance);
     foreach (var i in Class.classMethods)
     {
         methods[i.Name] = (KecaknoahReference.Right(new KecaknoahScriptFunction(KecaknoahNil.Instance, i)));
     }
 }
Ejemplo n.º 9
0
 /// <summary>
 /// 特定の<see cref="KecaknoahScriptClassInfo"/>を元にして、インスタンスを生成します。
 /// </summary>
 /// <param name="klass">クラス</param>
 public KecaknoahInstance(KecaknoahScriptClassInfo 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 KecaknoahScriptFunction(this, i)
         };
 }
Ejemplo n.º 10
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;
     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);
     }
 }
Ejemplo n.º 11
0
 /// <summary>
 /// 特定の<see cref="KecaknoahScriptClassInfo"/>を元にして、インスタンスを生成します。
 /// </summary>
 /// <param name="klass">クラス</param>
 public KecaknoahInstance(KecaknoahScriptClassInfo 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 KecaknoahScriptFunction(this, i)
         }
     }
     ;
 }