| Index: runtime/vm/isolate.h
|
| ===================================================================
|
| --- runtime/vm/isolate.h (revision 24061)
|
| +++ runtime/vm/isolate.h (working copy)
|
| @@ -11,6 +11,7 @@
|
| #include "vm/base_isolate.h"
|
| #include "vm/class_table.h"
|
| #include "vm/gc_callbacks.h"
|
| +#include "vm/handles.h"
|
| #include "vm/megamorphic_cache_table.h"
|
| #include "vm/store_buffer.h"
|
| #include "vm/timer.h"
|
| @@ -18,9 +19,13 @@
|
| namespace dart {
|
|
|
| // Forward declarations.
|
| +class AbstractType;
|
| class ApiState;
|
| +class Array;
|
| +class Class;
|
| class CodeIndexTable;
|
| class Debugger;
|
| +class Field;
|
| class Function;
|
| class HandleScope;
|
| class HandleVisitor;
|
| @@ -30,6 +35,7 @@
|
| class LongJump;
|
| class MessageHandler;
|
| class Mutex;
|
| +class Object;
|
| class ObjectPointerVisitor;
|
| class ObjectStore;
|
| class RawInstance;
|
| @@ -40,12 +46,14 @@
|
| class RawObject;
|
| class RawInteger;
|
| class RawError;
|
| +class RawFloat32x4;
|
| +class RawUint32x4;
|
| class Simulator;
|
| class StackResource;
|
| class StackZone;
|
| class StubCode;
|
| -class RawFloat32x4;
|
| -class RawUint32x4;
|
| +class TypeArguments;
|
| +class TypeParameter;
|
| class ObjectHistogram;
|
|
|
|
|
| @@ -218,6 +226,19 @@
|
| };
|
|
|
|
|
| +#define REUSABLE_HANDLE_LIST(V) \
|
| + V(Object) \
|
| + V(Array) \
|
| + V(String) \
|
| + V(Instance) \
|
| + V(Function) \
|
| + V(Field) \
|
| + V(Class) \
|
| + V(AbstractType) \
|
| + V(TypeParameter) \
|
| + V(TypeArguments) \
|
| +
|
| +
|
| class Isolate : public BaseIsolate {
|
| public:
|
| ~Isolate();
|
| @@ -581,6 +602,15 @@
|
| // were eliminated by AllocationSinking pass.
|
| void MaterializeDeferredObjects();
|
|
|
| +#define REUSABLE_HANDLE_ACCESSORS(object) \
|
| + object& object##Handle() { \
|
| + ASSERT(object##_handle_ != NULL); \
|
| + return *object##_handle_; \
|
| + } \
|
| +
|
| + REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_ACCESSORS)
|
| +#undef REUSABLE_HANDLE_ACCESSORS
|
| +
|
| static char* GetStatus(const char* request);
|
|
|
| private:
|
| @@ -595,6 +625,7 @@
|
| char* GetStatusStacktrace();
|
| char* GetStatusStackFrame(intptr_t index);
|
| char* DoStacktraceInterrupt(Dart_IsolateInterruptCallback cb);
|
| + template<class T> T* AllocateReusableHandle();
|
|
|
| static ThreadLocalKey isolate_key;
|
| StoreBuffer store_buffer_;
|
| @@ -643,6 +674,14 @@
|
| intptr_t stack_frame_index_;
|
| ObjectHistogram* object_histogram_;
|
|
|
| + // Reusable handles support.
|
| +#define REUSABLE_HANDLE_FIELDS(object) \
|
| + object* object##_handle_; \
|
| +
|
| + REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_FIELDS)
|
| +#undef REUSABLE_HANDLE_FIELDS
|
| + VMHandles handles_;
|
| +
|
| static Dart_IsolateCreateCallback create_callback_;
|
| static Dart_IsolateInterruptCallback interrupt_callback_;
|
| static Dart_IsolateUnhandledExceptionCallback unhandled_exception_callback_;
|
|
|