| OLD | NEW |
| 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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 RawInstance* Object::transition_sentinel_ = | 55 RawInstance* Object::transition_sentinel_ = |
| 56 reinterpret_cast<RawInstance*>(RAW_NULL); | 56 reinterpret_cast<RawInstance*>(RAW_NULL); |
| 57 RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 57 RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 58 RawClass* Object::null_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 58 RawClass* Object::null_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 59 RawClass* Object::dynamic_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 59 RawClass* Object::dynamic_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 60 RawClass* Object::void_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 60 RawClass* Object::void_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 61 RawClass* Object::unresolved_class_class_ = | 61 RawClass* Object::unresolved_class_class_ = |
| 62 reinterpret_cast<RawClass*>(RAW_NULL); | 62 reinterpret_cast<RawClass*>(RAW_NULL); |
| 63 RawClass* Object::type_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 63 RawClass* Object::type_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 64 RawClass* Object::type_parameter_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 64 RawClass* Object::type_parameter_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 65 RawClass* Object::instantiated_type_class_ = | |
| 66 reinterpret_cast<RawClass*>(RAW_NULL); | |
| 67 RawClass* Object::abstract_type_arguments_class_ = | |
| 68 reinterpret_cast<RawClass*>(RAW_NULL); | |
| 69 RawClass* Object::type_arguments_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 65 RawClass* Object::type_arguments_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 70 RawClass* Object::instantiated_type_arguments_class_ = | 66 RawClass* Object::instantiated_type_arguments_class_ = |
| 71 reinterpret_cast<RawClass*>(RAW_NULL); | 67 reinterpret_cast<RawClass*>(RAW_NULL); |
| 72 RawClass* Object::function_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 68 RawClass* Object::function_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 73 RawClass* Object::field_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 69 RawClass* Object::field_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 74 RawClass* Object::literal_token_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 70 RawClass* Object::literal_token_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 75 RawClass* Object::token_stream_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 71 RawClass* Object::token_stream_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 76 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 72 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 77 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 73 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 78 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 74 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 105 } else if (raw_class == dynamic_class()) { | 101 } else if (raw_class == dynamic_class()) { |
| 106 return kDynamicClass; | 102 return kDynamicClass; |
| 107 } else if (raw_class == void_class()) { | 103 } else if (raw_class == void_class()) { |
| 108 return kVoidClass; | 104 return kVoidClass; |
| 109 } else if (raw_class == unresolved_class_class()) { | 105 } else if (raw_class == unresolved_class_class()) { |
| 110 return kUnresolvedClassClass; | 106 return kUnresolvedClassClass; |
| 111 } else if (raw_class == type_class()) { | 107 } else if (raw_class == type_class()) { |
| 112 return kTypeClass; | 108 return kTypeClass; |
| 113 } else if (raw_class == type_parameter_class()) { | 109 } else if (raw_class == type_parameter_class()) { |
| 114 return kTypeParameterClass; | 110 return kTypeParameterClass; |
| 115 } else if (raw_class == instantiated_type_class()) { | |
| 116 return kInstantiatedTypeClass; | |
| 117 } else if (raw_class == abstract_type_arguments_class()) { | |
| 118 return kAbstractTypeArgumentsClass; | |
| 119 } else if (raw_class == type_arguments_class()) { | 111 } else if (raw_class == type_arguments_class()) { |
| 120 return kTypeArgumentsClass; | 112 return kTypeArgumentsClass; |
| 121 } else if (raw_class == instantiated_type_arguments_class()) { | 113 } else if (raw_class == instantiated_type_arguments_class()) { |
| 122 return kInstantiatedTypeArgumentsClass; | 114 return kInstantiatedTypeArgumentsClass; |
| 123 } else if (raw_class == function_class()) { | 115 } else if (raw_class == function_class()) { |
| 124 return kFunctionClass; | 116 return kFunctionClass; |
| 125 } else if (raw_class == field_class()) { | 117 } else if (raw_class == field_class()) { |
| 126 return kFieldClass; | 118 return kFieldClass; |
| 127 } else if (raw_class == literal_token_class()) { | 119 } else if (raw_class == literal_token_class()) { |
| 128 return kLiteralTokenClass; | 120 return kLiteralTokenClass; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 | 161 |
| 170 RawClass* Object::GetSingletonClass(int index) { | 162 RawClass* Object::GetSingletonClass(int index) { |
| 171 switch (index) { | 163 switch (index) { |
| 172 case kClassClass: return class_class(); | 164 case kClassClass: return class_class(); |
| 173 case kNullClass: return null_class(); | 165 case kNullClass: return null_class(); |
| 174 case kDynamicClass: return dynamic_class(); | 166 case kDynamicClass: return dynamic_class(); |
| 175 case kVoidClass: return void_class(); | 167 case kVoidClass: return void_class(); |
| 176 case kUnresolvedClassClass: return unresolved_class_class(); | 168 case kUnresolvedClassClass: return unresolved_class_class(); |
| 177 case kTypeClass: return type_class(); | 169 case kTypeClass: return type_class(); |
| 178 case kTypeParameterClass: return type_parameter_class(); | 170 case kTypeParameterClass: return type_parameter_class(); |
| 179 case kInstantiatedTypeClass: return instantiated_type_class(); | |
| 180 case kAbstractTypeArgumentsClass: return abstract_type_arguments_class(); | |
| 181 case kTypeArgumentsClass: return type_arguments_class(); | 171 case kTypeArgumentsClass: return type_arguments_class(); |
| 182 case kInstantiatedTypeArgumentsClass: | 172 case kInstantiatedTypeArgumentsClass: |
| 183 return instantiated_type_arguments_class(); | 173 return instantiated_type_arguments_class(); |
| 184 case kFunctionClass: return function_class(); | 174 case kFunctionClass: return function_class(); |
| 185 case kFieldClass: return field_class(); | 175 case kFieldClass: return field_class(); |
| 186 case kLiteralTokenClass: return literal_token_class(); | 176 case kLiteralTokenClass: return literal_token_class(); |
| 187 case kTokenStreamClass: return token_stream_class(); | 177 case kTokenStreamClass: return token_stream_class(); |
| 188 case kScriptClass: return script_class(); | 178 case kScriptClass: return script_class(); |
| 189 case kLibraryClass: return library_class(); | 179 case kLibraryClass: return library_class(); |
| 190 case kLibraryPrefixClass: return library_prefix_class(); | 180 case kLibraryPrefixClass: return library_prefix_class(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 211 | 201 |
| 212 const char* Object::GetSingletonClassName(int index) { | 202 const char* Object::GetSingletonClassName(int index) { |
| 213 switch (index) { | 203 switch (index) { |
| 214 case kClassClass: return "Class"; | 204 case kClassClass: return "Class"; |
| 215 case kNullClass: return "Null"; | 205 case kNullClass: return "Null"; |
| 216 case kDynamicClass: return "Dynamic"; | 206 case kDynamicClass: return "Dynamic"; |
| 217 case kVoidClass: return "void"; | 207 case kVoidClass: return "void"; |
| 218 case kUnresolvedClassClass: return "UnresolvedClass"; | 208 case kUnresolvedClassClass: return "UnresolvedClass"; |
| 219 case kTypeClass: return "Type"; | 209 case kTypeClass: return "Type"; |
| 220 case kTypeParameterClass: return "TypeParameter"; | 210 case kTypeParameterClass: return "TypeParameter"; |
| 221 case kInstantiatedTypeClass: return "InstantiatedType"; | |
| 222 case kAbstractTypeArgumentsClass: return "AbstractTypeArguments"; | |
| 223 case kTypeArgumentsClass: return "TypeArguments"; | 211 case kTypeArgumentsClass: return "TypeArguments"; |
| 224 case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments"; | 212 case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments"; |
| 225 case kFunctionClass: return "Function"; | 213 case kFunctionClass: return "Function"; |
| 226 case kFieldClass: return "Field"; | 214 case kFieldClass: return "Field"; |
| 227 case kLiteralTokenClass: return "LiteralToken"; | 215 case kLiteralTokenClass: return "LiteralToken"; |
| 228 case kTokenStreamClass: return "TokenStream"; | 216 case kTokenStreamClass: return "TokenStream"; |
| 229 case kScriptClass: return "Script"; | 217 case kScriptClass: return "Script"; |
| 230 case kLibraryClass: return "Library"; | 218 case kLibraryClass: return "Library"; |
| 231 case kLibraryPrefixClass: return "LibraryPrefix"; | 219 case kLibraryPrefixClass: return "LibraryPrefix"; |
| 232 case kCodeClass: return "Code"; | 220 case kCodeClass: return "Code"; |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 cls = Class::New<Instance>(kVoidClassIndex); | 333 cls = Class::New<Instance>(kVoidClassIndex); |
| 346 cls.set_is_finalized(); | 334 cls.set_is_finalized(); |
| 347 void_class_ = cls.raw(); | 335 void_class_ = cls.raw(); |
| 348 | 336 |
| 349 cls = Class::New<Type>(); | 337 cls = Class::New<Type>(); |
| 350 type_class_ = cls.raw(); | 338 type_class_ = cls.raw(); |
| 351 | 339 |
| 352 cls = Class::New<TypeParameter>(); | 340 cls = Class::New<TypeParameter>(); |
| 353 type_parameter_class_ = cls.raw(); | 341 type_parameter_class_ = cls.raw(); |
| 354 | 342 |
| 355 cls = Class::New<InstantiatedType>(); | |
| 356 instantiated_type_class_ = cls.raw(); | |
| 357 | |
| 358 cls = Class::New<AbstractTypeArguments>(); | |
| 359 abstract_type_arguments_class_ = cls.raw(); | |
| 360 | |
| 361 cls = Class::New<TypeArguments>(); | 343 cls = Class::New<TypeArguments>(); |
| 362 type_arguments_class_ = cls.raw(); | 344 type_arguments_class_ = cls.raw(); |
| 363 | 345 |
| 364 cls = Class::New<InstantiatedTypeArguments>(); | 346 cls = Class::New<InstantiatedTypeArguments>(); |
| 365 instantiated_type_arguments_class_ = cls.raw(); | 347 instantiated_type_arguments_class_ = cls.raw(); |
| 366 | 348 |
| 367 cls = Class::New<Function>(); | 349 cls = Class::New<Function>(); |
| 368 function_class_ = cls.raw(); | 350 function_class_ = cls.raw(); |
| 369 | 351 |
| 370 cls = Class::New<Field>(); | 352 cls = Class::New<Field>(); |
| (...skipping 2064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2435 } | 2417 } |
| 2436 | 2418 |
| 2437 RawAbstractType* AbstractType::NewTypeParameter(const Class& clazz, | 2419 RawAbstractType* AbstractType::NewTypeParameter(const Class& clazz, |
| 2438 intptr_t index, | 2420 intptr_t index, |
| 2439 const String& name, | 2421 const String& name, |
| 2440 intptr_t token_index) { | 2422 intptr_t token_index) { |
| 2441 return TypeParameter::New(clazz, index, name, token_index); | 2423 return TypeParameter::New(clazz, index, name, token_index); |
| 2442 } | 2424 } |
| 2443 | 2425 |
| 2444 | 2426 |
| 2445 RawAbstractType* AbstractType::NewInstantiatedType( | |
| 2446 const AbstractType& uninstantiated_type, | |
| 2447 const AbstractTypeArguments& instantiator_type_arguments) { | |
| 2448 return InstantiatedType::New(uninstantiated_type, | |
| 2449 instantiator_type_arguments); | |
| 2450 } | |
| 2451 | |
| 2452 | |
| 2453 const char* AbstractType::ToCString() const { | 2427 const char* AbstractType::ToCString() const { |
| 2454 // AbstractType is an abstract class. | 2428 // AbstractType is an abstract class. |
| 2455 UNREACHABLE(); | 2429 UNREACHABLE(); |
| 2456 return "AbstractType"; | 2430 return "AbstractType"; |
| 2457 } | 2431 } |
| 2458 | 2432 |
| 2459 | 2433 |
| 2460 RawType* Type::NullType() { | 2434 RawType* Type::NullType() { |
| 2461 return Isolate::Current()->object_store()->null_type(); | 2435 return Isolate::Current()->object_store()->null_type(); |
| 2462 } | 2436 } |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2641 instantiated_type.set_is_finalized_instantiated(); | 2615 instantiated_type.set_is_finalized_instantiated(); |
| 2642 return instantiated_type.raw(); | 2616 return instantiated_type.raw(); |
| 2643 } | 2617 } |
| 2644 | 2618 |
| 2645 | 2619 |
| 2646 bool Type::Equals(const AbstractType& other) const { | 2620 bool Type::Equals(const AbstractType& other) const { |
| 2647 ASSERT(IsFinalized() && other.IsFinalized()); | 2621 ASSERT(IsFinalized() && other.IsFinalized()); |
| 2648 if (raw() == other.raw()) { | 2622 if (raw() == other.raw()) { |
| 2649 return true; | 2623 return true; |
| 2650 } | 2624 } |
| 2651 if (IsMalformed() || other.IsMalformed() || | 2625 if (IsMalformed() || !other.IsType() || other.IsMalformed()) { |
| 2652 (!other.IsType() && !other.IsInstantiatedType())) { | |
| 2653 return false; | 2626 return false; |
| 2654 } | 2627 } |
| 2655 if (type_class() != other.type_class()) { | 2628 if (type_class() != other.type_class()) { |
| 2656 return false; | 2629 return false; |
| 2657 } | 2630 } |
| 2658 return AbstractTypeArguments::AreEqual( | 2631 return AbstractTypeArguments::AreEqual( |
| 2659 AbstractTypeArguments::Handle(arguments()), | 2632 AbstractTypeArguments::Handle(arguments()), |
| 2660 AbstractTypeArguments::Handle(other.arguments())); | 2633 AbstractTypeArguments::Handle(other.arguments())); |
| 2661 } | 2634 } |
| 2662 | 2635 |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2929 const char* format = "TypeParameter: name %s; index: %d"; | 2902 const char* format = "TypeParameter: name %s; index: %d"; |
| 2930 const char* name_cstr = String::Handle(Name()).ToCString(); | 2903 const char* name_cstr = String::Handle(Name()).ToCString(); |
| 2931 intptr_t len = OS::SNPrint(NULL, 0, format, name_cstr, Index()) + 1; | 2904 intptr_t len = OS::SNPrint(NULL, 0, format, name_cstr, Index()) + 1; |
| 2932 char* chars = reinterpret_cast<char*>( | 2905 char* chars = reinterpret_cast<char*>( |
| 2933 Isolate::Current()->current_zone()->Allocate(len)); | 2906 Isolate::Current()->current_zone()->Allocate(len)); |
| 2934 OS::SNPrint(chars, len, format, name_cstr, Index()); | 2907 OS::SNPrint(chars, len, format, name_cstr, Index()); |
| 2935 return chars; | 2908 return chars; |
| 2936 } | 2909 } |
| 2937 | 2910 |
| 2938 | 2911 |
| 2939 RawClass* InstantiatedType::type_class() const { | |
| 2940 return AbstractType::Handle(uninstantiated_type()).type_class(); | |
| 2941 } | |
| 2942 | |
| 2943 | |
| 2944 RawAbstractTypeArguments* InstantiatedType::arguments() const { | |
| 2945 return InstantiatedTypeArguments::New( | |
| 2946 AbstractTypeArguments::Handle(AbstractType::Handle( | |
| 2947 uninstantiated_type()).arguments()), | |
| 2948 AbstractTypeArguments::Handle(instantiator_type_arguments())); | |
| 2949 } | |
| 2950 | |
| 2951 | |
| 2952 intptr_t InstantiatedType::token_index() const { | |
| 2953 return AbstractType::Handle(uninstantiated_type()).token_index(); | |
| 2954 } | |
| 2955 | |
| 2956 | |
| 2957 void InstantiatedType::set_uninstantiated_type( | |
| 2958 const AbstractType& value) const { | |
| 2959 StorePointer(&raw_ptr()->uninstantiated_type_, value.raw()); | |
| 2960 } | |
| 2961 | |
| 2962 | |
| 2963 void InstantiatedType::set_instantiator_type_arguments( | |
| 2964 const AbstractTypeArguments& value) const { | |
| 2965 StorePointer(&raw_ptr()->instantiator_type_arguments_, value.raw()); | |
| 2966 } | |
| 2967 | |
| 2968 | |
| 2969 RawInstantiatedType* InstantiatedType::New() { | |
| 2970 const Class& instantiated_type_class = | |
| 2971 Class::Handle(Object::instantiated_type_class()); | |
| 2972 RawObject* raw = Object::Allocate(instantiated_type_class, | |
| 2973 InstantiatedType::InstanceSize(), | |
| 2974 Heap::kOld); | |
| 2975 return reinterpret_cast<RawInstantiatedType*>(raw); | |
| 2976 } | |
| 2977 | |
| 2978 | |
| 2979 RawInstantiatedType* InstantiatedType::New( | |
| 2980 const AbstractType& uninstantiated_type, | |
| 2981 const AbstractTypeArguments& instantiator_type_arguments) { | |
| 2982 const InstantiatedType& result = | |
| 2983 InstantiatedType::Handle(InstantiatedType::New()); | |
| 2984 result.set_uninstantiated_type(uninstantiated_type); | |
| 2985 result.set_instantiator_type_arguments(instantiator_type_arguments); | |
| 2986 return result.raw(); | |
| 2987 } | |
| 2988 | |
| 2989 | |
| 2990 bool InstantiatedType::Equals(const AbstractType& other) const { | |
| 2991 ASSERT(IsFinalized() && other.IsFinalized()); | |
| 2992 if (raw() == other.raw()) { | |
| 2993 return true; | |
| 2994 } | |
| 2995 if (IsMalformed() || other.IsMalformed() || | |
| 2996 (!other.IsType() && !other.IsInstantiatedType())) { | |
| 2997 return false; | |
| 2998 } | |
| 2999 if (type_class() != other.type_class()) { | |
| 3000 return false; | |
| 3001 } | |
| 3002 return AbstractTypeArguments::AreEqual( | |
| 3003 AbstractTypeArguments::Handle(arguments()), | |
| 3004 AbstractTypeArguments::Handle(other.arguments())); | |
| 3005 } | |
| 3006 | |
| 3007 | |
| 3008 const char* InstantiatedType::ToCString() const { | |
| 3009 return "InstantiatedType"; | |
| 3010 } | |
| 3011 | |
| 3012 | |
| 3013 intptr_t AbstractTypeArguments::Length() const { | 2912 intptr_t AbstractTypeArguments::Length() const { |
| 3014 // AbstractTypeArguments is an abstract class. | 2913 // AbstractTypeArguments is an abstract class. |
| 3015 UNREACHABLE(); | 2914 UNREACHABLE(); |
| 3016 return -1; | 2915 return -1; |
| 3017 } | 2916 } |
| 3018 | 2917 |
| 3019 | 2918 |
| 3020 RawAbstractType* AbstractTypeArguments::TypeAt(intptr_t index) const { | 2919 RawAbstractType* AbstractTypeArguments::TypeAt(intptr_t index) const { |
| 3021 // AbstractTypeArguments is an abstract class. | 2920 // AbstractTypeArguments is an abstract class. |
| 3022 UNREACHABLE(); | 2921 UNREACHABLE(); |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3460 intptr_t InstantiatedTypeArguments::Length() const { | 3359 intptr_t InstantiatedTypeArguments::Length() const { |
| 3461 return AbstractTypeArguments::Handle( | 3360 return AbstractTypeArguments::Handle( |
| 3462 uninstantiated_type_arguments()).Length(); | 3361 uninstantiated_type_arguments()).Length(); |
| 3463 } | 3362 } |
| 3464 | 3363 |
| 3465 | 3364 |
| 3466 RawAbstractType* InstantiatedTypeArguments::TypeAt(intptr_t index) const { | 3365 RawAbstractType* InstantiatedTypeArguments::TypeAt(intptr_t index) const { |
| 3467 const AbstractType& type = AbstractType::Handle( | 3366 const AbstractType& type = AbstractType::Handle( |
| 3468 AbstractTypeArguments::Handle( | 3367 AbstractTypeArguments::Handle( |
| 3469 uninstantiated_type_arguments()).TypeAt(index)); | 3368 uninstantiated_type_arguments()).TypeAt(index)); |
| 3470 if (type.IsTypeParameter()) { | 3369 if (!type.IsInstantiated()) { |
| 3471 AbstractTypeArguments& instantiator = | 3370 const AbstractTypeArguments& instantiator_type_args = |
| 3472 AbstractTypeArguments::Handle(instantiator_type_arguments()); | 3371 AbstractTypeArguments::Handle(instantiator_type_arguments()); |
| 3473 if (instantiator.IsNull()) { | 3372 return type.InstantiateFrom(instantiator_type_args); |
| 3474 return Type::DynamicType(); | |
| 3475 } | |
| 3476 return instantiator.TypeAt(type.Index()); | |
| 3477 } | |
| 3478 if (!type.IsInstantiated()) { | |
| 3479 return InstantiatedType::New( | |
| 3480 type, AbstractTypeArguments::Handle(instantiator_type_arguments())); | |
| 3481 } | 3373 } |
| 3482 return type.raw(); | 3374 return type.raw(); |
| 3483 } | 3375 } |
| 3484 | 3376 |
| 3485 | 3377 |
| 3486 void InstantiatedTypeArguments::SetTypeAt(intptr_t index, | 3378 void InstantiatedTypeArguments::SetTypeAt(intptr_t index, |
| 3487 const AbstractType& value) const { | 3379 const AbstractType& value) const { |
| 3488 // We only replace individual argument types during resolution at compile | 3380 // We only replace individual argument types during resolution at compile |
| 3489 // time, when no type parameters are instantiated yet. | 3381 // time, when no type parameters are instantiated yet. |
| 3490 UNREACHABLE(); | 3382 UNREACHABLE(); |
| (...skipping 6501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9992 const String& str = String::Handle(pattern()); | 9884 const String& str = String::Handle(pattern()); |
| 9993 const char* format = "JSRegExp: pattern=%s flags=%s"; | 9885 const char* format = "JSRegExp: pattern=%s flags=%s"; |
| 9994 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 9886 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
| 9995 char* chars = reinterpret_cast<char*>( | 9887 char* chars = reinterpret_cast<char*>( |
| 9996 Isolate::Current()->current_zone()->Allocate(len + 1)); | 9888 Isolate::Current()->current_zone()->Allocate(len + 1)); |
| 9997 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 9889 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
| 9998 return chars; | 9890 return chars; |
| 9999 } | 9891 } |
| 10000 | 9892 |
| 10001 } // namespace dart | 9893 } // namespace dart |
| OLD | NEW |