Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: runtime/vm/object.cc

Issue 11833025: Fix for issue 7757 (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/stack_frame.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/bigint_operations.h" 10 #include "vm/bigint_operations.h"
(...skipping 7130 matching lines...) Expand 10 before | Expand all | Expand 10 after
7141 void Code::set_object_table(const Array& array) const { 7141 void Code::set_object_table(const Array& array) const {
7142 StorePointer(&raw_ptr()->object_table_, array.raw()); 7142 StorePointer(&raw_ptr()->object_table_, array.raw());
7143 } 7143 }
7144 7144
7145 7145
7146 void Code::set_static_calls_target_table(const Array& value) const { 7146 void Code::set_static_calls_target_table(const Array& value) const {
7147 StorePointer(&raw_ptr()->static_calls_target_table_, value.raw()); 7147 StorePointer(&raw_ptr()->static_calls_target_table_, value.raw());
7148 } 7148 }
7149 7149
7150 7150
7151 RawDeoptInfo* Code::GetDeoptInfoAtPc(uword pc, intptr_t* deopt_reason) const {
7152 ASSERT(is_optimized());
7153 const Instructions& instrs = Instructions::Handle(instructions());
7154 uword code_entry = instrs.EntryPoint();
7155 const Array& table = Array::Handle(deopt_info_array());
7156 ASSERT(!table.IsNull());
7157 // Linear search for the PC offset matching the target PC.
7158 intptr_t length = DeoptTable::GetLength(table);
7159 Smi& offset = Smi::Handle();
7160 Smi& reason = Smi::Handle();
7161 DeoptInfo& info = DeoptInfo::Handle();
7162 for (intptr_t i = 0; i < length; ++i) {
7163 DeoptTable::GetEntry(table, i, &offset, &info, &reason);
7164 if (pc == (code_entry + offset.Value())) {
7165 ASSERT(!info.IsNull());
7166 *deopt_reason = reason.Value();
7167 return info.raw();
7168 }
7169 }
7170 *deopt_reason = kDeoptUnknown;
7171 return DeoptInfo::null();
7172 }
7173
7174
7151 RawFunction* Code::GetStaticCallTargetFunctionAt(uword pc) const { 7175 RawFunction* Code::GetStaticCallTargetFunctionAt(uword pc) const {
7152 RawObject* raw_code_offset = 7176 RawObject* raw_code_offset =
7153 reinterpret_cast<RawObject*>(Smi::New(pc - EntryPoint())); 7177 reinterpret_cast<RawObject*>(Smi::New(pc - EntryPoint()));
7154 const Array& array = 7178 const Array& array =
7155 Array::Handle(raw_ptr()->static_calls_target_table_); 7179 Array::Handle(raw_ptr()->static_calls_target_table_);
7156 for (intptr_t i = 0; i < array.Length(); i += kSCallTableEntryLength) { 7180 for (intptr_t i = 0; i < array.Length(); i += kSCallTableEntryLength) {
7157 if (array.At(i) == raw_code_offset) { 7181 if (array.At(i) == raw_code_offset) {
7158 Function& function = Function::Handle(); 7182 Function& function = Function::Handle();
7159 function ^= array.At(i + kSCallTableFunctionEntry); 7183 function ^= array.At(i + kSCallTableFunctionEntry);
7160 return function.raw(); 7184 return function.raw();
(...skipping 5307 matching lines...) Expand 10 before | Expand all | Expand 10 after
12468 } 12492 }
12469 return result.raw(); 12493 return result.raw();
12470 } 12494 }
12471 12495
12472 12496
12473 const char* WeakProperty::ToCString() const { 12497 const char* WeakProperty::ToCString() const {
12474 return "_WeakProperty"; 12498 return "_WeakProperty";
12475 } 12499 }
12476 12500
12477 } // namespace dart 12501 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/stack_frame.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698