Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Unified Diff: src/ast.h

Issue 561913002: Class syntax parsing (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add early error checks for static prototype and get/set constructor Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/ast.cc » ('j') | src/preparser.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast.h
diff --git a/src/ast.h b/src/ast.h
index c5a924c43d914f10246f7b8513a0cb0417dfae01..db4a173848dccaaf73499677138d0c3d3ba7e297 100644
--- a/src/ast.h
+++ b/src/ast.h
@@ -40,12 +40,13 @@ 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(ClassDeclaration) \
+ V(ModuleDeclaration) \
+ V(ImportDeclaration) \
+ V(ExportDeclaration)
#define MODULE_NODE_LIST(V) \
V(ModuleLiteral) \
@@ -73,28 +74,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) \
@@ -560,6 +562,27 @@ class FunctionDeclaration FINAL : public Declaration {
};
+class ClassDeclaration FINAL : public Declaration {
+ public:
+ DECLARE_NODE_TYPE(ClassDeclaration)
+
+ ClassLiteral* classLiteral() const { return classLiteral_; }
+ virtual InitializationFlag initialization() const OVERRIDE {
+ return kCreatedInitialized;
+ }
+
+ protected:
+ ClassDeclaration(Zone* zone, VariableProxy* proxy, ClassLiteral* classLiteral,
+ Scope* scope, int pos)
+ : Declaration(zone, proxy, LET, scope, pos), classLiteral_(classLiteral) {
+ DCHECK(classLiteral != NULL);
+ }
+
+ private:
+ ClassLiteral* classLiteral_;
+};
+
+
class ModuleDeclaration FINAL : public Declaration {
public:
DECLARE_NODE_TYPE(ModuleDeclaration)
@@ -1459,7 +1482,8 @@ class ObjectLiteralProperty FINAL : public ZoneObject {
};
ObjectLiteralProperty(Zone* zone, AstValueFactory* ast_value_factory,
- Literal* key, Expression* value);
+ Literal* key, Expression* value,
+ bool is_static = false);
Literal* key() { return key_; }
Expression* value() { return value_; }
@@ -1478,7 +1502,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 = false);
void set_key(Literal* key) { key_ = key; }
private:
@@ -1487,6 +1512,7 @@ class ObjectLiteralProperty FINAL : public ZoneObject {
Kind kind_;
bool emit_store_;
Handle<Map> receiver_type_;
+ bool is_static_;
};
@@ -2498,6 +2524,37 @@ 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_; }
+ ZoneList<Property*>* properties() const { return properties_; }
+
+ protected:
+ ClassLiteral(Zone* zone, const AstRawString* name, Expression* extends,
+ 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),
+ properties_(properties) {}
+
+ private:
+ const AstRawString* raw_name_;
+ Handle<String> name_;
+ const AstString* raw_inferred_name_;
+ Handle<String> inferred_name_;
+ Expression* extends_;
+ ZoneList<Property*>* properties_;
+};
+
+
class NativeFunctionLiteral FINAL : public Expression {
public:
DECLARE_NODE_TYPE(NativeFunctionLiteral)
@@ -3052,6 +3109,13 @@ class AstNodeFactory FINAL BASE_EMBEDDED {
VISIT_AND_RETURN(FunctionDeclaration, decl)
}
+ ClassDeclaration* NewClassDeclaration(VariableProxy* proxy, ClassLiteral* lit,
+ Scope* scope, int pos) {
+ ClassDeclaration* decl =
+ new (zone_) ClassDeclaration(zone_, proxy, lit, scope, pos);
+ VISIT_AND_RETURN(ClassDeclaration, decl)
+ }
+
ModuleDeclaration* NewModuleDeclaration(VariableProxy* proxy,
Module* module,
Scope* scope,
@@ -3289,16 +3353,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.
}
@@ -3454,6 +3519,15 @@ class AstNodeFactory FINAL BASE_EMBEDDED {
return lit;
}
+ ClassLiteral* NewClassLiteral(const AstRawString* name, Expression* extends,
+ ZoneList<ObjectLiteral::Property*>* properties,
+ AstValueFactory* ast_value_factory,
+ int position) {
+ ClassLiteral* lit = new (zone_) ClassLiteral(
+ zone_, name, extends, properties, ast_value_factory, position, id_gen_);
+ VISIT_AND_RETURN(ClassLiteral, lit)
+ }
+
NativeFunctionLiteral* NewNativeFunctionLiteral(const AstRawString* name,
v8::Extension* extension,
int pos) {
« no previous file with comments | « no previous file | src/ast.cc » ('j') | src/preparser.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698