Example #1
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int CreateNew(int flag, string membername, Holder<Dispatch2> result
     , Variant[] param, Dispatch2 objthis)
 {
     // CreateNew
     Dispatch2 dsp = CreateBaseTJSObject();
     // instance initialization
     //int hr = funcCall( 0, null, null, null, dsp); // add member to dsp
     // 生成を高速化するためにメンバコピーを特别处理する形で实装
     dsp.AddClassInstanveInfo(mClassName);
     NativeInstance nativeptr = CreateNativeInstance();
     dsp.SetNativeInstance(mClassIDInternal, nativeptr);
     int hr = CopyAllMembers((CustomObject)dsp);
     if (hr < 0)
     {
         return hr;
     }
     hr = base.FuncCall(0, mClassName, null, param, dsp);
     // call constructor
     // call the constructor
     if (hr == Error.E_MEMBERNOTFOUND)
     {
         hr = Error.S_OK;
     }
     // missing constructor is OK ( is this ugly ? )
     if (hr >= 0)
     {
         result.Set(dsp);
     }
     return hr;
 }
Example #2
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public virtual void AssignStructure(Dispatch2 dsp, AList<Dispatch2> stack)
 {
     // assign structured data from dsp
     //ArrayNI dicni = null;
     if (dsp.GetNativeInstance(DictionaryClass.ClassID) != null)
     {
         // copy from dictionary
         stack.AddItem(dsp);
         try
         {
             CustomObject owner = mOwner.Get();
             owner.Clear();
             DictionaryNI.AssignStructCallback callback = new DictionaryNI.AssignStructCallback
                 (stack, owner);
             dsp.EnumMembers(Interface.IGNOREPROP, callback, dsp);
         }
         finally
         {
             stack.Remove(stack.Count - 1);
         }
     }
     else
     {
         throw new TJSException(Error.SpecifyDicOrArray);
     }
 }
Example #3
0
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 public virtual int DeleteMemberByNum(int flag, int num, Dispatch2 objThis)
 {
     if (mObject == null)
     {
         throw new TJSException(Error.NullAccess);
     }
     return mObject.DeleteMemberByNum(flag, num, mObjThis != null ? mObjThis : (objThis
          != null ? objThis : mObject));
 }
Example #4
0
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 public virtual int DeleteMember(int flag, string memberName, Dispatch2 objThis)
 {
     if (mObject == null)
     {
         throw new TJSException(Error.NullAccess);
     }
     return mObject.DeleteMember(flag, memberName, mObjThis != null ? mObjThis : (objThis
          != null ? objThis : mObject));
 }
Example #5
0
 // create new object
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int CreateNew(int flag, string memberName, Holder<Dispatch2> result
     , Variant[] param, Dispatch2 objThis)
 {
     if (IsNumber(memberName, Result))
     {
         return CreateNewByNum(flag, Result[0], result, param, objThis);
     }
     return base.CreateNew(flag, memberName, result, param, objThis);
 }
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int FuncCall(int flag, string membername, Variant result, Variant
     [] param, Dispatch2 objthis)
 {
     if (membername != null)
     {
         return base.FuncCall(flag, membername, result, param, objthis);
     }
     return Process(result, param, objthis);
 }
 public override int PropSet(int flag, string membername, Variant param, Dispatch2
     objThis)
 {
     if (membername != null)
     {
         return Error.E_MEMBERNOTFOUND;
     }
     mValue.Set(param);
     return Error.S_OK;
 }
Example #8
0
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 public virtual int CreateNewByNum(int flag, int num, Holder<Dispatch2> result, Variant
     [] param, Dispatch2 objThis)
 {
     if (mObject == null)
     {
         throw new TJSException(Error.NullAccess);
     }
     return mObject.CreateNewByNum(flag, num, result, param, mObjThis != null ? mObjThis
          : (objThis != null ? objThis : mObject));
 }
