Example #1
0
        /// <summary>
        /// Mark all items in the object 
        /// </summary>
        /// <param name="obj"></param>
        /// <returns>Return the size of memory that referenced by the object</returns>
        private int TraverseObject(DSObject obj)
        {
            int size = obj.MemorySize;

            foreach (var item in obj.Values)
            {
                if (item.IsReferenceType)
                    size += RecursiveMark(item);
            }

            return size;
        }
Example #2
0
        private int AllocateInternal(int size, PrimitiveType type)
        {
            switch (type)
            {
            case PrimitiveType.kTypeArray:
                var dsArray = new DSArray(size, this);
                return(AddHeapElement(dsArray));

            case PrimitiveType.kTypePointer:
                var dsObject = new DSObject(size, this);
                return(AddHeapElement(dsObject));

            case PrimitiveType.kTypeString:
                var dsString = new DSString(size, this);
                return(AddHeapElement(dsString));

            default:
                throw new ArgumentException("type");
            }
        }
Example #3
0
        private int AllocateInternal(StackValue[] values, PrimitiveType type)
        {
            HeapElement hpe = null;

            switch (type)
            {
            case PrimitiveType.Array:
                hpe = new DSArray(values, this);
                break;

            case PrimitiveType.Pointer:
                hpe = new DSObject(values, this);
                break;

            case PrimitiveType.String:
                hpe = new DSString(values, this);
                break;

            default:
                throw new ArgumentException("type");
            }

            return(AddHeapElement(hpe));
        }
Example #4
0
        private int AllocateInternal(int size, PrimitiveType type)
        {
            HeapElement hpe = null;

            switch (type)
            {
                case PrimitiveType.kTypeArray:
                    hpe = new DSArray(size, this);
                    break;

                case PrimitiveType.kTypePointer:
                    hpe = new DSObject(size, this);
                    break;

                case PrimitiveType.kTypeString:
                    hpe = new DSString(size, this);
                    break;

                default:
                    throw new ArgumentException("type");
            }

            return AddHeapElement(hpe);
        }