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

Side by Side Diff: vm/object.cc

Issue 10807078: Address review comments from a previous CL. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 5 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
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 "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/bigint_operations.h" 9 #include "vm/bigint_operations.h"
10 #include "vm/bootstrap.h" 10 #include "vm/bootstrap.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 RawClass* Object::icdata_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 90 RawClass* Object::icdata_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
91 RawClass* Object::subtypetestcache_class_ = 91 RawClass* Object::subtypetestcache_class_ =
92 reinterpret_cast<RawClass*>(RAW_NULL); 92 reinterpret_cast<RawClass*>(RAW_NULL);
93 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 93 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
94 RawClass* Object::language_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 94 RawClass* Object::language_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
95 RawClass* Object::unhandled_exception_class_ = 95 RawClass* Object::unhandled_exception_class_ =
96 reinterpret_cast<RawClass*>(RAW_NULL); 96 reinterpret_cast<RawClass*>(RAW_NULL);
97 RawClass* Object::unwind_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 97 RawClass* Object::unwind_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
98 #undef RAW_NULL 98 #undef RAW_NULL
99 99
100 int Object::GetSingletonClassIndex(const RawClass* raw_class) { 100 int Object::GetSingletonClassIndex(const RawObject* raw_obj) {
101 ASSERT(raw_class->IsHeapObject()); 101 ASSERT(raw_obj->IsHeapObject());
102 if (raw_class == class_class()) { 102 intptr_t id = raw_obj->GetClassId();
103 return kClassClass; 103 if (id == kClass) {
104 } else if (raw_class == null_class()) { 104 const RawClass* raw_class = reinterpret_cast<const RawClass*>(raw_obj);
105 return kNullClass; 105 id = raw_class->ptr()->id_;
106 } else if (raw_class == dynamic_class()) { 106 if ((id >= kClass && id <= kUnwindError) ||
107 return kDynamicClass; 107 (id >= kNullClassId && id <= kVoidClassId)) {
regis 2012/07/24 13:49:25 We usually wrap all terms in parentheses.
siva 2012/08/13 20:38:25 This function has been deleted in newer code. On
108 } else if (raw_class == void_class()) { 108 return id;
109 return kVoidClass; 109 }
110 } else if (raw_class == unresolved_class_class()) {
111 return kUnresolvedClassClass;
112 } else if (raw_class == type_class()) {
113 return kTypeClass;
114 } else if (raw_class == type_parameter_class()) {
115 return kTypeParameterClass;
116 } else if (raw_class == type_arguments_class()) {
117 return kTypeArgumentsClass;
118 } else if (raw_class == instantiated_type_arguments_class()) {
119 return kInstantiatedTypeArgumentsClass;
120 } else if (raw_class == function_class()) {
121 return kFunctionClass;
122 } else if (raw_class == field_class()) {
123 return kFieldClass;
124 } else if (raw_class == literal_token_class()) {
125 return kLiteralTokenClass;
126 } else if (raw_class == token_stream_class()) {
127 return kTokenStreamClass;
128 } else if (raw_class == script_class()) {
129 return kScriptClass;
130 } else if (raw_class == library_class()) {
131 return kLibraryClass;
132 } else if (raw_class == library_prefix_class()) {
133 return kLibraryPrefixClass;
134 } else if (raw_class == code_class()) {
135 return kCodeClass;
136 } else if (raw_class == instructions_class()) {
137 return kInstructionsClass;
138 } else if (raw_class == pc_descriptors_class()) {
139 return kPcDescriptorsClass;
140 } else if (raw_class == stackmap_class()) {
141 return kStackmapClass;
142 } else if (raw_class == var_descriptors_class()) {
143 return kLocalVarDescriptorsClass;
144 } else if (raw_class == exception_handlers_class()) {
145 return kExceptionHandlersClass;
146 } else if (raw_class == context_class()) {
147 return kContextClass;
148 } else if (raw_class == context_scope_class()) {
149 return kContextScopeClass;
150 } else if (raw_class == icdata_class()) {
151 return kICDataClass;
152 } else if (raw_class == subtypetestcache_class()) {
153 return kSubtypeTestCacheClass;
154 } else if (raw_class == api_error_class()) {
155 return kApiErrorClass;
156 } else if (raw_class == language_error_class()) {
157 return kLanguageErrorClass;
158 } else if (raw_class == unhandled_exception_class()) {
159 return kUnhandledExceptionClass;
160 } else if (raw_class == unwind_error_class()) {
161 return kUnwindErrorClass;
162 } 110 }
163 return kInvalidIndex; 111 return kInvalidIndex;
164 } 112 }
165 113
166 114
167 RawClass* Object::GetSingletonClass(int index) { 115 const char* Object::GetSingletonClassName(int index) {
168 switch (index) { 116 switch (index) {
169 case kClassClass: return class_class(); 117 case kClass: return "Class";
170 case kNullClass: return null_class(); 118 case kUnresolvedClass: return "UnresolvedClass";
171 case kDynamicClass: return dynamic_class(); 119 case kType: return "Type";
172 case kVoidClass: return void_class(); 120 case kTypeParameter: return "TypeParameter";
173 case kUnresolvedClassClass: return unresolved_class_class(); 121 case kTypeArguments: return "TypeArguments";
174 case kTypeClass: return type_class(); 122 case kInstantiatedTypeArguments: return "InstantiatedTypeArguments";
175 case kTypeParameterClass: return type_parameter_class(); 123 case kFunction: return "Function";
176 case kTypeArgumentsClass: return type_arguments_class(); 124 case kField: return "Field";
177 case kInstantiatedTypeArgumentsClass: 125 case kLiteralToken: return "LiteralToken";
178 return instantiated_type_arguments_class(); 126 case kTokenStream: return "TokenStream";
179 case kFunctionClass: return function_class(); 127 case kScript: return "Script";
180 case kFieldClass: return field_class(); 128 case kLibrary: return "Library";
181 case kLiteralTokenClass: return literal_token_class(); 129 case kLibraryPrefix: return "LibraryPrefix";
182 case kTokenStreamClass: return token_stream_class(); 130 case kCode: return "Code";
183 case kScriptClass: return script_class(); 131 case kInstructions: return "Instructions";
184 case kLibraryClass: return library_class(); 132 case kPcDescriptors: return "PcDescriptors";
185 case kLibraryPrefixClass: return library_prefix_class(); 133 case kStackmap: return "Stackmap";
186 case kCodeClass: return code_class(); 134 case kLocalVarDescriptors: return "LocalVarDescriptors";
187 case kInstructionsClass: return instructions_class(); 135 case kExceptionHandlers: return "ExceptionHandlers";
188 case kPcDescriptorsClass: return pc_descriptors_class(); 136 case kContext: return "Context";
189 case kStackmapClass: return stackmap_class(); 137 case kContextScope: return "ContextScope";
190 case kLocalVarDescriptorsClass: return var_descriptors_class(); 138 case kICData: return "ICData";
191 case kExceptionHandlersClass: return exception_handlers_class(); 139 case kSubtypeTestCache: return "SubtypeTestCache";
192 case kContextClass: return context_class(); 140 case kApiError: return "ApiError";
193 case kContextScopeClass: return context_scope_class(); 141 case kLanguageError: return "LanguageError";
194 case kICDataClass: return icdata_class(); 142 case kUnhandledException: return "UnhandledException";
195 case kSubtypeTestCacheClass: return subtypetestcache_class(); 143 case kUnwindError: return "UnwindError";
196 case kApiErrorClass: return api_error_class(); 144 case kNullClassId: return "Null";
197 case kLanguageErrorClass: return language_error_class(); 145 case kDynamicClassId: return "Dynamic";
198 case kUnhandledExceptionClass: return unhandled_exception_class(); 146 case kVoidClassId: return "void";
199 case kUnwindErrorClass: return unwind_error_class();
200 default: break; 147 default: break;
201 } 148 }
202 UNREACHABLE(); 149 UNREACHABLE();
203 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL.
204 }
205
206
207 const char* Object::GetSingletonClassName(int index) {
208 switch (index) {
209 case kClassClass: return "Class";
210 case kNullClass: return "Null";
211 case kDynamicClass: return "Dynamic";
212 case kVoidClass: return "void";
213 case kUnresolvedClassClass: return "UnresolvedClass";
214 case kTypeClass: return "Type";
215 case kTypeParameterClass: return "TypeParameter";
216 case kTypeArgumentsClass: return "TypeArguments";
217 case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments";
218 case kFunctionClass: return "Function";
219 case kFieldClass: return "Field";
220 case kLiteralTokenClass: return "LiteralToken";
221 case kTokenStreamClass: return "TokenStream";
222 case kScriptClass: return "Script";
223 case kLibraryClass: return "Library";
224 case kLibraryPrefixClass: return "LibraryPrefix";
225 case kCodeClass: return "Code";
226 case kInstructionsClass: return "Instructions";
227 case kPcDescriptorsClass: return "PcDescriptors";
228 case kStackmapClass: return "Stackmap";
229 case kLocalVarDescriptorsClass: return "LocalVarDescriptors";
230 case kExceptionHandlersClass: return "ExceptionHandlers";
231 case kContextClass: return "Context";
232 case kContextScopeClass: return "ContextScope";
233 case kICDataClass: return "ICData";
234 case kSubtypeTestCacheClass: return "SubtypeTestCache";
235 case kApiErrorClass: return "ApiError";
236 case kLanguageErrorClass: return "LanguageError";
237 case kUnhandledExceptionClass: return "UnhandledException";
238 case kUnwindErrorClass: return "UnwindError";
239 default: break;
240 }
241 UNREACHABLE();
242 return NULL; 150 return NULL;
243 } 151 }
244 152
245 153
246 void Object::InitOnce() { 154 void Object::InitOnce() {
247 // TODO(iposva): NoGCScope needs to be added here. 155 // TODO(iposva): NoGCScope needs to be added here.
248 ASSERT(class_class() == null_); 156 ASSERT(class_class() == null_);
249 // Initialize the static vtable values. 157 // Initialize the static vtable values.
250 { 158 {
251 Object fake_object; 159 Object fake_object;
(...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 } 953 }
1046 return raw_obj; 954 return raw_obj;
1047 } 955 }
1048 956
1049 957
1050 RawString* Class::Name() const { 958 RawString* Class::Name() const {
1051 if (raw_ptr()->name_ != String::null()) { 959 if (raw_ptr()->name_ != String::null()) {
1052 return raw_ptr()->name_; 960 return raw_ptr()->name_;
1053 } 961 }
1054 ASSERT(class_class() != Class::null()); // class_class_ should be set up. 962 ASSERT(class_class() != Class::null()); // class_class_ should be set up.
1055 intptr_t index = GetSingletonClassIndex(raw()); 963 return String::NewSymbol(GetSingletonClassName(raw_ptr()->id_));
1056 return String::NewSymbol(GetSingletonClassName(index));
1057 } 964 }
1058 965
1059 966
1060 RawString* Class::UserVisibleName() const { 967 RawString* Class::UserVisibleName() const {
1061 if (FLAG_show_internal_names) { 968 if (FLAG_show_internal_names) {
1062 return Name(); 969 return Name();
1063 } 970 }
1064 switch (id()) { 971 switch (id()) {
1065 case kInteger: 972 case kInteger:
1066 case kSmi: 973 case kSmi:
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
1603 const Type& signature_type = Type::Handle(result.SignatureType()); 1510 const Type& signature_type = Type::Handle(result.SignatureType());
1604 ASSERT(!signature_type.IsFinalized()); 1511 ASSERT(!signature_type.IsFinalized());
1605 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); 1512 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld));
1606 new_canonical_types.SetAt(0, signature_type); 1513 new_canonical_types.SetAt(0, signature_type);
1607 result.set_canonical_types(new_canonical_types); 1514 result.set_canonical_types(new_canonical_types);
1608 return result.raw(); 1515 return result.raw();
1609 } 1516 }
1610 1517
1611 1518
1612 RawClass* Class::GetClass(ObjectKind kind) { 1519 RawClass* Class::GetClass(ObjectKind kind) {
1613 ObjectStore* object_store = Isolate::Current()->object_store(); 1520 if (kind == kClosure) {
1614 switch (kind) { 1521 return Class::New<Closure>();
1615 case kInteger:
1616 ASSERT(object_store->integer_implementation_class() != Class::null());
1617 return object_store->integer_implementation_class();
1618 case kSmi:
1619 ASSERT(object_store->smi_class() != Class::null());
1620 return object_store->smi_class();
1621 case kMint:
1622 ASSERT(object_store->mint_class() != Class::null());
1623 return object_store->mint_class();
1624 case kBigint:
1625 ASSERT(object_store->bigint_class() != Class::null());
1626 return object_store->bigint_class();
1627 case kDouble:
1628 ASSERT(object_store->double_class() != Class::null());
1629 return object_store->double_class();
1630 case kOneByteString:
1631 ASSERT(object_store->one_byte_string_class() != Class::null());
1632 return object_store->one_byte_string_class();
1633 case kTwoByteString:
1634 ASSERT(object_store->two_byte_string_class() != Class::null());
1635 return object_store->two_byte_string_class();
1636 case kFourByteString:
1637 ASSERT(object_store->four_byte_string_class() != Class::null());
1638 return object_store->four_byte_string_class();
1639 case kExternalOneByteString:
1640 ASSERT(object_store->external_one_byte_string_class() != Class::null());
1641 return object_store->external_one_byte_string_class();
1642 case kExternalTwoByteString:
1643 ASSERT(object_store->external_two_byte_string_class() != Class::null());
1644 return object_store->external_two_byte_string_class();
1645 case kExternalFourByteString:
1646 ASSERT(object_store->external_four_byte_string_class() != Class::null());
1647 return object_store->external_four_byte_string_class();
1648 case kBool:
1649 ASSERT(object_store->bool_class() != Class::null());
1650 return object_store->bool_class();
1651 case kArray:
1652 ASSERT(object_store->array_class() != Class::null());
1653 return object_store->array_class();
1654 case kImmutableArray:
1655 ASSERT(object_store->immutable_array_class() != Class::null());
1656 return object_store->immutable_array_class();
1657 case kGrowableObjectArray:
1658 ASSERT(object_store->growable_object_array_class() != Class::null());
1659 return object_store->growable_object_array_class();
1660 case kInt8Array:
1661 ASSERT(object_store->int8_array_class() != Class::null());
1662 return object_store->int8_array_class();
1663 case kUint8Array:
1664 ASSERT(object_store->uint8_array_class() != Class::null());
1665 return object_store->uint8_array_class();
1666 case kInt16Array:
1667 ASSERT(object_store->int16_array_class() != Class::null());
1668 return object_store->int16_array_class();
1669 case kUint16Array:
1670 ASSERT(object_store->uint16_array_class() != Class::null());
1671 return object_store->uint16_array_class();
1672 case kInt32Array:
1673 ASSERT(object_store->int32_array_class() != Class::null());
1674 return object_store->int32_array_class();
1675 case kUint32Array:
1676 ASSERT(object_store->uint32_array_class() != Class::null());
1677 return object_store->uint32_array_class();
1678 case kInt64Array:
1679 ASSERT(object_store->int64_array_class() != Class::null());
1680 return object_store->int64_array_class();
1681 case kUint64Array:
1682 ASSERT(object_store->uint64_array_class() != Class::null());
1683 return object_store->uint64_array_class();
1684 case kFloat32Array:
1685 ASSERT(object_store->float32_array_class() != Class::null());
1686 return object_store->float32_array_class();
1687 case kFloat64Array:
1688 ASSERT(object_store->float64_array_class() != Class::null());
1689 return object_store->float64_array_class();
1690 case kExternalInt8Array:
1691 ASSERT(object_store->external_int8_array_class() != Class::null());
1692 return object_store->external_int8_array_class();
1693 case kExternalUint8Array:
1694 ASSERT(object_store->external_uint8_array_class() != Class::null());
1695 return object_store->external_uint8_array_class();
1696 case kExternalInt16Array:
1697 ASSERT(object_store->external_int16_array_class() != Class::null());
1698 return object_store->external_int16_array_class();
1699 case kExternalUint16Array:
1700 ASSERT(object_store->external_uint16_array_class() != Class::null());
1701 return object_store->external_uint16_array_class();
1702 case kExternalInt32Array:
1703 ASSERT(object_store->external_int32_array_class() != Class::null());
1704 return object_store->external_int32_array_class();
1705 case kExternalUint32Array:
1706 ASSERT(object_store->external_uint32_array_class() != Class::null());
1707 return object_store->external_uint32_array_class();
1708 case kExternalInt64Array:
1709 ASSERT(object_store->external_int64_array_class() != Class::null());
1710 return object_store->external_int64_array_class();
1711 case kExternalUint64Array:
1712 ASSERT(object_store->external_uint64_array_class() != Class::null());
1713 return object_store->external_uint64_array_class();
1714 case kExternalFloat32Array:
1715 ASSERT(object_store->external_float32_array_class() != Class::null());
1716 return object_store->external_float32_array_class();
1717 case kExternalFloat64Array:
1718 ASSERT(object_store->external_float64_array_class() != Class::null());
1719 return object_store->external_float64_array_class();
1720 case kStacktrace:
1721 ASSERT(object_store->stacktrace_class() != Class::null());
1722 return object_store->stacktrace_class();
1723 case kJSRegExp:
1724 ASSERT(object_store->jsregexp_class() != Class::null());
1725 return object_store->jsregexp_class();
1726 case kClosure:
1727 return Class::New<Closure>();
1728 case kInstance:
1729 return Class::New<Instance>();
1730 default:
1731 OS::Print("Class::GetClass kind unknown: %d\n", kind);
1732 UNREACHABLE();
1733 } 1522 }
1523 if (kind == kInstance) {
1524 return Class::New<Instance>();
1525 }
1526 if (kind >= kInteger && kind <= kJSRegExp) {
1527 Isolate* isolate = Isolate::Current();
1528 ASSERT(isolate->class_table()->At(kind) != Class::null());
1529 return isolate->class_table()->At(kind);
1530 }
1531 OS::Print("Class::GetClass kind unknown: %d\n", kind);
1532 UNREACHABLE();
1734 return Class::null(); 1533 return Class::null();
1735 } 1534 }
1736 1535
1737 1536
1738 RawClass* Class::NewNativeWrapper(Library* library, 1537 RawClass* Class::NewNativeWrapper(Library* library,
1739 const String& name, 1538 const String& name,
1740 int field_count) { 1539 int field_count) {
1741 Class& cls = Class::Handle(library->LookupClass(name)); 1540 Class& cls = Class::Handle(library->LookupClass(name));
1742 if (cls.IsNull()) { 1541 if (cls.IsNull()) {
1743 cls = New<Instance>(name, Script::Handle(), Scanner::kDummyTokenIndex); 1542 cls = New<Instance>(name, Script::Handle(), Scanner::kDummyTokenIndex);
(...skipping 5465 matching lines...) Expand 10 before | Expand all | Expand 10 after
7209 const Function& target) const { 7008 const Function& target) const {
7210 ASSERT(num_args_tested() > 1); // Otherwise use 'AddReceiverCheck'. 7009 ASSERT(num_args_tested() > 1); // Otherwise use 'AddReceiverCheck'.
7211 ASSERT(class_ids.length() == num_args_tested()); 7010 ASSERT(class_ids.length() == num_args_tested());
7212 intptr_t old_num = NumberOfChecks(); 7011 intptr_t old_num = NumberOfChecks();
7213 Array& data = Array::Handle(ic_data()); 7012 Array& data = Array::Handle(ic_data());
7214 intptr_t new_len = data.Length() + TestEntryLength(); 7013 intptr_t new_len = data.Length() + TestEntryLength();
7215 data = Array::Grow(data, new_len, Heap::kOld); 7014 data = Array::Grow(data, new_len, Heap::kOld);
7216 set_ic_data(data); 7015 set_ic_data(data);
7217 intptr_t data_pos = old_num * TestEntryLength(); 7016 intptr_t data_pos = old_num * TestEntryLength();
7218 for (intptr_t i = 0; i < class_ids.length(); i++) { 7017 for (intptr_t i = 0; i < class_ids.length(); i++) {
7219 // Null is used as terminating value, do not add it. 7018 // Null is used as terminating value, do not add it.
regis 2012/07/24 13:49:25 You need to sync: r9835 committed - Use kIllegalOb
siva 2012/08/13 20:38:25 Done.
7220 ASSERT(class_ids[i] != kNullClass);
7221 ASSERT(class_ids[i] != kIllegalObjectKind); 7019 ASSERT(class_ids[i] != kIllegalObjectKind);
7222 data.SetAt(data_pos++, Smi::Handle(Smi::New(class_ids[i]))); 7020 data.SetAt(data_pos++, Smi::Handle(Smi::New(class_ids[i])));
7223 } 7021 }
7224 ASSERT(!target.IsNull()); 7022 ASSERT(!target.IsNull());
7225 data.SetAt(data_pos, target); 7023 data.SetAt(data_pos, target);
7226 } 7024 }
7227 7025
7228 7026
7229 void ICData::AddReceiverCheck(intptr_t receiver_class_id, 7027 void ICData::AddReceiverCheck(intptr_t receiver_class_id,
7230 const Function& target) const { 7028 const Function& target) const {
7231 ASSERT(num_args_tested() == 1); // Otherwise use 'AddCheck'. 7029 ASSERT(num_args_tested() == 1); // Otherwise use 'AddCheck'.
7232 // Not supporting collection of null receivers. 7030 // Not supporting collection of null receivers.
7233 ASSERT(receiver_class_id != kNullClass); 7031 ASSERT(receiver_class_id != kNullClassId);
7234 ASSERT(receiver_class_id != kIllegalObjectKind); 7032 ASSERT(receiver_class_id != kIllegalObjectKind);
7235 ASSERT(!target.IsNull()); 7033 ASSERT(!target.IsNull());
7236 7034
7237 intptr_t old_num = NumberOfChecks(); 7035 intptr_t old_num = NumberOfChecks();
7238 Array& data = Array::Handle(ic_data()); 7036 Array& data = Array::Handle(ic_data());
7239 intptr_t new_len = data.Length() + TestEntryLength(); 7037 intptr_t new_len = data.Length() + TestEntryLength();
7240 data = Array::Grow(data, new_len, Heap::kOld); 7038 data = Array::Grow(data, new_len, Heap::kOld);
7241 set_ic_data(data); 7039 set_ic_data(data);
7242 intptr_t data_pos = old_num * TestEntryLength(); 7040 intptr_t data_pos = old_num * TestEntryLength();
7243 if ((receiver_class_id == kSmi) && (data_pos > 0)) { 7041 if ((receiver_class_id == kSmi) && (data_pos > 0)) {
(...skipping 3631 matching lines...) Expand 10 before | Expand all | Expand 10 after
10875 const String& str = String::Handle(pattern()); 10673 const String& str = String::Handle(pattern());
10876 const char* format = "JSRegExp: pattern=%s flags=%s"; 10674 const char* format = "JSRegExp: pattern=%s flags=%s";
10877 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 10675 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
10878 char* chars = reinterpret_cast<char*>( 10676 char* chars = reinterpret_cast<char*>(
10879 Isolate::Current()->current_zone()->Allocate(len + 1)); 10677 Isolate::Current()->current_zone()->Allocate(len + 1));
10880 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 10678 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
10881 return chars; 10679 return chars;
10882 } 10680 }
10883 10681
10884 } // namespace dart 10682 } // namespace dart
OLDNEW
« vm/dart_api_message.cc ('K') | « vm/object.h ('k') | vm/object_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698