jitcraft/Zone.cpp
author David Anderson <dvander@alliedmods.net>
Sat Jun 30 19:38:53 2012 -0700 (2012-06-30)
changeset 12 75e385f68b7e
parent 11 a350c2cc736a
child 14 0784ac5cc347
permissions -rw-r--r--
Refactored Array, Code to be Objects. Removed Object tagging.
dvander@0
     1
/*
dvander@0
     2
 * Copyright (C) 2012 David Anderson
dvander@0
     3
 *
dvander@0
     4
 * This file is part of JITCraft.
dvander@0
     5
 *
dvander@0
     6
 * JITCraft is free software: you can redistribute it and/or modify it under
dvander@0
     7
 * the terms of the GNU General Public License as published by the Free
dvander@0
     8
 * Software Foundation, either version 3 of the License, or (at your option)
dvander@0
     9
 * any later version.
dvander@0
    10
 * 
dvander@0
    11
 * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY
dvander@0
    12
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@0
    13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
dvander@0
    14
 *
dvander@0
    15
 * You should have received a copy of the GNU General Public License along with
dvander@0
    16
 * JITCraft. If not, see http://www.gnu.org/licenses/.
dvander@0
    17
 */
dvander@0
    18
#include "Zone.h"
dvander@11
    19
#include "TypeManager.h"
dvander@0
    20
dvander@0
    21
using namespace jc;
dvander@0
    22
dvander@0
    23
Zone jc::SingleThreadedZone;
dvander@0
    24
dvander@11
    25
Zone::Zone()
dvander@11
    26
  : heap_(this),
dvander@11
    27
    types_(NULL)
dvander@11
    28
{
dvander@11
    29
}
dvander@11
    30
dvander@0
    31
bool
dvander@0
    32
Zone::initialize()
dvander@0
    33
{
dvander@0
    34
    if (!stack_.initialize())
dvander@0
    35
        return false;
dvander@11
    36
    if (!heap_.initialize())
dvander@11
    37
        return false;
dvander@11
    38
dvander@11
    39
    maps_[MapKind_Meta] = heap_.metaMap();
dvander@12
    40
    if ((maps_[MapKind_Type] = allocateMap(MapKind_Type, sizeof(Map))) == NULL)
dvander@12
    41
        return false;
dvander@12
    42
    if ((maps_[MapKind_FixedArray] = allocateMap(MapKind_FixedArray, sizeof(Map))) == NULL)
dvander@12
    43
        return false;
dvander@12
    44
    if ((maps_[MapKind_ByteArray] = allocateMap(MapKind_ByteArray, sizeof(Map))) == NULL)
dvander@12
    45
        return false;
dvander@12
    46
    if ((maps_[MapKind_Code] = allocateMap(MapKind_Code, sizeof(Map))) == NULL)
dvander@12
    47
        return false;
dvander@12
    48
    if ((maps_[MapKind_MetaArray] = allocateMap(MapKind_MetaArray, sizeof(Map))) == NULL)
dvander@11
    49
        return false;
dvander@11
    50
dvander@11
    51
    types_ = new TypeManager(this);
dvander@11
    52
    if (!types_ || !types_->initialize())
dvander@11
    53
        return false;
dvander@11
    54
dvander@0
    55
    return true;
dvander@0
    56
}
dvander@12
    57
dvander@12
    58
Map *
dvander@12
    59
Zone::allocateMap(MapKind kind, size_t bytes, MapKind parent)
dvander@12
    60
{
dvander@12
    61
    assert(maps_[parent]);
dvander@12
    62
    Map *map = heap_.allocateMap(kind, bytes);
dvander@12
    63
    if (!map)
dvander@12
    64
        return NULL;
dvander@12
    65
    map->init(maps_[parent]);
dvander@12
    66
    return map;
dvander@12
    67
}