Example #9
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public static void SaveStructuredDataForObject(Dispatch2 dsp, AList<Dispatch2> stack
     , TextWriteStreamInterface stream, string indentstr)
 {
     // check object recursion
     int count = stack.Count;
     for (int i = 0; i < count; i++)
     {
         Dispatch2 d = stack[i];
         if (d == dsp)
         {
             // object recursion detected
             stream.Write("null /* object recursion detected */");
             return;
         }
     }
     // determin dsp's object type
     DictionaryNI dicni;
     ArrayNI arrayni;
     if (dsp != null)
     {
         dicni = (DictionaryNI)dsp.GetNativeInstance(DictionaryClass.ClassID);
         if (dicni != null)
         {
             // dictionary
             stack.AddItem(dsp);
             dicni.SaveStructuredData(stack, stream, indentstr);
             stack.Remove(stack.Count - 1);
             return;
         }
         else
         {
             arrayni = (ArrayNI)dsp.GetNativeInstance(ArrayClass.ClassID);
             if (arrayni != null)
             {
                 // array
                 stack.AddItem(dsp);
                 arrayni.SaveStructuredData(stack, stream, indentstr);
                 stack.Remove(stack.Count - 1);
                 return;
             }
             else
             {
                 // other objects
                 stream.Write("null /* (object) \"");
                 // stored as a null
                 Variant val = new Variant(dsp, dsp);
                 stream.Write(LexBase.EscapeC(val.AsString()));
                 stream.Write("\" */");
                 return;
             }
         }
     }
     stream.Write("null");
 }
Example #10
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public virtual int DeleteMember(int flag, string membername, Dispatch2 objthis)
 {
     Dispatch2 OBJ1 = ((objthis != null) ? (objthis) : (mDispatch1));
     int hr = mDispatch1.DeleteMember(flag, membername, OBJ1);
     if (hr == Error.E_MEMBERNOTFOUND && mDispatch1 != mDispatch2)
     {
         Dispatch2 OBJ2 = ((objthis != null) ? (objthis) : (mDispatch2));
         return mDispatch2.DeleteMember(flag, membername, OBJ2);
     }
     return hr;
 }
Example #11
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int CreateNew(int flag, string membername, Holder<Dispatch2> result
     , Variant[] param, Dispatch2 objthis)
 {
     int hr = base.CreateNew(flag, membername, result, param, objthis);
     if (hr == Error.E_MEMBERNOTFOUND && (flag & Interface.MEMBERMUSTEXIST) == 0)
     {
         return Error.E_INVALIDTYPE;
     }
     // call operation for void
     return hr;
 }
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int IsInstanceOf(int flag, string membername, string classname, Dispatch2
     objthis)
 {
     if (membername == null)
     {
         if ("Function".Equals(classname))
         {
             return Error.S_TRUE;
         }
     }
     return base.IsInstanceOf(flag, membername, classname, objthis);
 }
Example #13
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public virtual int CreateNewByNum(int flag, int num, Holder<Dispatch2> result, Variant
     [] param, Dispatch2 objthis)
 {
     Dispatch2 OBJ1 = ((objthis != null) ? (objthis) : (mDispatch1));
     int hr = mDispatch1.CreateNewByNum(flag, num, result, param, OBJ1);
     if (hr == Error.E_MEMBERNOTFOUND && mDispatch1 != mDispatch2)
     {
         Dispatch2 OBJ2 = ((objthis != null) ? (objthis) : (mDispatch2));
         return mDispatch2.CreateNewByNum(flag, num, result, param, OBJ2);
     }
     return hr;
 }
Example #14
0
 public override int PropGet(int flag, string membername, Variant result, Dispatch2
     objthis)
 {
     if (membername != null)
     {
         return Error.E_MEMBERNOTFOUND;
     }
     if (result != null)
     {
         result.Set(mValue);
     }
     return Error.S_OK;
 }
Example #15
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int PropGet(int flag, string membername, Variant result, Dispatch2
     objthis)
 {
     int hr = base.PropGet(flag, membername, result, objthis);
     if (hr == Error.E_MEMBERNOTFOUND && (flag & Interface.MEMBERMUSTEXIST) == 0)
     {
         if (result != null)
         {
             result.Clear();
         }
         // returns void
         return Error.S_OK;
     }
     return hr;
 }
Example #16
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int Operation(int flag, string membername, Variant result, Variant
     param, Dispatch2 objthis)
 {
     int hr = base.Operation(flag, membername, result, param, objthis);
     if (hr == Error.E_MEMBERNOTFOUND && (flag & Interface.MEMBERMUSTEXIST) == 0)
     {
         // value not found -> create a value, do the operation once more
         hr = base.PropSet(Interface.MEMBERENSURE, membername, VoidVal, objthis);
         if (hr < 0)
         {
             return hr;
         }
         hr = base.Operation(flag, membername, result, param, objthis);
     }
     return hr;
 }
