예제 #1
0
파일: ObjModel.cs 프로젝트: ebassi/niecza
        void IFreeze.Freeze(FreezeBuffer fb)
        {
            fb.Byte((byte)SerializationCode.P6how);
            fb.ObjRef(stable);
            fb.Byte((byte)(isComposed ? 2 : isComposing ? 1 : 0));
            fb.String(rtype);
            fb.ObjRef(roleFactory);
            fb.ObjRef(subsetWhereThunk);
            fb.ObjRef(subsetFilter);

            // local_does not yet used
            fb.Int(lmethods.Count);
            // we do NOT save source position info here, it's only used
            // intra-unit
            foreach (MethodInfo mi in lmethods)
            {
                fb.String(mi.short_name);
                fb.String(mi.long_name);
                fb.ObjRef(mi.impl);
                fb.Byte(checked ((byte)mi.flags));
            }

            fb.Int(local_attr.Count);
            foreach (AttrInfo ai in local_attr)
            {
                fb.String(ai.name);
                fb.ObjRef(ai.init);
                fb.Byte(checked ((byte)ai.flags));
                fb.ObjRef(ai.type);
            }

            fb.Refs <STable>(superclasses);
            fb.Refs <STable>(mro);
        }
예제 #2
0
 void IFreeze.Freeze(FreezeBuffer fb)
 {
     fb.Byte((byte)SerializationCode.VarHash);
     fb.Int(count);
     foreach (KeyValuePair <string, Variable> kv in this)
     {
         fb.String(kv.Key);
         fb.ObjRef(kv.Value);
     }
 }
예제 #3
0
        void IFreeze.Freeze(FreezeBuffer fb)
        {
            fb.Byte((byte)SerializationCode.VarDeque);
            fb.Int(count);
            int index = head;

            for (int i = 0; i < count; i++)
            {
                fb.ObjRef(data[index]);
                index++;
                if (index == data.Length)
                {
                    index = 0;
                }
            }
        }
예제 #4
0
        protected void FreezeSelf(FreezeBuffer fb, Type t)
        {
            fb.Byte((byte)SerializationCode.P6opaque);
            int i;

            for (i = 0; i < FreezeBuffer.boxTypes.Length &&
                 FreezeBuffer.boxTypes[i] != t; i++)
            {
            }
            if (i == FreezeBuffer.boxTypes.Length)
            {
                throw new NotImplementedException(t.FullName);
            }
            fb.Byte((byte)i);
            fb.ObjRef(mo);
            int l = slots == null ? 0 : slots.Length;

            fb.Int(l);
            for (i = 0; i < l; i++)
            {
                fb.ObjRef(slots[i]);
            }
        }