OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1957 KeyedAccessStoreMode store_mode_ : 5; // Windows treats as signed, | 1957 KeyedAccessStoreMode store_mode_ : 5; // Windows treats as signed, |
1958 // must have extra bit. | 1958 // must have extra bit. |
1959 SmallMapList receiver_types_; | 1959 SmallMapList receiver_types_; |
1960 }; | 1960 }; |
1961 | 1961 |
1962 | 1962 |
1963 class Yield: public Expression { | 1963 class Yield: public Expression { |
1964 public: | 1964 public: |
1965 DECLARE_NODE_TYPE(Yield) | 1965 DECLARE_NODE_TYPE(Yield) |
1966 | 1966 |
1967 enum Kind { | |
1968 // The initial yield that returns the unboxed generator object. | |
1969 INITIAL, | |
Michael Starzinger
2013/04/17 13:43:48
nit: Can we compact this enum a bit (e.g. by movin
| |
1970 | |
1971 // A normal yield: { value: VALUE, done: false } | |
1972 SUSPEND, | |
1973 | |
1974 // A yield*. | |
1975 DELEGATING, | |
1976 | |
1977 // A return: { value: VALUE, done: true } | |
1978 FINAL | |
1979 }; | |
1980 | |
1967 Expression* generator_object() const { return generator_object_; } | 1981 Expression* generator_object() const { return generator_object_; } |
1968 Expression* expression() const { return expression_; } | 1982 Expression* expression() const { return expression_; } |
1969 bool is_delegating_yield() const { return is_delegating_yield_; } | 1983 Kind kind() const { return kind_; } |
Michael Starzinger
2013/04/17 13:43:48
nit: There are so many "kinds" in V8 already, can
| |
1970 virtual int position() const { return pos_; } | 1984 virtual int position() const { return pos_; } |
1971 | 1985 |
1972 protected: | 1986 protected: |
1973 Yield(Isolate* isolate, | 1987 Yield(Isolate* isolate, |
1974 Expression* generator_object, | 1988 Expression* generator_object, |
1975 Expression* expression, | 1989 Expression* expression, |
1976 bool is_delegating_yield, | 1990 Kind kind, |
1977 int pos) | 1991 int pos) |
1978 : Expression(isolate), | 1992 : Expression(isolate), |
1979 generator_object_(generator_object), | 1993 generator_object_(generator_object), |
1980 expression_(expression), | 1994 expression_(expression), |
1981 is_delegating_yield_(is_delegating_yield), | 1995 kind_(kind), |
1982 pos_(pos) { } | 1996 pos_(pos) { } |
1983 | 1997 |
1984 private: | 1998 private: |
1985 Expression* generator_object_; | 1999 Expression* generator_object_; |
1986 Expression* expression_; | 2000 Expression* expression_; |
1987 bool is_delegating_yield_; | 2001 Kind kind_; |
1988 int pos_; | 2002 int pos_; |
1989 }; | 2003 }; |
1990 | 2004 |
1991 | 2005 |
1992 class Throw: public Expression { | 2006 class Throw: public Expression { |
1993 public: | 2007 public: |
1994 DECLARE_NODE_TYPE(Throw) | 2008 DECLARE_NODE_TYPE(Throw) |
1995 | 2009 |
1996 Expression* exception() const { return exception_; } | 2010 Expression* exception() const { return exception_; } |
1997 virtual int position() const { return pos_; } | 2011 virtual int position() const { return pos_; } |
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2959 Expression* value, | 2973 Expression* value, |
2960 int pos) { | 2974 int pos) { |
2961 Assignment* assign = | 2975 Assignment* assign = |
2962 new(zone_) Assignment(isolate_, op, target, value, pos); | 2976 new(zone_) Assignment(isolate_, op, target, value, pos); |
2963 assign->Init(isolate_, this); | 2977 assign->Init(isolate_, this); |
2964 VISIT_AND_RETURN(Assignment, assign) | 2978 VISIT_AND_RETURN(Assignment, assign) |
2965 } | 2979 } |
2966 | 2980 |
2967 Yield* NewYield(Expression *generator_object, | 2981 Yield* NewYield(Expression *generator_object, |
2968 Expression* expression, | 2982 Expression* expression, |
2969 bool is_delegating_yield, | 2983 Yield::Kind kind, |
2970 int pos) { | 2984 int pos) { |
2971 Yield* yield = new(zone_) Yield( | 2985 Yield* yield = new(zone_) Yield( |
2972 isolate_, generator_object, expression, is_delegating_yield, pos); | 2986 isolate_, generator_object, expression, kind, pos); |
2973 VISIT_AND_RETURN(Yield, yield) | 2987 VISIT_AND_RETURN(Yield, yield) |
2974 } | 2988 } |
2975 | 2989 |
2976 Throw* NewThrow(Expression* exception, int pos) { | 2990 Throw* NewThrow(Expression* exception, int pos) { |
2977 Throw* t = new(zone_) Throw(isolate_, exception, pos); | 2991 Throw* t = new(zone_) Throw(isolate_, exception, pos); |
2978 VISIT_AND_RETURN(Throw, t) | 2992 VISIT_AND_RETURN(Throw, t) |
2979 } | 2993 } |
2980 | 2994 |
2981 FunctionLiteral* NewFunctionLiteral( | 2995 FunctionLiteral* NewFunctionLiteral( |
2982 Handle<String> name, | 2996 Handle<String> name, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3023 private: | 3037 private: |
3024 Isolate* isolate_; | 3038 Isolate* isolate_; |
3025 Zone* zone_; | 3039 Zone* zone_; |
3026 Visitor visitor_; | 3040 Visitor visitor_; |
3027 }; | 3041 }; |
3028 | 3042 |
3029 | 3043 |
3030 } } // namespace v8::internal | 3044 } } // namespace v8::internal |
3031 | 3045 |
3032 #endif // V8_AST_H_ | 3046 #endif // V8_AST_H_ |
OLD | NEW |