Example #17
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int PropGet(int flag, string membername, Variant result, Dispatch2
     objthis)
 {
     if (membername != null)
     {
         return base.PropGet(flag, membername, result, objthis);
     }
     if (objthis == null)
     {
         return Error.E_NATIVECLASSCRASH;
     }
     if (result == null)
     {
         return Error.E_FAIL;
     }
     return Get(result, objthis);
 }
Example #18
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int PropSet(int flag, string membername, Variant param, Dispatch2
     objthis)
 {
     if (membername != null)
     {
         return base.PropSet(flag, membername, param, objthis);
     }
     if (objthis == null)
     {
         return Error.E_NATIVECLASSCRASH;
     }
     if (param == null)
     {
         return Error.E_FAIL;
     }
     return Set(param, objthis);
 }
Example #19
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int FuncCall(int flag, string membername, Variant result, Variant
     [] param, Dispatch2 objthis)
 {
     if (membername != null)
     {
         return base.FuncCall(flag, membername, result, param, objthis);
     }
     if (objthis == null)
     {
         return Error.E_NATIVECLASSCRASH;
     }
     if (result != null)
     {
         result.Clear();
     }
     return Process(result, param, objthis);
 }
Example #20
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public override int FuncCall(int flag, string membername, Variant result, Variant
     [] param, Dispatch2 objthis)
 {
     if (!GetValidity())
     {
         return Error.E_INVALIDOBJECT;
     }
     if (membername != null)
     {
         return base.FuncCall(flag, membername, result, param, objthis);
     }
     // 生成を高速化するためにメンバコピーを特别处理する形で实装
     objthis.AddClassInstanveInfo(mClassName);
     NativeInstance nativeptr = CreateNativeInstance();
     objthis.SetNativeInstance(mClassIDInternal, nativeptr);
     int hr = CopyAllMembers((CustomObject)objthis);
     if (hr < 0)
     {
         return hr;
     }
     return Error.S_OK;
 }
Example #21
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public virtual void Assign(Dispatch2 dsp, bool clear)
 {
     // copy members from "dsp" to "Owner"
     // determin dsp's object type
     ArrayNI arrayni = null;
     CustomObject owner = mOwner.Get();
     if (dsp != null && (arrayni = (ArrayNI)dsp.GetNativeInstance(ArrayClass.ClassID))
          != null)
     {
         // convert from array
         if (clear)
         {
             owner.Clear();
         }
         int count = arrayni.mItems.Count;
         for (int i = 0; i < count; i++)
         {
             Variant v = arrayni.mItems[i];
             string name = v.AsString();
             i++;
             if (i >= count)
             {
                 break;
             }
             Variant v2 = arrayni.mItems[i];
             owner.PropSet(Interface.MEMBERENSURE | Interface.IGNOREPROP, name, v2, owner);
         }
     }
     else
     {
         // otherwise
         if (clear)
         {
             owner.Clear();
         }
         DictionaryNI.AssignCallback callback = new DictionaryNI.AssignCallback(owner);
         dsp.EnumMembers(Interface.IGNOREPROP, callback, dsp);
     }
 }
Example #22
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 protected internal override int Process(Variant result, Variant[] param, Dispatch2
     objthis)
 {
     Variant val = new Variant(string.Empty);
     if ((param.Length > 0) ? param[0].IsVoid() != true : false)
     {
         val.CopyRef(param[0]);
     }
     string message_name = "message";
     objthis.PropSet(Interface.MEMBERENSURE, message_name, val, objthis);
     if ((param.Length > 1) ? param[1].IsVoid() != true : false)
     {
         val.CopyRef(param[1]);
     }
     else
     {
         val.Set(string.Empty);
     }
     string trace_name = "trace";
     objthis.PropSet(Interface.MEMBERENSURE, trace_name, val, objthis);
     return Error.S_OK;
 }
Example #23
0
 /// <exception cref="TjsException"></exception>
 /// <exception cref="VariantException"></exception>
 public virtual int IsInstanceOf(int flag, string memberName, string className, Dispatch2
                                 objThis)
 {
     if (mObject == null)
     {
         throw new TjsException(Error.NullAccess);
     }
     return(mObject.IsInstanceOf(flag, memberName, className, mObjThis != null ? mObjThis
                          : (objThis != null ? objThis : mObject)));
 }
