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

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

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 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
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/lib/profiler.cc » ('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) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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/bootstrap_natives.h" 5 #include "vm/bootstrap_natives.h"
6 6
7 #include "lib/invocation_mirror.h" 7 #include "lib/invocation_mirror.h"
8 #include "vm/code_patcher.h" 8 #include "vm/code_patcher.h"
9 #include "vm/exceptions.h" 9 #include "vm/exceptions.h"
10 #include "vm/heap.h" 10 #include "vm/heap.h"
11 #include "vm/native_entry.h" 11 #include "vm/native_entry.h"
12 #include "vm/object.h" 12 #include "vm/object.h"
13 #include "vm/stack_frame.h" 13 #include "vm/stack_frame.h"
14 #include "vm/symbols.h" 14 #include "vm/symbols.h"
15 15
16 namespace dart { 16 namespace dart {
17 17
18 DECLARE_FLAG(bool, trace_type_checks); 18 DECLARE_FLAG(bool, trace_type_checks);
19 19
20 DEFINE_NATIVE_ENTRY(DartAsync_fatal, 1) { 20 DEFINE_NATIVE_ENTRY(DartAsync_fatal, 1) {
21 // The dart:async library code entered an unrecoverable state. 21 // The dart:async library code entered an unrecoverable state.
22 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0)); 22 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0));
23 const char* msg = instance.ToCString(); 23 const char* msg = instance.ToCString();
24 OS::PrintErr("Fatal error in dart:async: %s\n", msg); 24 OS::PrintErr("Fatal error in dart:async: %s\n", msg);
25 FATAL(msg); 25 FATAL(msg);
26 return Object::null(); 26 return Object::null();
27 } 27 }
28 28
29
30 DEFINE_NATIVE_ENTRY(Object_equals, 1) { 29 DEFINE_NATIVE_ENTRY(Object_equals, 1) {
31 // Implemented in the flow graph builder. 30 // Implemented in the flow graph builder.
32 UNREACHABLE(); 31 UNREACHABLE();
33 return Object::null(); 32 return Object::null();
34 } 33 }
35 34
36
37 DEFINE_NATIVE_ENTRY(Object_getHash, 1) { 35 DEFINE_NATIVE_ENTRY(Object_getHash, 1) {
38 // Please note that no handle is created for the argument. 36 // Please note that no handle is created for the argument.
39 // This is safe since the argument is only used in a tail call. 37 // This is safe since the argument is only used in a tail call.
40 // The performance benefit is more than 5% when using hashCode. 38 // The performance benefit is more than 5% when using hashCode.
41 #if defined(HASH_IN_OBJECT_HEADER) 39 #if defined(HASH_IN_OBJECT_HEADER)
42 return Smi::New(Object::GetCachedHash(arguments->NativeArgAt(0))); 40 return Smi::New(Object::GetCachedHash(arguments->NativeArgAt(0)));
43 #else 41 #else
44 Heap* heap = isolate->heap(); 42 Heap* heap = isolate->heap();
45 ASSERT(arguments->NativeArgAt(0)->IsDartInstance()); 43 ASSERT(arguments->NativeArgAt(0)->IsDartInstance());
46 return Smi::New(heap->GetHash(arguments->NativeArgAt(0))); 44 return Smi::New(heap->GetHash(arguments->NativeArgAt(0)));
47 #endif 45 #endif
48 } 46 }
49 47
50
51 DEFINE_NATIVE_ENTRY(Object_setHash, 2) { 48 DEFINE_NATIVE_ENTRY(Object_setHash, 2) {
52 GET_NON_NULL_NATIVE_ARGUMENT(Smi, hash, arguments->NativeArgAt(1)); 49 GET_NON_NULL_NATIVE_ARGUMENT(Smi, hash, arguments->NativeArgAt(1));
53 #if defined(HASH_IN_OBJECT_HEADER) 50 #if defined(HASH_IN_OBJECT_HEADER)
54 Object::SetCachedHash(arguments->NativeArgAt(0), hash.Value()); 51 Object::SetCachedHash(arguments->NativeArgAt(0), hash.Value());
55 #else 52 #else
56 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0)); 53 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0));
57 Heap* heap = isolate->heap(); 54 Heap* heap = isolate->heap();
58 heap->SetHash(instance.raw(), hash.Value()); 55 heap->SetHash(instance.raw(), hash.Value());
59 #endif 56 #endif
60 return Object::null(); 57 return Object::null();
61 } 58 }
62 59
63
64 DEFINE_NATIVE_ENTRY(Object_toString, 1) { 60 DEFINE_NATIVE_ENTRY(Object_toString, 1) {
65 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0)); 61 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0));
66 if (instance.IsString()) { 62 if (instance.IsString()) {
67 return instance.raw(); 63 return instance.raw();
68 } 64 }
69 const char* c_str = instance.ToCString(); 65 const char* c_str = instance.ToCString();
70 return String::New(c_str); 66 return String::New(c_str);
71 } 67 }
72 68
73
74 DEFINE_NATIVE_ENTRY(Object_noSuchMethod, 6) { 69 DEFINE_NATIVE_ENTRY(Object_noSuchMethod, 6) {
75 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0)); 70 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0));
76 GET_NON_NULL_NATIVE_ARGUMENT(Bool, is_method, arguments->NativeArgAt(1)); 71 GET_NON_NULL_NATIVE_ARGUMENT(Bool, is_method, arguments->NativeArgAt(1));
77 GET_NON_NULL_NATIVE_ARGUMENT(String, member_name, arguments->NativeArgAt(2)); 72 GET_NON_NULL_NATIVE_ARGUMENT(String, member_name, arguments->NativeArgAt(2));
78 GET_NON_NULL_NATIVE_ARGUMENT(Smi, invocation_type, arguments->NativeArgAt(3)); 73 GET_NON_NULL_NATIVE_ARGUMENT(Smi, invocation_type, arguments->NativeArgAt(3));
79 GET_NON_NULL_NATIVE_ARGUMENT(Instance, func_args, arguments->NativeArgAt(4)); 74 GET_NON_NULL_NATIVE_ARGUMENT(Instance, func_args, arguments->NativeArgAt(4));
80 GET_NON_NULL_NATIVE_ARGUMENT(Instance, func_named_args, 75 GET_NON_NULL_NATIVE_ARGUMENT(Instance, func_named_args,
81 arguments->NativeArgAt(5)); 76 arguments->NativeArgAt(5));
82 const Array& dart_arguments = Array::Handle(Array::New(6)); 77 const Array& dart_arguments = Array::Handle(Array::New(6));
83 dart_arguments.SetAt(0, instance); 78 dart_arguments.SetAt(0, instance);
(...skipping 29 matching lines...) Expand all
113 for (int i = 1; i < total_num_parameters; i++) { 108 for (int i = 1; i < total_num_parameters; i++) {
114 array.SetAt(i - 1, String::Handle(function.ParameterNameAt(i))); 109 array.SetAt(i - 1, String::Handle(function.ParameterNameAt(i)));
115 } 110 }
116 dart_arguments.SetAt(5, array); 111 dart_arguments.SetAt(5, array);
117 } 112 }
118 } 113 }
119 Exceptions::ThrowByType(Exceptions::kNoSuchMethod, dart_arguments); 114 Exceptions::ThrowByType(Exceptions::kNoSuchMethod, dart_arguments);
120 return Object::null(); 115 return Object::null();
121 } 116 }
122 117
123
124 DEFINE_NATIVE_ENTRY(Object_runtimeType, 1) { 118 DEFINE_NATIVE_ENTRY(Object_runtimeType, 1) {
125 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0)); 119 const Instance& instance = Instance::CheckedHandle(arguments->NativeArgAt(0));
126 if (instance.IsString()) { 120 if (instance.IsString()) {
127 return Type::StringType(); 121 return Type::StringType();
128 } else if (instance.IsInteger()) { 122 } else if (instance.IsInteger()) {
129 return Type::IntType(); 123 return Type::IntType();
130 } else if (instance.IsDouble()) { 124 } else if (instance.IsDouble()) {
131 return Type::Double(); 125 return Type::Double();
132 } 126 }
133 return instance.GetType(Heap::kNew); 127 return instance.GetType(Heap::kNew);
134 } 128 }
135 129
136
137 DEFINE_NATIVE_ENTRY(Object_haveSameRuntimeType, 2) { 130 DEFINE_NATIVE_ENTRY(Object_haveSameRuntimeType, 2) {
138 const Instance& left = Instance::CheckedHandle(arguments->NativeArgAt(0)); 131 const Instance& left = Instance::CheckedHandle(arguments->NativeArgAt(0));
139 const Instance& right = Instance::CheckedHandle(arguments->NativeArgAt(1)); 132 const Instance& right = Instance::CheckedHandle(arguments->NativeArgAt(1));
140 133
141 const intptr_t left_cid = left.GetClassId(); 134 const intptr_t left_cid = left.GetClassId();
142 const intptr_t right_cid = right.GetClassId(); 135 const intptr_t right_cid = right.GetClassId();
143 136
144 if (left_cid != right_cid) { 137 if (left_cid != right_cid) {
145 if (RawObject::IsIntegerClassId(left_cid)) { 138 if (RawObject::IsIntegerClassId(left_cid)) {
146 return Bool::Get(RawObject::IsIntegerClassId(right_cid)).raw(); 139 return Bool::Get(RawObject::IsIntegerClassId(right_cid)).raw();
(...skipping 18 matching lines...) Expand all
165 return Bool::True().raw(); 158 return Bool::True().raw();
166 } 159 }
167 160
168 const TypeArguments& left_type_arguments = 161 const TypeArguments& left_type_arguments =
169 TypeArguments::Handle(left.GetTypeArguments()); 162 TypeArguments::Handle(left.GetTypeArguments());
170 const TypeArguments& right_type_arguments = 163 const TypeArguments& right_type_arguments =
171 TypeArguments::Handle(right.GetTypeArguments()); 164 TypeArguments::Handle(right.GetTypeArguments());
172 return Bool::Get(left_type_arguments.Equals(right_type_arguments)).raw(); 165 return Bool::Get(left_type_arguments.Equals(right_type_arguments)).raw();
173 } 166 }
174 167
175
176 DEFINE_NATIVE_ENTRY(Object_instanceOf, 4) { 168 DEFINE_NATIVE_ENTRY(Object_instanceOf, 4) {
177 const Instance& instance = 169 const Instance& instance =
178 Instance::CheckedHandle(zone, arguments->NativeArgAt(0)); 170 Instance::CheckedHandle(zone, arguments->NativeArgAt(0));
179 const TypeArguments& instantiator_type_arguments = 171 const TypeArguments& instantiator_type_arguments =
180 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1)); 172 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1));
181 const TypeArguments& function_type_arguments = 173 const TypeArguments& function_type_arguments =
182 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(2)); 174 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(2));
183 const AbstractType& type = 175 const AbstractType& type =
184 AbstractType::CheckedHandle(zone, arguments->NativeArgAt(3)); 176 AbstractType::CheckedHandle(zone, arguments->NativeArgAt(3));
185 ASSERT(type.IsFinalized()); 177 ASSERT(type.IsFinalized());
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 String& bound_error_message = 235 String& bound_error_message =
244 String::Handle(zone, String::New(bound_error.ToErrorCString())); 236 String::Handle(zone, String::New(bound_error.ToErrorCString()));
245 Exceptions::CreateAndThrowTypeError(location, AbstractType::Handle(zone), 237 Exceptions::CreateAndThrowTypeError(location, AbstractType::Handle(zone),
246 AbstractType::Handle(zone), 238 AbstractType::Handle(zone),
247 Symbols::Empty(), bound_error_message); 239 Symbols::Empty(), bound_error_message);
248 UNREACHABLE(); 240 UNREACHABLE();
249 } 241 }
250 return Bool::Get(is_instance_of).raw(); 242 return Bool::Get(is_instance_of).raw();
251 } 243 }
252 244
253
254 DEFINE_NATIVE_ENTRY(Object_as, 4) { 245 DEFINE_NATIVE_ENTRY(Object_as, 4) {
255 const Instance& instance = 246 const Instance& instance =
256 Instance::CheckedHandle(zone, arguments->NativeArgAt(0)); 247 Instance::CheckedHandle(zone, arguments->NativeArgAt(0));
257 const TypeArguments& instantiator_type_arguments = 248 const TypeArguments& instantiator_type_arguments =
258 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1)); 249 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1));
259 const TypeArguments& function_type_arguments = 250 const TypeArguments& function_type_arguments =
260 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(2)); 251 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(2));
261 AbstractType& type = 252 AbstractType& type =
262 AbstractType::CheckedHandle(zone, arguments->NativeArgAt(3)); 253 AbstractType::CheckedHandle(zone, arguments->NativeArgAt(3));
263 ASSERT(type.IsFinalized()); 254 ASSERT(type.IsFinalized());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 String::Handle(zone, String::New(bound_error.ToErrorCString())); 297 String::Handle(zone, String::New(bound_error.ToErrorCString()));
307 Exceptions::CreateAndThrowTypeError( 298 Exceptions::CreateAndThrowTypeError(
308 location, instance_type, AbstractType::Handle(zone), Symbols::Empty(), 299 location, instance_type, AbstractType::Handle(zone), Symbols::Empty(),
309 bound_error_message); 300 bound_error_message);
310 } 301 }
311 UNREACHABLE(); 302 UNREACHABLE();
312 } 303 }
313 return instance.raw(); 304 return instance.raw();
314 } 305 }
315 306
316
317 DEFINE_NATIVE_ENTRY(AbstractType_toString, 1) { 307 DEFINE_NATIVE_ENTRY(AbstractType_toString, 1) {
318 const AbstractType& type = 308 const AbstractType& type =
319 AbstractType::CheckedHandle(zone, arguments->NativeArgAt(0)); 309 AbstractType::CheckedHandle(zone, arguments->NativeArgAt(0));
320 return type.UserVisibleName(); 310 return type.UserVisibleName();
321 } 311 }
322 312
323
324 DEFINE_NATIVE_ENTRY(LibraryPrefix_invalidateDependentCode, 1) { 313 DEFINE_NATIVE_ENTRY(LibraryPrefix_invalidateDependentCode, 1) {
325 const LibraryPrefix& prefix = 314 const LibraryPrefix& prefix =
326 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0)); 315 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0));
327 prefix.InvalidateDependentCode(); 316 prefix.InvalidateDependentCode();
328 return Bool::Get(true).raw(); 317 return Bool::Get(true).raw();
329 } 318 }
330 319
331
332 DEFINE_NATIVE_ENTRY(LibraryPrefix_load, 1) { 320 DEFINE_NATIVE_ENTRY(LibraryPrefix_load, 1) {
333 const LibraryPrefix& prefix = 321 const LibraryPrefix& prefix =
334 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0)); 322 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0));
335 bool hasCompleted = prefix.LoadLibrary(); 323 bool hasCompleted = prefix.LoadLibrary();
336 return Bool::Get(hasCompleted).raw(); 324 return Bool::Get(hasCompleted).raw();
337 } 325 }
338 326
339
340 DEFINE_NATIVE_ENTRY(LibraryPrefix_loadError, 1) { 327 DEFINE_NATIVE_ENTRY(LibraryPrefix_loadError, 1) {
341 const LibraryPrefix& prefix = 328 const LibraryPrefix& prefix =
342 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0)); 329 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0));
343 // Currently all errors are Dart instances, e.g. I/O errors 330 // Currently all errors are Dart instances, e.g. I/O errors
344 // created by deferred loading code. LanguageErrors from 331 // created by deferred loading code. LanguageErrors from
345 // failed loading or finalization attempts are propagated and result 332 // failed loading or finalization attempts are propagated and result
346 // in the isolate's death. 333 // in the isolate's death.
347 const Instance& error = Instance::Handle(zone, prefix.LoadError()); 334 const Instance& error = Instance::Handle(zone, prefix.LoadError());
348 return error.raw(); 335 return error.raw();
349 } 336 }
350 337
351
352 DEFINE_NATIVE_ENTRY(LibraryPrefix_isLoaded, 1) { 338 DEFINE_NATIVE_ENTRY(LibraryPrefix_isLoaded, 1) {
353 const LibraryPrefix& prefix = 339 const LibraryPrefix& prefix =
354 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0)); 340 LibraryPrefix::CheckedHandle(zone, arguments->NativeArgAt(0));
355 return Bool::Get(prefix.is_loaded()).raw(); 341 return Bool::Get(prefix.is_loaded()).raw();
356 } 342 }
357 343
358
359 DEFINE_NATIVE_ENTRY(Internal_inquireIs64Bit, 0) { 344 DEFINE_NATIVE_ENTRY(Internal_inquireIs64Bit, 0) {
360 #if defined(ARCH_IS_64_BIT) 345 #if defined(ARCH_IS_64_BIT)
361 return Bool::True().raw(); 346 return Bool::True().raw();
362 #else 347 #else
363 return Bool::False().raw(); 348 return Bool::False().raw();
364 #endif // defined(ARCH_IS_64_BIT) 349 #endif // defined(ARCH_IS_64_BIT)
365 } 350 }
366 351
367
368 DEFINE_NATIVE_ENTRY(Internal_prependTypeArguments, 3) { 352 DEFINE_NATIVE_ENTRY(Internal_prependTypeArguments, 3) {
369 const TypeArguments& function_type_arguments = 353 const TypeArguments& function_type_arguments =
370 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(0)); 354 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(0));
371 const TypeArguments& parent_type_arguments = 355 const TypeArguments& parent_type_arguments =
372 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1)); 356 TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1));
373 if (function_type_arguments.IsNull() && parent_type_arguments.IsNull()) { 357 if (function_type_arguments.IsNull() && parent_type_arguments.IsNull()) {
374 return TypeArguments::null(); 358 return TypeArguments::null();
375 } 359 }
376 GET_NON_NULL_NATIVE_ARGUMENT(Smi, smi_len, arguments->NativeArgAt(2)); 360 GET_NON_NULL_NATIVE_ARGUMENT(Smi, smi_len, arguments->NativeArgAt(2));
377 const intptr_t len = smi_len.Value(); 361 const intptr_t len = smi_len.Value();
(...skipping 11 matching lines...) Expand all
389 for (intptr_t i = split; i < len; i++) { 373 for (intptr_t i = split; i < len; i++) {
390 type = function_type_arguments.IsNull() 374 type = function_type_arguments.IsNull()
391 ? Type::DynamicType() 375 ? Type::DynamicType()
392 : function_type_arguments.TypeAt(i - split); 376 : function_type_arguments.TypeAt(i - split);
393 result.SetTypeAt(i, type); 377 result.SetTypeAt(i, type);
394 } 378 }
395 return result.Canonicalize(); 379 return result.Canonicalize();
396 } 380 }
397 381
398 } // namespace dart 382 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/lib/profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698