Files
sdk/runtime/vm/base_isolate.h
T
koda@google.com 044fc59fb6 Temporarily move vm_tag_ from BaseIsolate to Isolate.
This field is used by performance sensitive generated code.

Moving it out of BaseIsolate will simplify the first step towards replacing BaseIsolate with an actual thread state abstraction. It will later be migrated to that thread class (along with many other fields of Isolate).

Also remove an unused accessor from Isolate.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//798873007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42884 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-14 21:18:49 +00:00

133 lines
2.9 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_BASE_ISOLATE_H_
#define VM_BASE_ISOLATE_H_
namespace dart {
class HandleScope;
class StackResource;
class Zone;
// A BaseIsolate contains just enough functionality to allocate
// StackResources. This allows us to inline the StackResource
// constructor/destructor for performance.
class BaseIsolate {
public:
StackResource* top_resource() const { return top_resource_; }
void set_top_resource(StackResource* value) { top_resource_ = value; }
Zone* current_zone() const { return current_zone_; }
void set_current_zone(Zone* zone) { current_zone_ = zone; }
HandleScope* top_handle_scope() const {
#if defined(DEBUG)
return top_handle_scope_;
#else
return 0;
#endif
}
void set_top_handle_scope(HandleScope* handle_scope) {
#if defined(DEBUG)
top_handle_scope_ = handle_scope;
#endif
}
int32_t no_handle_scope_depth() const {
#if defined(DEBUG)
return no_handle_scope_depth_;
#else
return 0;
#endif
}
void IncrementNoHandleScopeDepth() {
#if defined(DEBUG)
ASSERT(no_handle_scope_depth_ < INT_MAX);
no_handle_scope_depth_ += 1;
#endif
}
void DecrementNoHandleScopeDepth() {
#if defined(DEBUG)
ASSERT(no_handle_scope_depth_ > 0);
no_handle_scope_depth_ -= 1;
#endif
}
int32_t no_gc_scope_depth() const {
#if defined(DEBUG)
return no_gc_scope_depth_;
#else
return 0;
#endif
}
void IncrementNoGCScopeDepth() {
#if defined(DEBUG)
ASSERT(no_gc_scope_depth_ < INT_MAX);
no_gc_scope_depth_ += 1;
#endif
}
void DecrementNoGCScopeDepth() {
#if defined(DEBUG)
ASSERT(no_gc_scope_depth_ > 0);
no_gc_scope_depth_ -= 1;
#endif
}
int32_t no_callback_scope_depth() const {
return no_callback_scope_depth_;
}
void IncrementNoCallbackScopeDepth() {
ASSERT(no_callback_scope_depth_ < INT_MAX);
no_callback_scope_depth_ += 1;
}
void DecrementNoCallbackScopeDepth() {
ASSERT(no_callback_scope_depth_ > 0);
no_callback_scope_depth_ -= 1;
}
#if defined(DEBUG)
static void AssertCurrent(BaseIsolate* isolate);
#endif
protected:
BaseIsolate()
: top_resource_(NULL),
current_zone_(NULL),
#if defined(DEBUG)
top_handle_scope_(NULL),
no_handle_scope_depth_(0),
no_gc_scope_depth_(0),
#endif
no_callback_scope_depth_(0)
{}
~BaseIsolate() {
// Do not delete stack resources: top_resource_ and current_zone_.
}
StackResource* top_resource_;
Zone* current_zone_;
#if defined(DEBUG)
HandleScope* top_handle_scope_;
int32_t no_handle_scope_depth_;
int32_t no_gc_scope_depth_;
#endif
int32_t no_callback_scope_depth_;
private:
DISALLOW_COPY_AND_ASSIGN(BaseIsolate);
};
} // namespace dart
#endif // VM_BASE_ISOLATE_H_