Example #24
0
 public virtual void Set(Dispatch2 obj, Dispatch2 objthis)
 {
     mObject  = obj;
     mObjThis = objthis;
 }
Example #25
0
 public virtual void Set(VariantClosure clo)
 {
     mObject  = clo.mObject;
     mObjThis = clo.mObjThis;
 }
Example #26
0
 //public static int getDictionaryClassID() { return DictionaryClass.ClassID; }
 //public static int getArrayClassID() { return ArrayClass.ClassID; }
 /// <exception cref="VariantException"></exception>
 /// <exception cref="TjsException"></exception>
 /// <exception cref="CompileException"></exception>
 public virtual void ExecScript(string script, Variant result, Dispatch2 context,
                                string name, int lineofs)
 {
     mCache?.ExecScript(script, result, context, name, lineofs);
 }
 /// <exception cref="VariantException"></exception>
 /// <exception cref="TjsException"></exception>
 public virtual bool Callback(string name, int flags, Variant value)
 {
     if ((flags & Interface.HIDDENMEMBER) != 0)
     {
         return(true);
     }
     if (value.IsObject())
     {
         // object
         Dispatch2 dsp = value.AsObject();
         // determin dsp's object type
         Variant val;
         if (dsp != null)
         {
             if (dsp.GetNativeInstance(DictionaryClass.ClassID) != null)
             {
                 // dictionary
                 bool objrec = false;
                 int  count  = mStack.Count;
                 for (int i = 0; i < count; i++)
                 {
                     Dispatch2 v = mStack[i];
                     if (v == dsp)
                     {
                         // object recursion detected
                         objrec = true;
                         break;
                     }
                 }
                 val = new Variant();
                 if (objrec)
                 {
                     val.SetObject(null);
                 }
                 else
                 {
                     // becomes null
                     Dispatch2 newobj = Tjs.CreateDictionaryObject();
                     val.SetObject(newobj, newobj);
                     DictionaryNI newni;
                     if ((newni = (DictionaryNI)newobj.GetNativeInstance(DictionaryClass.ClassID)) !=
                         null)
                     {
                         newni.AssignStructure(dsp, mStack);
                     }
                 }
             }
             else
             {
                 if (dsp.GetNativeInstance(ArrayClass.ClassID) != null)
                 {
                     // array
                     bool objrec = false;
                     int  count  = mStack.Count;
                     for (int i = 0; i < count; i++)
                     {
                         Dispatch2 v = mStack[i];
                         if (v == dsp)
                         {
                             // object recursion detected
                             objrec = true;
                             break;
                         }
                     }
                     val = new Variant();
                     if (objrec)
                     {
                         val.SetObject(null);
                     }
                     else
                     {
                         // becomes null
                         Dispatch2 newobj = Tjs.CreateArrayObject();
                         val.SetObject(newobj, newobj);
                         ArrayNI newni;
                         if ((newni = (ArrayNI)newobj.GetNativeInstance(ArrayClass.ClassID)) != null)
                         {
                             newni.AssignStructure(dsp, mStack);
                         }
                     }
                 }
                 else
                 {
                     val = value;
                 }
             }
         }
         else
         {
             // other object types
             val = value;
         }
         mDest.PropSet(Interface.MEMBERENSURE | Interface.IGNOREPROP, name, val, mDest);
     }
     else
     {
         // other types
         mDest.PropSet(Interface.MEMBERENSURE | Interface.IGNOREPROP, name, value, mDest);
     }
     return(true);
 }
