Files
sdk/runtime/vm/class_table.h
T
srdjan@google.com d5ad183f5b Add --use_cha (default true, switch to false if you use dynamic class loading). Use CHA to specify receiver class if no subclasses of the receiver exist, eliminate check class computation.
Remove all optimized code whenever we load scripts/libraries/snapshots. Currently this occurs only when no Dart frame is live on stack. Future change (deoptimization) will allow dynamic class loading in presence of live Dart frames.
The cost of removing all optimized code is supposed to be low. If that assumptions turns out to be false I can add more elaborate tracking of optimized functions.
Review URL: https://chromiumcodereview.appspot.com//10825483

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@11106 260f80e4-7a28-3924-810f-c04153c831b5
2012-08-21 22:31:49 +00:00

64 lines
1.3 KiB
C++

// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef VM_CLASS_TABLE_H_
#define VM_CLASS_TABLE_H_
#include "platform/assert.h"
#include "platform/globals.h"
#include "vm/globals.h"
namespace dart {
class Class;
class ObjectPointerVisitor;
class RawClass;
class ClassTable {
public:
ClassTable();
~ClassTable();
RawClass* At(intptr_t index) const {
ASSERT(IsValidIndex(index));
return table_[index];
}
intptr_t IsValidIndex(intptr_t index) const {
return (index > 0) && (index < top_);
}
bool HasValidClassAt(intptr_t index) const {
ASSERT(IsValidIndex(index));
return table_[index] != NULL;
}
intptr_t NumCids() const { return top_; }
void Register(const Class& cls);
void VisitObjectPointers(ObjectPointerVisitor* visitor);
void Print();
static intptr_t table_offset() {
return OFFSET_OF(ClassTable, table_);
}
private:
static const int initial_capacity_ = 512;
static const int capacity_increment_ = 256;
intptr_t top_;
intptr_t capacity_;
RawClass** table_;
DISALLOW_COPY_AND_ASSIGN(ClassTable);
};
} // namespace dart
#endif // VM_CLASS_TABLE_H_