thread isolate for HConstant::handle
R=svenpanne@chromium.org BUG= Review URL: https://codereview.chromium.org/24027004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16587 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
c20f87a654
commit
7983023682
@ -1284,7 +1284,9 @@ class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> {
|
|||||||
DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
|
DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
|
||||||
DECLARE_HYDROGEN_ACCESSOR(Constant)
|
DECLARE_HYDROGEN_ACCESSOR(Constant)
|
||||||
|
|
||||||
Handle<Object> value() const { return hydrogen()->handle(); }
|
Handle<Object> value(Isolate* isolate) const {
|
||||||
|
return hydrogen()->handle(isolate);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -423,7 +423,7 @@ Register LCodeGen::EmitLoadRegister(LOperand* op, Register scratch) {
|
|||||||
} else if (op->IsConstantOperand()) {
|
} else if (op->IsConstantOperand()) {
|
||||||
LConstantOperand* const_op = LConstantOperand::cast(op);
|
LConstantOperand* const_op = LConstantOperand::cast(op);
|
||||||
HConstant* constant = chunk_->LookupConstant(const_op);
|
HConstant* constant = chunk_->LookupConstant(const_op);
|
||||||
Handle<Object> literal = constant->handle();
|
Handle<Object> literal = constant->handle(isolate());
|
||||||
Representation r = chunk_->LookupLiteralRepresentation(const_op);
|
Representation r = chunk_->LookupLiteralRepresentation(const_op);
|
||||||
if (r.IsInteger32()) {
|
if (r.IsInteger32()) {
|
||||||
ASSERT(literal->IsNumber());
|
ASSERT(literal->IsNumber());
|
||||||
@ -458,7 +458,7 @@ DwVfpRegister LCodeGen::EmitLoadDoubleRegister(LOperand* op,
|
|||||||
} else if (op->IsConstantOperand()) {
|
} else if (op->IsConstantOperand()) {
|
||||||
LConstantOperand* const_op = LConstantOperand::cast(op);
|
LConstantOperand* const_op = LConstantOperand::cast(op);
|
||||||
HConstant* constant = chunk_->LookupConstant(const_op);
|
HConstant* constant = chunk_->LookupConstant(const_op);
|
||||||
Handle<Object> literal = constant->handle();
|
Handle<Object> literal = constant->handle(isolate());
|
||||||
Representation r = chunk_->LookupLiteralRepresentation(const_op);
|
Representation r = chunk_->LookupLiteralRepresentation(const_op);
|
||||||
if (r.IsInteger32()) {
|
if (r.IsInteger32()) {
|
||||||
ASSERT(literal->IsNumber());
|
ASSERT(literal->IsNumber());
|
||||||
@ -486,7 +486,7 @@ DwVfpRegister LCodeGen::EmitLoadDoubleRegister(LOperand* op,
|
|||||||
Handle<Object> LCodeGen::ToHandle(LConstantOperand* op) const {
|
Handle<Object> LCodeGen::ToHandle(LConstantOperand* op) const {
|
||||||
HConstant* constant = chunk_->LookupConstant(op);
|
HConstant* constant = chunk_->LookupConstant(op);
|
||||||
ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged());
|
ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged());
|
||||||
return constant->handle();
|
return constant->handle(isolate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -543,7 +543,7 @@ Operand LCodeGen::ToOperand(LOperand* op) {
|
|||||||
Abort(kToOperandUnsupportedDoubleImmediate);
|
Abort(kToOperandUnsupportedDoubleImmediate);
|
||||||
}
|
}
|
||||||
ASSERT(r.IsTagged());
|
ASSERT(r.IsTagged());
|
||||||
return Operand(constant->handle());
|
return Operand(constant->handle(isolate()));
|
||||||
} else if (op->IsRegister()) {
|
} else if (op->IsRegister()) {
|
||||||
return Operand(ToRegister(op));
|
return Operand(ToRegister(op));
|
||||||
} else if (op->IsDoubleRegister()) {
|
} else if (op->IsDoubleRegister()) {
|
||||||
@ -690,7 +690,7 @@ void LCodeGen::AddToTranslation(LEnvironment* environment,
|
|||||||
translation->StoreDoubleRegister(reg);
|
translation->StoreDoubleRegister(reg);
|
||||||
} else if (op->IsConstantOperand()) {
|
} else if (op->IsConstantOperand()) {
|
||||||
HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op));
|
HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op));
|
||||||
int src_index = DefineDeoptimizationLiteral(constant->handle());
|
int src_index = DefineDeoptimizationLiteral(constant->handle(isolate()));
|
||||||
translation->StoreLiteral(src_index);
|
translation->StoreLiteral(src_index);
|
||||||
} else {
|
} else {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
@ -1869,7 +1869,7 @@ void LCodeGen::DoConstantE(LConstantE* instr) {
|
|||||||
|
|
||||||
|
|
||||||
void LCodeGen::DoConstantT(LConstantT* instr) {
|
void LCodeGen::DoConstantT(LConstantT* instr) {
|
||||||
Handle<Object> value = instr->value();
|
Handle<Object> value = instr->value(isolate());
|
||||||
AllowDeferredHandleDereference smi_check;
|
AllowDeferredHandleDereference smi_check;
|
||||||
__ LoadObject(ToRegister(instr->result()), value);
|
__ LoadObject(ToRegister(instr->result()), value);
|
||||||
}
|
}
|
||||||
|
@ -2575,12 +2575,13 @@ Maybe<HConstant*> HConstant::CopyToTruncatedInt32(Zone* zone) {
|
|||||||
|
|
||||||
Maybe<HConstant*> HConstant::CopyToTruncatedNumber(Zone* zone) {
|
Maybe<HConstant*> HConstant::CopyToTruncatedNumber(Zone* zone) {
|
||||||
HConstant* res = NULL;
|
HConstant* res = NULL;
|
||||||
if (handle()->IsBoolean()) {
|
Handle<Object> handle = this->handle(zone->isolate());
|
||||||
res = handle()->BooleanValue() ?
|
if (handle->IsBoolean()) {
|
||||||
|
res = handle->BooleanValue() ?
|
||||||
new(zone) HConstant(1) : new(zone) HConstant(0);
|
new(zone) HConstant(1) : new(zone) HConstant(0);
|
||||||
} else if (handle()->IsUndefined()) {
|
} else if (handle->IsUndefined()) {
|
||||||
res = new(zone) HConstant(OS::nan_value());
|
res = new(zone) HConstant(OS::nan_value());
|
||||||
} else if (handle()->IsNull()) {
|
} else if (handle->IsNull()) {
|
||||||
res = new(zone) HConstant(0);
|
res = new(zone) HConstant(0);
|
||||||
}
|
}
|
||||||
return Maybe<HConstant*>(res != NULL, res);
|
return Maybe<HConstant*>(res != NULL, res);
|
||||||
@ -2596,7 +2597,7 @@ void HConstant::PrintDataTo(StringStream* stream) {
|
|||||||
stream->Add("%p ", reinterpret_cast<void*>(
|
stream->Add("%p ", reinterpret_cast<void*>(
|
||||||
external_reference_value_.address()));
|
external_reference_value_.address()));
|
||||||
} else {
|
} else {
|
||||||
handle()->ShortPrint(stream);
|
handle(Isolate::Current())->ShortPrint(stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3285,9 +3285,9 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> {
|
|||||||
return new_constant;
|
return new_constant;
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle<Object> handle() {
|
Handle<Object> handle(Isolate* isolate) {
|
||||||
if (handle_.is_null()) {
|
if (handle_.is_null()) {
|
||||||
Factory* factory = Isolate::Current()->factory();
|
Factory* factory = isolate->factory();
|
||||||
// Default arguments to is_not_in_new_space depend on this heap number
|
// Default arguments to is_not_in_new_space depend on this heap number
|
||||||
// to be tenured so that it's guaranteed not be be located in new space.
|
// to be tenured so that it's guaranteed not be be located in new space.
|
||||||
handle_ = factory->NewNumber(double_value_, TENURED);
|
handle_ = factory->NewNumber(double_value_, TENURED);
|
||||||
@ -3298,7 +3298,7 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool HasMap(Handle<Map> map) {
|
bool HasMap(Handle<Map> map) {
|
||||||
Handle<Object> constant_object = handle();
|
Handle<Object> constant_object = handle(map->GetIsolate());
|
||||||
return constant_object->IsHeapObject() &&
|
return constant_object->IsHeapObject() &&
|
||||||
Handle<HeapObject>::cast(constant_object)->map() == *map;
|
Handle<HeapObject>::cast(constant_object)->map() == *map;
|
||||||
}
|
}
|
||||||
@ -3358,7 +3358,6 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> {
|
|||||||
|
|
||||||
virtual bool EmitAtUses() V8_OVERRIDE;
|
virtual bool EmitAtUses() V8_OVERRIDE;
|
||||||
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
|
||||||
bool IsInteger() { return handle()->IsSmi(); }
|
|
||||||
HConstant* CopyToRepresentation(Representation r, Zone* zone) const;
|
HConstant* CopyToRepresentation(Representation r, Zone* zone) const;
|
||||||
Maybe<HConstant*> CopyToTruncatedInt32(Zone* zone);
|
Maybe<HConstant*> CopyToTruncatedInt32(Zone* zone);
|
||||||
Maybe<HConstant*> CopyToTruncatedNumber(Zone* zone);
|
Maybe<HConstant*> CopyToTruncatedNumber(Zone* zone);
|
||||||
@ -6105,7 +6104,8 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> {
|
|||||||
|
|
||||||
Handle<Map> transition_map() const {
|
Handle<Map> transition_map() const {
|
||||||
if (has_transition()) {
|
if (has_transition()) {
|
||||||
return Handle<Map>::cast(HConstant::cast(transition())->handle());
|
return Handle<Map>::cast(
|
||||||
|
HConstant::cast(transition())->handle(Isolate::Current()));
|
||||||
} else {
|
} else {
|
||||||
return Handle<Map>();
|
return Handle<Map>();
|
||||||
}
|
}
|
||||||
@ -6113,7 +6113,7 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> {
|
|||||||
|
|
||||||
void SetTransition(HConstant* map_constant, CompilationInfo* info) {
|
void SetTransition(HConstant* map_constant, CompilationInfo* info) {
|
||||||
ASSERT(!has_transition()); // Only set once.
|
ASSERT(!has_transition()); // Only set once.
|
||||||
Handle<Map> map = Handle<Map>::cast(map_constant->handle());
|
Handle<Map> map = Handle<Map>::cast(map_constant->handle(info->isolate()));
|
||||||
if (map->CanBeDeprecated()) {
|
if (map->CanBeDeprecated()) {
|
||||||
map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info);
|
map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info);
|
||||||
}
|
}
|
||||||
|
@ -6885,7 +6885,8 @@ bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
|
|||||||
Handle<JSFunction> known_function;
|
Handle<JSFunction> known_function;
|
||||||
if (function->IsConstant()) {
|
if (function->IsConstant()) {
|
||||||
HConstant* constant_function = HConstant::cast(function);
|
HConstant* constant_function = HConstant::cast(function);
|
||||||
known_function = Handle<JSFunction>::cast(constant_function->handle());
|
known_function = Handle<JSFunction>::cast(
|
||||||
|
constant_function->handle(isolate()));
|
||||||
int args_count = arguments_count - 1; // Excluding receiver.
|
int args_count = arguments_count - 1; // Excluding receiver.
|
||||||
if (TryInlineApply(known_function, expr, args_count)) return true;
|
if (TryInlineApply(known_function, expr, args_count)) return true;
|
||||||
}
|
}
|
||||||
@ -7940,12 +7941,15 @@ void HOptimizedGraphBuilder::HandleLiteralCompareTypeof(CompareOperation* expr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool IsLiteralCompareBool(HValue* left,
|
static bool IsLiteralCompareBool(Isolate* isolate,
|
||||||
|
HValue* left,
|
||||||
Token::Value op,
|
Token::Value op,
|
||||||
HValue* right) {
|
HValue* right) {
|
||||||
return op == Token::EQ_STRICT &&
|
return op == Token::EQ_STRICT &&
|
||||||
((left->IsConstant() && HConstant::cast(left)->handle()->IsBoolean()) ||
|
((left->IsConstant() &&
|
||||||
(right->IsConstant() && HConstant::cast(right)->handle()->IsBoolean()));
|
HConstant::cast(left)->handle(isolate)->IsBoolean()) ||
|
||||||
|
(right->IsConstant() &&
|
||||||
|
HConstant::cast(right)->handle(isolate)->IsBoolean()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -7997,7 +8001,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
|||||||
HValue* left = Pop();
|
HValue* left = Pop();
|
||||||
Token::Value op = expr->op();
|
Token::Value op = expr->op();
|
||||||
|
|
||||||
if (IsLiteralCompareBool(left, op, right)) {
|
if (IsLiteralCompareBool(isolate(), left, op, right)) {
|
||||||
HCompareObjectEqAndBranch* result =
|
HCompareObjectEqAndBranch* result =
|
||||||
New<HCompareObjectEqAndBranch>(left, right);
|
New<HCompareObjectEqAndBranch>(left, right);
|
||||||
result->set_position(expr->position());
|
result->set_position(expr->position());
|
||||||
|
@ -713,7 +713,7 @@ int32_t LCodeGen::ToRepresentation(LConstantOperand* op,
|
|||||||
Handle<Object> LCodeGen::ToHandle(LConstantOperand* op) const {
|
Handle<Object> LCodeGen::ToHandle(LConstantOperand* op) const {
|
||||||
HConstant* constant = chunk_->LookupConstant(op);
|
HConstant* constant = chunk_->LookupConstant(op);
|
||||||
ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged());
|
ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged());
|
||||||
return constant->handle();
|
return constant->handle(isolate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -876,7 +876,7 @@ void LCodeGen::AddToTranslation(LEnvironment* environment,
|
|||||||
translation->StoreDoubleRegister(reg);
|
translation->StoreDoubleRegister(reg);
|
||||||
} else if (op->IsConstantOperand()) {
|
} else if (op->IsConstantOperand()) {
|
||||||
HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op));
|
HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op));
|
||||||
int src_index = DefineDeoptimizationLiteral(constant->handle());
|
int src_index = DefineDeoptimizationLiteral(constant->handle(isolate()));
|
||||||
translation->StoreLiteral(src_index);
|
translation->StoreLiteral(src_index);
|
||||||
} else {
|
} else {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
@ -936,7 +936,7 @@ void LCodeGen::LoadContextFromDeferred(LOperand* context) {
|
|||||||
} else if (context->IsConstantOperand()) {
|
} else if (context->IsConstantOperand()) {
|
||||||
HConstant* constant =
|
HConstant* constant =
|
||||||
chunk_->LookupConstant(LConstantOperand::cast(context));
|
chunk_->LookupConstant(LConstantOperand::cast(context));
|
||||||
__ LoadObject(esi, Handle<Object>::cast(constant->handle()));
|
__ LoadObject(esi, Handle<Object>::cast(constant->handle(isolate())));
|
||||||
} else {
|
} else {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
@ -1943,7 +1943,7 @@ void LCodeGen::DoConstantE(LConstantE* instr) {
|
|||||||
|
|
||||||
void LCodeGen::DoConstantT(LConstantT* instr) {
|
void LCodeGen::DoConstantT(LConstantT* instr) {
|
||||||
Register reg = ToRegister(instr->result());
|
Register reg = ToRegister(instr->result());
|
||||||
Handle<Object> handle = instr->value();
|
Handle<Object> handle = instr->value(isolate());
|
||||||
AllowDeferredHandleDereference smi_check;
|
AllowDeferredHandleDereference smi_check;
|
||||||
__ LoadObject(reg, handle);
|
__ LoadObject(reg, handle);
|
||||||
}
|
}
|
||||||
|
@ -1261,7 +1261,9 @@ class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> {
|
|||||||
DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
|
DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
|
||||||
DECLARE_HYDROGEN_ACCESSOR(Constant)
|
DECLARE_HYDROGEN_ACCESSOR(Constant)
|
||||||
|
|
||||||
Handle<Object> value() const { return hydrogen()->handle(); }
|
Handle<Object> value(Isolate* isolate) const {
|
||||||
|
return hydrogen()->handle(isolate);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -450,7 +450,7 @@ ExternalReference LCodeGen::ToExternalReference(LConstantOperand* op) const {
|
|||||||
Handle<Object> LCodeGen::ToHandle(LConstantOperand* op) const {
|
Handle<Object> LCodeGen::ToHandle(LConstantOperand* op) const {
|
||||||
HConstant* constant = chunk_->LookupConstant(op);
|
HConstant* constant = chunk_->LookupConstant(op);
|
||||||
ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged());
|
ASSERT(chunk_->LookupLiteralRepresentation(op).IsSmiOrTagged());
|
||||||
return constant->handle();
|
return constant->handle(isolate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -582,7 +582,7 @@ void LCodeGen::AddToTranslation(LEnvironment* environment,
|
|||||||
translation->StoreDoubleRegister(reg);
|
translation->StoreDoubleRegister(reg);
|
||||||
} else if (op->IsConstantOperand()) {
|
} else if (op->IsConstantOperand()) {
|
||||||
HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op));
|
HConstant* constant = chunk()->LookupConstant(LConstantOperand::cast(op));
|
||||||
int src_index = DefineDeoptimizationLiteral(constant->handle());
|
int src_index = DefineDeoptimizationLiteral(constant->handle(isolate()));
|
||||||
translation->StoreLiteral(src_index);
|
translation->StoreLiteral(src_index);
|
||||||
} else {
|
} else {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
@ -1598,7 +1598,7 @@ void LCodeGen::DoConstantE(LConstantE* instr) {
|
|||||||
|
|
||||||
|
|
||||||
void LCodeGen::DoConstantT(LConstantT* instr) {
|
void LCodeGen::DoConstantT(LConstantT* instr) {
|
||||||
Handle<Object> value = instr->value();
|
Handle<Object> value = instr->value(isolate());
|
||||||
AllowDeferredHandleDereference smi_check;
|
AllowDeferredHandleDereference smi_check;
|
||||||
__ LoadObject(ToRegister(instr->result()), value);
|
__ LoadObject(ToRegister(instr->result()), value);
|
||||||
}
|
}
|
||||||
|
@ -1221,7 +1221,9 @@ class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> {
|
|||||||
DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
|
DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
|
||||||
DECLARE_HYDROGEN_ACCESSOR(Constant)
|
DECLARE_HYDROGEN_ACCESSOR(Constant)
|
||||||
|
|
||||||
Handle<Object> value() const { return hydrogen()->handle(); }
|
Handle<Object> value(Isolate* isolate) const {
|
||||||
|
return hydrogen()->handle(isolate);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user