コード例 #1
0
//
// Get element from specified position
//
CDT & VMArgStack::GetElement(const INT_32  iPos)
{
    if (iPos >= iMaxStackSize) {
        throw StackUnderflow(0);
    }

    if (iPos <  iStackPointer)  {
        throw StackOverflow(0);
    }

    return aStack[iPos];
}
コード例 #2
0
//
// Push element into stack
//
INT_32 VMArgStack::PushElement(const CDT & oCDT)
{
    if (iStackPointer == 0) {
        throw StackOverflow(0);
    }

    --iStackPointer;

    aStack[iStackPointer] = oCDT;

    return iStackPointer;
}
コード例 #3
0
ファイル: gc_mark_phase.cpp プロジェクト: glguida/polyml
 void PushToStack(PolyObject *obj, PolyWord *currentPtr = 0, POLYUNSIGNED originalLength = 0)
 {
     // If we don't have all the threads running we start a new one but
     // only once we have several items on the stack.  Otherwise we
     // can end up creating a task that terminates almost immediately.
     if (nInUse >= nThreads || msp < 2 || ! ForkNew(obj))
     {
         if (msp < MARK_STACK_SIZE)
         {
             markStack[msp++] = obj;
             if (currentPtr != 0)
             {
                 locPtr++;
                 if (locPtr == LARGECACHE_SIZE) locPtr = 0;
                 largeObjectCache[locPtr].base = obj;
                 largeObjectCache[locPtr].current = currentPtr;
             }
         }
         else StackOverflow(obj);
     }
     // else the new task is processing it.
 }
コード例 #4
0
ファイル: scanaddrs.cpp プロジェクト: dkearns/polyml
void RecursiveScanWithStack::PushToStack(PolyObject *obj)
{
    if (stack == 0 || stack->sp == RSTACK_SEGMENT_SIZE)
    {
        if (stack != 0 && stack->nextStack != 0)
            stack = stack->nextStack;
        else
        {
            // Need a new segment
            try {
                RScanStack *s = new RScanStack;
                s->lastStack = stack;
                if (stack != 0)
                    stack->nextStack = s;
                stack = s;
            }
            catch (std::bad_alloc &) {
                StackOverflow();
                return;
            }
        }
    }
    stack->stack[stack->sp++] = obj;
}