Chromium Code Reviews| Index: src/globals.h |
| diff --git a/src/globals.h b/src/globals.h |
| index c7e59198b10f805765991ec5320adce8b792eda0..3d71934a5ca2360b3af76008009fc8a3e76eb5d0 100644 |
| --- a/src/globals.h |
| +++ b/src/globals.h |
| @@ -963,11 +963,14 @@ enum FunctionKind { |
| kBaseConstructor = 1 << 5, |
| kGetterFunction = 1 << 6, |
| kSetterFunction = 1 << 7, |
| + kAsyncFunction = 1 << 8, |
| kAccessorFunction = kGetterFunction | kSetterFunction, |
| kDefaultBaseConstructor = kDefaultConstructor | kBaseConstructor, |
| kDefaultSubclassConstructor = kDefaultConstructor | kSubclassConstructor, |
| kClassConstructor = |
| kBaseConstructor | kSubclassConstructor | kDefaultConstructor, |
| + kAsyncArrowFunction = kArrowFunction | kAsyncFunction, |
| + kAsyncConciseMethod = kAsyncFunction | kConciseMethod |
| }; |
| inline bool IsValidFunctionKind(FunctionKind kind) { |
| @@ -982,7 +985,10 @@ inline bool IsValidFunctionKind(FunctionKind kind) { |
| kind == FunctionKind::kDefaultBaseConstructor || |
| kind == FunctionKind::kDefaultSubclassConstructor || |
| kind == FunctionKind::kBaseConstructor || |
| - kind == FunctionKind::kSubclassConstructor; |
| + kind == FunctionKind::kSubclassConstructor || |
| + kind == FunctionKind::kAsyncFunction || |
| + kind == FunctionKind::kAsyncArrowFunction || |
| + kind == FunctionKind::kAsyncConciseMethod; |
| } |
| @@ -997,6 +1003,10 @@ inline bool IsGeneratorFunction(FunctionKind kind) { |
| return kind & FunctionKind::kGeneratorFunction; |
| } |
| +inline bool IsAsyncFunction(FunctionKind kind) { |
| + DCHECK(IsValidFunctionKind(kind)); |
| + return kind & FunctionKind::kAsyncFunction; |
| +} |
| inline bool IsConciseMethod(FunctionKind kind) { |
| DCHECK(IsValidFunctionKind(kind)); |
| @@ -1059,6 +1069,49 @@ inline uint32_t ObjectHash(Address address) { |
| kPointerSizeLog2); |
| } |
| +enum class MethodKind { |
| + None = 0, |
| + Static = 1 << 0, |
| + Generator = 1 << 1, |
| + StaticGenerator = Static | Generator, |
| + Async = 1 << 2, |
| + StaticAsync = Static | Async, |
| +}; |
|
Dan Ehrenberg
2016/05/11 21:04:17
This seems to overlap a lot with ObjectLiteralProp
caitp (gmail)
2016/05/11 21:14:07
goal was to get rid of a boolean trap in CheckProp
|
| + |
| +inline bool IsValidMethodKind(MethodKind kind) { |
| + return kind == MethodKind::None || kind == MethodKind::Static || |
| + kind == MethodKind::Generator || kind == MethodKind::StaticGenerator || |
| + kind == MethodKind::Async || kind == MethodKind::StaticAsync; |
| +} |
| + |
| +static inline MethodKind operator|(MethodKind lhs, MethodKind rhs) { |
| + typedef unsigned char T; |
| + return static_cast<MethodKind>(static_cast<T>(lhs) | static_cast<T>(rhs)); |
| +} |
| + |
| +static inline MethodKind& operator|=(MethodKind& lhs, const MethodKind& rhs) { |
| + lhs = lhs | rhs; |
| + DCHECK(IsValidMethodKind(lhs)); |
| + return lhs; |
| +} |
| + |
| +static inline bool operator&(MethodKind bitfield, MethodKind mask) { |
| + typedef unsigned char T; |
| + return static_cast<T>(bitfield) & static_cast<T>(mask); |
| +} |
| + |
| +inline bool IsMethod(MethodKind kind) { return kind != MethodKind::None; } |
|
Dan Ehrenberg
2016/05/11 21:04:17
Huh? What about an ordinary non-static non-generat
caitp (gmail)
2016/05/11 21:14:07
good point, although it doesnt seem to actually ma
|
| + |
| +inline bool IsStaticMethod(MethodKind kind) { |
| + return kind & MethodKind::Static; |
| +} |
| + |
| +inline bool IsGeneratorMethod(MethodKind kind) { |
| + return kind & MethodKind::Generator; |
| +} |
| + |
| +inline bool IsAsyncMethod(MethodKind kind) { return kind & MethodKind::Async; } |
| + |
| } // namespace internal |
| } // namespace v8 |