Exemplo n.º 1
0
/* allocate a descriptor from a descriptor slot */
struct GGGGC_Descriptor *ggggc_allocateDescriptorSlot(struct GGGGC_DescriptorSlot *slot)
{
    if (slot->descriptor) return slot->descriptor;
    if (slot->descriptor) {
        return slot->descriptor;
    }

    slot->descriptor = ggggc_allocateDescriptor(slot->size, slot->pointers);

    /* make the slot descriptor a root */
    GGC_PUSH_1(slot->descriptor);
    GGC_GLOBALIZE();

    return slot->descriptor;
}
Exemplo n.º 2
0
/* allocate a descriptor from a descriptor slot */
struct GGGGC_Descriptor *ggggc_allocateDescriptorSlot(struct GGGGC_DescriptorSlot *slot)
{
    if (slot->descriptor) return slot->descriptor;
    ggc_mutex_lock_raw(&slot->lock);
    if (slot->descriptor) {
        ggc_mutex_unlock(&slot->lock);
        return slot->descriptor;
    }

    slot->descriptor = ggggc_allocateDescriptor(slot->size, slot->pointers);

    /* make the slot descriptor a root */
    GGC_PUSH_1(slot->descriptor);
    GGC_GLOBALIZE();

    ggc_mutex_unlock(&slot->lock);
    return slot->descriptor;
}
Exemplo n.º 3
0
void SymbolTable::setDescriptorPointer() {
    ggc_size_t size = 1; 
    ggc_size_t pointers = 0;
    std::map<std::string, LSRValue>::iterator iter = symMap.begin();
    while (iter != symMap.end()) {
        size++;
        if (!iter->second.isInt()) {
            // Anything but an int is a pointer in this language !!!!!!!
            pointers = pointers | 1<<size;
        }
        iter++;
    }
    if (pointers) {
        // If pointers is no longer 0 we set at least one pointer,
        // need to set the lowest order bit to 1 to denote that we have pointers.
        pointers = pointers | 1;
    }
    descriptorPointer = NULL;
    GGC_PUSH_1(descriptorPointer);
    GGC_GLOBALIZE();
    descriptorPointer = (void *) ggggc_allocateDescriptor(size,pointers);
}