Example #28
0
 protected internal override int Process(Variant result, Variant[] param, Dispatch2
     objthis)
 {
     return Error.S_OK;
 }
        public byte GetType(Variant v)
        {
            object o = v.ToJavaObject();

            if (o == null)
            {
                return(TYPE_VOID);
            }
            else
            {
                if (o is string)
                {
                    return(TYPE_STRING);
                }
                else
                {
                    if (o is int)
                    {
                        int val = ((int)o);
                        if (val >= byte.MinValue && val <= byte.MaxValue)
                        {
                            return(TYPE_BYTE);
                        }
                        else
                        {
                            if (val >= short.MinValue && val <= short.MaxValue)
                            {
                                return(TYPE_SHORT);
                            }
                            else
                            {
                                return(TYPE_INTEGER);
                            }
                        }
                    }
                    else
                    {
                        if (o is double)
                        {
                            return(TYPE_REAL);
                        }
                        else
                        {
                            if (o is VariantClosure)
                            {
                                VariantClosure clo = (VariantClosure)o;
                                Dispatch2      dsp = clo.mObject;
                                if (dsp is InterCodeObject)
                                {
                                    return(TYPE_INTER_OBJECT);
                                }
                                else
                                {
                                    return(TYPE_OBJECT);
                                }
                            }
                            else
                            {
                                if (o is InterCodeGenerator)
                                {
                                    return(TYPE_INTER_GENERATOR);
                                }
                                else
                                {
                                    if (o is ByteBuffer)
                                    {
                                        return(TYPE_OCTET);
                                    }
                                    else
                                    {
                                        if (o is long)
                                        {
                                            long val = ((long)o);
                                            if (val >= byte.MinValue && val <= byte.MaxValue)
                                            {
                                                return(TYPE_BYTE);
                                            }
                                            else
                                            {
                                                if (val >= short.MinValue && val <= short.MaxValue)
                                                {
                                                    return(TYPE_SHORT);
                                                }
                                                else
                                                {
                                                    if (val >= int.MinValue && val <= int.MaxValue)
                                                    {
                                                        return(TYPE_INTEGER);
                                                    }
                                                    else
                                                    {
                                                        return(TYPE_LONG);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(TYPE_UNKNOWN);
        }
 // TJS constructor
 /// <exception cref="VariantException"></exception>
 /// <exception cref="TjsException"></exception>
 public virtual int Construct(Variant[] param, Dispatch2 tjsObj)
 {
     return(Error.S_OK);
 }
Example #31
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 protected internal override int Process(Variant result, Variant[] param, Dispatch2
     objthis)
 {
     DateNI _this = (DateNI)objthis.GetNativeInstance(Kirikiri.Tjs2.DateClass.mClassID
         );
     if (_this == null)
     {
         return Error.E_NATIVECLASSCRASH;
     }
     if (result != null)
     {
         result.Set((int)_this.mDateTime.Get(Calendar.YEAR));
     }
     return Error.S_OK;
 }
Example #32
0
 /// <exception cref="VariantException"></exception>
 /// <exception cref="TjsException"></exception>
 public override int IsInstanceOf(int flag, string membername, string classname, Dispatch2
                                  objthis)
 {
     if (membername == null)
     {
         if ("Class".Equals(classname))
         {
             return(Error.S_TRUE);
         }
         if (ClassName != null && ClassName.Equals(classname))
         {
             return(Error.S_TRUE);
         }
     }
     return(base.IsInstanceOf(flag, membername, classname, objthis));
 }
Example #33
0
 //mCallback = new Callback();
 //mCallbackClosure = new VariantClosure(mCallback,null);
 /// <exception cref="VariantException"></exception>
 /// <exception cref="TjsException"></exception>
 public virtual void RegisterNCM(string name, Dispatch2 dsp, string className, int
                                 type)
 {
     RegisterNCM(name, dsp, className, type, 0);
 }
Example #34
0
 public VariantClosure(Dispatch2 obj, Dispatch2 objthis)
 {
     //mObjThis = null;
     mObject  = obj;
     mObjThis = objthis;
 }
Example #35
0
 public virtual void Set(Dispatch2 obj)
 {
     Set(obj, null);
 }
Example #36
0
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 public virtual void AssignStructure(Dispatch2 dsp, AList<Dispatch2> stack)
 {
     // assign structured data from dsp
     ArrayNI arrayni = (ArrayNI)dsp.GetNativeInstance(ArrayClass.ClassID);
     if (arrayni != null)
     {
         // copy from array
         stack.AddItem(dsp);
         try
         {
             mItems.Clear();
             int count = arrayni.mItems.Count;
             for (int i = 0; i < count; i++)
             {
                 Variant v = arrayni.mItems[i];
                 if (v.IsObject())
                 {
                     // object
                     Dispatch2 dsp1 = v.AsObject();
                     // determin dsp's object type
                     //DictionaryNI dicni = null;
                     //ArrayNI arrayni1 = null;
                     if (dsp1 != null && dsp1.GetNativeInstance(DictionaryClass.ClassID) != null)
                     {
                         //dicni = (DictionaryNI)ni.mValue;
                         // dictionary
                         bool objrec = false;
                         int scount = stack.Count;
                         for (int j = 0; j < scount; j++)
                         {
                             Dispatch2 d = stack[j];
                             if (d == dsp1)
                             {
                                 // object recursion detected
                                 objrec = true;
                                 break;
                             }
                         }
                         if (objrec)
                         {
                             mItems.AddItem(new Variant());
                         }
                         else
                         {
                             // becomes null
                             Dispatch2 newobj = TJS.CreateDictionaryObject();
                             mItems.AddItem(new Variant(newobj, newobj));
                             DictionaryNI newni;
                             if ((newni = (DictionaryNI)newobj.GetNativeInstance(DictionaryClass.ClassID)) !=
                                 null)
                             {
                                 newni.AssignStructure(dsp1, stack);
                             }
                         }
                     }
                     else
                     {
                         if (dsp1 != null && dsp1.GetNativeInstance(ArrayClass.ClassID) != null)
                         {
                             // array
                             bool objrec = false;
                             int scount = stack.Count;
                             for (int j = 0; j < scount; j++)
                             {
                                 Dispatch2 d = stack[j];
                                 if (d == dsp1)
                                 {
                                     // object recursion detected
                                     objrec = true;
                                     break;
                                 }
                             }
                             if (objrec)
                             {
                                 mItems.AddItem(new Variant());
                             }
                             else
                             {
                                 // becomes null
                                 Dispatch2 newobj = TJS.CreateArrayObject();
                                 mItems.AddItem(new Variant(newobj, newobj));
                                 ArrayNI newni;
                                 if ((newni = (ArrayNI)newobj.GetNativeInstance(ArrayClass.ClassID)) != null)
                                 {
                                     newni.AssignStructure(dsp1, stack);
                                 }
                             }
                         }
                         else
                         {
                             // other object types
                             mItems.AddItem(v);
                         }
                     }
                 }
                 else
                 {
                     // others
                     mItems.AddItem(v);
                 }
             }
         }
         finally
         {
             stack.Remove(stack.Count - 1);
         }
     }
     else
     {
         throw new TJSException(Error.SpecifyDicOrArray);
     }
 }
Example #37
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 protected internal override int Process(Variant result, Variant[] param, Dispatch2
     objthis)
 {
     if (result != null)
     {
         result.Set(System.TimeZoneInfo.Local.GetRawOffset() / (60 * 1000));
     }
     return Error.S_OK;
 }
        public int PutVariant(Variant v, Compiler block)
        {
            object o    = v.ToJavaObject();
            int    type = GetType(v);

            switch (type)
            {
            case TYPE_VOID:
            {
                return(0);
            }

            case TYPE_OBJECT:
            {
                // 常に0
                VariantClosure clo = (VariantClosure)o;
                if (clo.mObject == null && clo.mObjThis == null)
                {
                    return(0);
                }
                else
                {
                    // null の VariantClosure は受け入れる
                    return(-1);
                }
            }

            case TYPE_INTER_OBJECT:
            {
                // その他は入れない。Dictionary と Array は保存できるようにした方がいいが……
                VariantClosure clo = (VariantClosure)o;
                Dispatch2      dsp = clo.mObject;
                return(block.GetObjectIndex((InterCodeObject)dsp));
            }

            case TYPE_STRING:
            {
                return(PutString(((string)o)));
            }

            case TYPE_OCTET:
            {
                return(PutByteBuffer((ByteBuffer)o));
            }

            case TYPE_REAL:
            {
                return(PutDouble(((Number)o)));
            }

            case TYPE_BYTE:
            {
                return(PutByte(((Number)o)));
            }

            case TYPE_SHORT:
            {
                return(PutShort(((Number)o)));
            }

            case TYPE_INTEGER:
            {
                return(PutInteger(((Number)o)));
            }

            case TYPE_LONG:
            {
                return(PutLong(((Number)o)));
            }

            case TYPE_INTER_GENERATOR:
            {
                return(block.GetCodeIndex((InterCodeGenerator)o));
            }

            case TYPE_UNKNOWN:
            {
                return(-1);
            }
            }
            return(-1);
        }
Example #39
0
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 protected internal override int Process(Variant result, Variant[] param, Dispatch2
     objthis)
 {
     DateNI _this = (DateNI)objthis.GetNativeInstance(Kirikiri.Tjs2.DateClass.mClassID
         );
     // インスタンス所得
     if (_this == null)
     {
         return Error.E_NATIVECLASSCRASH;
     }
     _this.mDateTime = Kirikiri.Tjs2.DateClass.ParseDateString(param[0].GetString());
     return Error.S_OK;
 }
Example #40
0
            /// <exception cref="VariantException"></exception>
            /// <exception cref="TJSException"></exception>
            protected internal override int Process(Variant result, Variant[] param, Dispatch2
                                                    objthis)
            {
                DateNI _this = (DateNI)objthis.GetNativeInstance(DateClass.mClassID
                                                                 );

                if (_this == null)
                {
                    return(Error.E_NATIVECLASSCRASH);
                }
                int hr = _this.Construct(param, objthis);

                if (hr < 0)
                {
                    return(hr);
                }
                if (param.Length == 0)
                {
                    _this.mDateTime = Calendar.GetInstance();
                }
                else
                {
                    if (param.Length >= 1)
                    {
                        if (param[0].IsString())
                        {
                            _this.mDateTime = DateClass.ParseDateString(param[0].GetString());
                        }
                        else
                        {
                            int y;
                            int mon = 0;
                            int day = 1;
                            int h   = 0;
                            int m   = 0;
                            int s   = 0;
                            y = param[0].AsInteger();
                            if (param.Length > 1 && param[1].IsVoid() != true)
                            {
                                mon = param[1].AsInteger();
                            }
                            if (param.Length > 2 && param[2].IsVoid() != true)
                            {
                                day = param[2].AsInteger();
                            }
                            if (param.Length > 3 && param[3].IsVoid() != true)
                            {
                                h = param[3].AsInteger();
                            }
                            if (param.Length > 4 && param[4].IsVoid() != true)
                            {
                                m = param[4].AsInteger();
                            }
                            if (param.Length > 5 && param[5].IsVoid() != true)
                            {
                                s = param[5].AsInteger();
                            }
                            Calendar cal = Calendar.GetInstance();
                            cal.Set(y, mon, day, h, m, s);
                            _this.mDateTime = cal;
                        }
                    }
                }
                return(Error.S_OK);
            }
Example #41
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 protected internal override int Process(Variant result, Variant[] param, Dispatch2
     objthis)
 {
     DateNI _this = (DateNI)objthis.GetNativeInstance(Kirikiri.Tjs2.DateClass.mClassID
         );
     if (_this == null)
     {
         return Error.E_NATIVECLASSCRASH;
     }
     if (param.Length < 1)
     {
         return Error.E_BADPARAMCOUNT;
     }
     _this.mDateTime.Set(Calendar.DAY_OF_MONTH, param[0].AsInteger());
     return Error.S_OK;
 }
Example #42
0
 /// <exception cref="VariantException"></exception>
 /// <exception cref="TjsException"></exception>
 /// <exception cref="CompileException"></exception>
 public virtual void EvalExpression(string expression, Variant result, Dispatch2 context
                                    , string name, int lineofs)
 {
     mCache?.EvalExpression(expression, result, context, name, lineofs);
 }
Example #43
0
 public override int Construct(Variant[] param, Dispatch2 tjsObj)
 {
     // called by TJS constructor
     if (param != null && param.Length != 0)
     {
         return Error.E_BADPARAMCOUNT;
     }
     return Error.S_OK;
 }
Example #44
0
 /// <exception cref="TjsException"></exception>
 protected internal override int Process(Variant result, Variant[] param, Dispatch2
                                         objthis)
 {
     return(Error.S_OK);
 }
Example #45
0
 /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
 /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
 public virtual void Assign(Dispatch2 dsp)
 {
     // copy members from "dsp" to "Owner"
     // determin dsp's object type
     //Holder<ArrayNI> arrayni = new Holder<ArrayNI>(null);
     ArrayNI array = (ArrayNI)dsp.GetNativeInstance(ArrayClass.ClassID);
     if (array != null)
     {
         // copy from array
         mItems.Clear();
         int count = array.mItems.Count;
         for (int i = 0; i < count; i++)
         {
             mItems.AddItem(new Variant(array.mItems[i]));
         }
     }
     else
     {
         //mItems.addAll( array.mItems );
         // convert from dictionary or others
         mItems.Clear();
         ArrayNI.DictionaryEnumCallback callback = new ArrayNI.DictionaryEnumCallback(mItems
             );
         dsp.EnumMembers(Interface.IGNOREPROP, callback, dsp);
     }
 }
Example #46
0
 public VariantClosure(Dispatch2 obj)
 {
     mObject = obj;
 }