public static SourceToken LoadToken(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            int    line = reader.ReadInt32();
            int    ptr  = reader.ReadInt32();
            string srcfile;
            var    tag = serizlizer.ReadTag(reader);

            if (tag == CSWCSerizlizer.TagType.NULLINSTANCE)
            {
                srcfile = null;
            }
            else if (tag == CSWCSerizlizer.TagType.INSTANCEATCACHE)
            {
                int idx = reader.ReadInt32();
                srcfile = serizlizer.stringpool[idx];
            }
            else if (tag == CSWCSerizlizer.TagType.WRITEINSTANCEANDCACHEIT)
            {
                int idx = reader.ReadInt32();
                srcfile = reader.ReadString();
                serizlizer.stringpool.Add(idx, srcfile);
            }
            else
            {
                throw new IOException("文件错误");
            }

            SourceToken token = new SourceToken(line, ptr, srcfile);

            serizlized.Add(key, token);

            return(token);
        }
Exemple #2
0
 public InternalError(CSWC swc, ASBinCode.SourceToken token, ASBinCode.RunTimeValueBase errorValue) : this(swc)
 {
     this.token      = token;
     this.errorValue = errorValue;
     if (errorValue != null)
     {
         this.message = getErrorInfo();                 //errorValue.ToString();
     }
 }
 public virtual void execute2(RunTimeValueBase thisObj,
                              rtti.FunctionDefine functionDefine,
                              SLOT[] argements,
                              SLOT returnSlot,
                              SourceToken token,
                              object stackframe,
                              out bool success)
 {
     throw new NotImplementedException();
 }
        public static ThisPointer LoadThisPointer(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            RunTimeDataType type  = reader.ReadInt32();
            SourceToken     token = serizlizer.DeserializeObject <SourceToken>(reader, SourceToken.LoadToken);

            ThisPointer pointer = new ThisPointer(null, token); serizlized.Add(key, pointer);

            pointer.valueType = type;

            return(pointer);
        }
        public ThisPointer(IScope scope, SourceToken token)
        {
            this.token = token;
            scopes.FunctionScope funcscope = scope as scopes.FunctionScope;

            if (funcscope != null)
            {
                if (!funcscope.function.IsAnonymous && funcscope.parentScope is scopes.ObjectInstanceScope)
                {
                    //refblockid = ((scopes.ObjectInstanceScope)funcscope.parentScope)._class.blockid;
                    valueType =
                        ((scopes.ObjectInstanceScope)scope.parentScope)._class.getRtType();
                }
                else if (!funcscope.function.IsAnonymous && funcscope.parentScope is scopes.FunctionScope)
                {
                    var tempscope = funcscope.parentScope;
                    while (tempscope is scopes.FunctionScope)
                    {
                        if (((scopes.FunctionScope)tempscope).function.IsAnonymous)
                        {
                            break;
                        }

                        tempscope = tempscope.parentScope;
                    }

                    if (tempscope is scopes.ObjectInstanceScope)
                    {
                        valueType =
                            ((scopes.ObjectInstanceScope)tempscope)._class.getRtType();
                    }
                    else
                    {
                        valueType = RunTimeDataType.rt_void;
                    }
                }
                else if (funcscope.parentScope is scopes.OutPackageMemberScope)
                {
                    //refblockid = ((scopes.OutPackageMemberScope)funcscope.parentScope).mainclass.outscopeblockid;
                    valueType = RunTimeDataType.rt_void;
                }
                else
                {
                    //refblockid = -1;//动态绑定
                    valueType = RunTimeDataType.rt_void;
                }
            }
            else
            {
                //refblockid = ((scopes.OutPackageMemberScope)scope).mainclass.outscopeblockid;
                valueType = RunTimeDataType.rt_void;
            }
        }
 public virtual void executeAsync(RunTimeValueBase thisObj,SLOT[] argements,SLOT resultSlot,
                                  object callbacker,object stackframe,
                                  SourceToken token,RunTimeScope scope)
 {
 }
Exemple #7
0
 public InternalError(CSWC swc, ASBinCode.SourceToken token, string message, ASBinCode.RunTimeValueBase errorValue) : this(swc)
 {
     this.token      = token;
     this.message    = message;
     this.errorValue = errorValue;
 }
Exemple #8
0
 public InternalError(CSWC swc, ASBinCode.SourceToken token, string message) : this(swc)
 {
     this.token      = token;
     this.message    = message;
     this.errorValue = null;
 }
Exemple #9
0
        public static OpStep Deserialize(BinaryReader reader, CSWCSerizlizer serizlizer, IDictionary <int, object> serizlized, int key)
        {
            //public OpCode opCode;
            OpCode opCode = (OpCode)reader.ReadByte();
            //	public SourceToken token;
            SourceToken token = serizlizer.DeserializeObject <SourceToken>(reader, SourceToken.LoadToken);

            OpStep step = new OpStep(opCode, token); serizlized.Add(key, step);

            ///// <summary>
            ///// 行标
            ///// </summary>
            //public string flag;
            if (reader.ReadBoolean())
            {
                step.flag = reader.ReadString();
            }

            ///// <summary>
            ///// 跳转偏移量
            ///// </summary>
            //public int jumoffset;
            step.jumoffset = reader.ReadInt32();
            ///// <summary>
            ///// 所属标签
            ///// </summary>
            //public Stack<string> labels;

            if (reader.ReadBoolean())
            {
                step.labels = new Stack <string>();
                int count = reader.ReadInt32();
                for (int i = 0; i < count; i++)
                {
                    step.labels.Push(reader.ReadString());
                }
            }

            //string[] lbls = labels.ToArray();
            //writer.Write(lbls.Length);
            //for (int i = 0; i < lbls.Length; i++)
            //{
            //	writer.Write(lbls[i]);
            //}



            ///// <summary>
            ///// 当前行在哪个try块里
            ///// -1表示不在任何try块里
            ///// </summary>
            //public int tryid;
            step.tryid = reader.ReadInt32();
            ///// <summary>
            ///// 当前块所属try类型
            ///// 0 try 1 catch 2 finally
            ///// </summary>
            //public int trytype;
            step.trytype = reader.ReadInt32();

            //public LeftValueBase reg;
            step.reg = (LeftValueBase)serizlizer.DeserializeObject <ISWCSerializable>(reader, ISWCSerializableLoader.LoadIMember);
            //public RightValueBase arg1;
            step.arg1 = (RightValueBase)serizlizer.DeserializeObject <ISWCSerializable>(reader, ISWCSerializableLoader.LoadIMember);
            //public RightValueBase arg2;
            step.arg2 = (RightValueBase)serizlizer.DeserializeObject <ISWCSerializable>(reader, ISWCSerializableLoader.LoadIMember);

            ///// <summary>
            ///// 输出结果类型
            ///// </summary>
            //public RunTimeDataType regType;
            step.regType = reader.ReadInt32();
            ///// <summary>
            ///// 输入参数1类型
            ///// </summary>
            //public RunTimeDataType arg1Type;
            step.arg1Type = reader.ReadInt32();
            ///// <summary>
            ///// 输入参数2类型
            ///// </summary>
            //public RunTimeDataType arg2Type;
            step.arg2Type = reader.ReadInt32();


            step.memregid1 = reader.ReadInt16();
            step.memregid2 = reader.ReadInt16();
            step.memregid3 = reader.ReadInt16();

            step.constnumber1 = reader.ReadDouble();
            step.constnumber2 = reader.ReadDouble();

            return(step);
        }
Exemple #10
0
 public OpStep(OpCode op, SourceToken token)
 {
     this.opCode = op;
     this.token  = token;
 }