Index: src/ast.h |
diff --git a/src/ast.h b/src/ast.h |
index 2e3b360f7896ad2084df4b6cd86747f86a2314e1..394e7f974a0742c2ea81e71377b693e38da2463f 100644 |
--- a/src/ast.h |
+++ b/src/ast.h |
@@ -40,12 +40,12 @@ namespace internal { |
// Nodes of the abstract syntax tree. Only concrete classes are |
// enumerated here. |
-#define DECLARATION_NODE_LIST(V) \ |
- V(VariableDeclaration) \ |
- V(FunctionDeclaration) \ |
- V(ModuleDeclaration) \ |
- V(ImportDeclaration) \ |
- V(ExportDeclaration) \ |
+#define DECLARATION_NODE_LIST(V) \ |
+ V(VariableDeclaration) \ |
+ V(FunctionDeclaration) \ |
+ V(ModuleDeclaration) \ |
+ V(ImportDeclaration) \ |
+ V(ExportDeclaration) |
#define MODULE_NODE_LIST(V) \ |
V(ModuleLiteral) \ |
@@ -73,28 +73,29 @@ namespace internal { |
V(TryFinallyStatement) \ |
V(DebuggerStatement) |
-#define EXPRESSION_NODE_LIST(V) \ |
- V(FunctionLiteral) \ |
- V(NativeFunctionLiteral) \ |
- V(Conditional) \ |
- V(VariableProxy) \ |
- V(Literal) \ |
- V(RegExpLiteral) \ |
- V(ObjectLiteral) \ |
- V(ArrayLiteral) \ |
- V(Assignment) \ |
- V(Yield) \ |
- V(Throw) \ |
- V(Property) \ |
- V(Call) \ |
- V(CallNew) \ |
- V(CallRuntime) \ |
- V(UnaryOperation) \ |
- V(CountOperation) \ |
- V(BinaryOperation) \ |
- V(CompareOperation) \ |
- V(ThisFunction) \ |
- V(SuperReference) \ |
+#define EXPRESSION_NODE_LIST(V) \ |
+ V(FunctionLiteral) \ |
+ V(ClassLiteral) \ |
+ V(NativeFunctionLiteral) \ |
+ V(Conditional) \ |
+ V(VariableProxy) \ |
+ V(Literal) \ |
+ V(RegExpLiteral) \ |
+ V(ObjectLiteral) \ |
+ V(ArrayLiteral) \ |
+ V(Assignment) \ |
+ V(Yield) \ |
+ V(Throw) \ |
+ V(Property) \ |
+ V(Call) \ |
+ V(CallNew) \ |
+ V(CallRuntime) \ |
+ V(UnaryOperation) \ |
+ V(CountOperation) \ |
+ V(BinaryOperation) \ |
+ V(CompareOperation) \ |
+ V(ThisFunction) \ |
+ V(SuperReference) \ |
V(CaseClause) |
#define AST_NODE_LIST(V) \ |
@@ -1459,7 +1460,7 @@ class ObjectLiteralProperty FINAL : public ZoneObject { |
}; |
ObjectLiteralProperty(Zone* zone, AstValueFactory* ast_value_factory, |
- Literal* key, Expression* value); |
+ Literal* key, Expression* value, bool is_static); |
Literal* key() { return key_; } |
Expression* value() { return value_; } |
@@ -1478,7 +1479,8 @@ class ObjectLiteralProperty FINAL : public ZoneObject { |
protected: |
template<class> friend class AstNodeFactory; |
- ObjectLiteralProperty(Zone* zone, bool is_getter, FunctionLiteral* value); |
+ ObjectLiteralProperty(Zone* zone, bool is_getter, FunctionLiteral* value, |
+ bool is_static); |
void set_key(Literal* key) { key_ = key; } |
private: |
@@ -1486,6 +1488,7 @@ class ObjectLiteralProperty FINAL : public ZoneObject { |
Expression* value_; |
Kind kind_; |
bool emit_store_; |
+ bool is_static_; |
Handle<Map> receiver_type_; |
}; |
@@ -2498,6 +2501,40 @@ class FunctionLiteral FINAL : public Expression { |
}; |
+class ClassLiteral FINAL : public Expression { |
+ public: |
+ typedef ObjectLiteralProperty Property; |
+ |
+ DECLARE_NODE_TYPE(ClassLiteral) |
+ |
+ Handle<String> name() const { return raw_name_->string(); } |
+ const AstRawString* raw_name() const { return raw_name_; } |
+ Expression* extends() const { return extends_; } |
+ FunctionLiteral* constructor() const { return constructor_; } |
+ ZoneList<Property*>* properties() const { return properties_; } |
+ |
+ protected: |
+ ClassLiteral(Zone* zone, const AstRawString* name, Expression* extends, |
+ FunctionLiteral* constructor, ZoneList<Property*>* properties, |
+ AstValueFactory* ast_value_factory, int position, IdGen* id_gen) |
+ : Expression(zone, position, id_gen), |
+ raw_name_(name), |
+ raw_inferred_name_(ast_value_factory->empty_string()), |
+ extends_(extends), |
+ constructor_(constructor), |
+ properties_(properties) {} |
+ |
+ private: |
+ const AstRawString* raw_name_; |
+ Handle<String> name_; |
+ const AstString* raw_inferred_name_; |
+ Handle<String> inferred_name_; |
+ Expression* extends_; |
+ FunctionLiteral* constructor_; |
+ ZoneList<Property*>* properties_; |
+}; |
+ |
+ |
class NativeFunctionLiteral FINAL : public Expression { |
public: |
DECLARE_NODE_TYPE(NativeFunctionLiteral) |
@@ -3300,16 +3337,17 @@ class AstNodeFactory FINAL BASE_EMBEDDED { |
} |
ObjectLiteral::Property* NewObjectLiteralProperty(Literal* key, |
- Expression* value) { |
- return new (zone_) |
- ObjectLiteral::Property(zone_, ast_value_factory_, key, value); |
+ Expression* value, |
+ bool is_static) { |
+ return new (zone_) ObjectLiteral::Property(zone_, ast_value_factory_, key, |
+ value, is_static); |
} |
ObjectLiteral::Property* NewObjectLiteralProperty(bool is_getter, |
FunctionLiteral* value, |
- int pos) { |
+ int pos, bool is_static) { |
ObjectLiteral::Property* prop = |
- new(zone_) ObjectLiteral::Property(zone_, is_getter, value); |
+ new (zone_) ObjectLiteral::Property(zone_, is_getter, value, is_static); |
prop->set_key(NewStringLiteral(value->raw_name(), pos)); |
return prop; // Not an AST node, will not be visited. |
} |
@@ -3465,6 +3503,17 @@ class AstNodeFactory FINAL BASE_EMBEDDED { |
return lit; |
} |
+ ClassLiteral* NewClassLiteral(const AstRawString* name, Expression* extends, |
+ FunctionLiteral* constructor, |
+ ZoneList<ObjectLiteral::Property*>* properties, |
+ AstValueFactory* ast_value_factory, |
+ int position) { |
+ ClassLiteral* lit = |
+ new (zone_) ClassLiteral(zone_, name, extends, constructor, properties, |
+ ast_value_factory, position, id_gen_); |
+ VISIT_AND_RETURN(ClassLiteral, lit) |
+ } |
+ |
NativeFunctionLiteral* NewNativeFunctionLiteral(const AstRawString* name, |
v8::Extension* extension, |
int pos) { |