| Index: runtime/vm/object.h
|
| ===================================================================
|
| --- runtime/vm/object.h (revision 43515)
|
| +++ runtime/vm/object.h (working copy)
|
| @@ -2152,6 +2152,28 @@
|
| return modifier() == RawFunction::kAsync;
|
| }
|
|
|
| + bool IsAsyncClosure() const {
|
| + return is_generated_body() &&
|
| + Function::Handle(parent_function()).IsAsyncFunction();
|
| + }
|
| +
|
| + bool IsGenerator() const {
|
| + return (modifier() & RawFunction::kGeneratorBit) != 0;
|
| + }
|
| +
|
| + bool IsSyncGenerator() const {
|
| + return modifier() == RawFunction::kSyncGen;
|
| + }
|
| +
|
| + bool IsSyncGenClosure() const {
|
| + return is_generated_body() &&
|
| + Function::Handle(parent_function()).IsSyncGenerator();
|
| + }
|
| +
|
| + bool IsAsyncOrGenerator() const {
|
| + return modifier() != RawFunction::kNoModifier;
|
| + }
|
| +
|
| static intptr_t InstanceSize() {
|
| return RoundedAllocationSize(sizeof(RawFunction));
|
| }
|
| @@ -2239,7 +2261,7 @@
|
| V(External, is_external) \
|
| V(AllowsHoistingCheckClass, allows_hoisting_check_class) \
|
| V(AllowsBoundsCheckGeneralization, allows_bounds_check_generalization) \
|
| - V(AsyncClosure, is_async_closure) \
|
| + V(GeneratedBody, is_generated_body) \
|
| V(AlwaysInline, always_inline) \
|
| V(PolymorphicTarget, is_polymorphic_target) \
|
|
|
| @@ -2262,6 +2284,8 @@
|
| kRecognizedTagPos = kKindTagPos + kKindTagSize,
|
| kRecognizedTagSize = 8,
|
| kModifierPos = kRecognizedTagPos + kRecognizedTagSize,
|
| + kModifierSize = 2,
|
| + kLastModifierBitPos = kModifierPos + (kModifierSize - 1),
|
| // Single bit sized fields start here.
|
| #define DECLARE_BIT(name, _) k##name##Bit,
|
| FOR_EACH_FUNCTION_KIND_BIT(DECLARE_BIT)
|
| @@ -2277,11 +2301,14 @@
|
|
|
| class KindBits :
|
| public BitField<RawFunction::Kind, kKindTagPos, kKindTagSize> {}; // NOLINT
|
| +
|
| class RecognizedBits : public BitField<MethodRecognizer::Kind,
|
| kRecognizedTagPos,
|
| kRecognizedTagSize> {};
|
| class ModifierBits :
|
| - public BitField<RawFunction::AsyncModifier, kModifierPos, 1> {}; // NOLINT
|
| + public BitField<RawFunction::AsyncModifier,
|
| + kModifierPos,
|
| + kModifierSize> {}; // NOLINT
|
|
|
| #define DEFINE_BIT(name, _) \
|
| class name##Bit : public BitField<bool, k##name##Bit, 1> {};
|
|
|