Reviewers: Sven Panne, Dmitry Lomov (chromium),
Message:
PTAL
Description:
Add FINAL and OVERRIDE macros for C++11 final/override.
We also use new the constant naming scheme for Yield::Kind values to avoid
clash with the FINAL macro.
Please review this at https://codereview.chromium.org/23098004/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/arm/full-codegen-arm.cc
M src/ast.h
M src/globals.h
M src/ia32/full-codegen-ia32.cc
M src/mips/full-codegen-mips.cc
M src/parser.cc
M src/x64/full-codegen-x64.cc
Index: src/arm/full-codegen-arm.cc
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc
index
b73006a17d99136d69d5b8a782ae3134fdd20675..f62e8b0520e1961d3d2105164947c4024fffe83f
100644
--- a/src/arm/full-codegen-arm.cc
+++ b/src/arm/full-codegen-arm.cc
@@ -1986,12 +1986,12 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
VisitForStackValue(expr->expression());
switch (expr->yield_kind()) {
- case Yield::SUSPEND:
+ case Yield::kSuspend:
// Pop value from top-of-stack slot; box result into result register.
EmitCreateIteratorResult(false);
__ push(result_register());
// Fall through.
- case Yield::INITIAL: {
+ case Yield::kInitial: {
Label suspend, continuation, post_runtime, resume;
__ jmp(&suspend);
@@ -2023,7 +2023,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::FINAL: {
+ case Yield::kFinal: {
VisitForAccumulatorValue(expr->generator_object());
__ mov(r1,
Operand(Smi::FromInt(JSGeneratorObject::kGeneratorClosed)));
__ str(r1, FieldMemOperand(result_register(),
@@ -2035,7 +2035,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::DELEGATING: {
+ case Yield::kDelegating: {
VisitForStackValue(expr->generator_object());
// Initial stack layout is as follows:
Index: src/ast.h
diff --git a/src/ast.h b/src/ast.h
index
a8b74213adb663dce6c0fb3bad9ae8c45ea8a648..8557ac2f45229af70780a6bbce66b1b55a19b256
100644
--- a/src/ast.h
+++ b/src/ast.h
@@ -2144,10 +2144,10 @@ class Yield: public Expression {
DECLARE_NODE_TYPE(Yield)
enum Kind {
- INITIAL, // The initial yield that returns the unboxed generator
object.
- SUSPEND, // A normal yield: { value: EXPRESSION, done: false }
- DELEGATING, // A yield*.
- FINAL // A return: { value: EXPRESSION, done: true }
+ kInitial, // The initial yield that returns the unboxed generator
object
+ kSuspend, // A normal yield: { value: EXPRESSION, done: false }
+ kDelegating, // A yield*.
+ kFinal // A return: { value: EXPRESSION, done: true }
};
Expression* generator_object() const { return generator_object_; }
@@ -2159,11 +2159,11 @@ class Yield: public Expression {
// locates the catch handler in the handler table, and is equivalent to
// TryCatchStatement::index().
int index() const {
- ASSERT(yield_kind() == DELEGATING);
+ ASSERT(yield_kind() == kDelegating);
return index_;
}
void set_index(int index) {
- ASSERT(yield_kind() == DELEGATING);
+ ASSERT(yield_kind() == kDelegating);
index_ = index;
}
Index: src/globals.h
diff --git a/src/globals.h b/src/globals.h
index
26fd53114c62d582501e5d37c2c7791cb60cd99b..7848c50ce503492948b8e573726f441b4a435132
100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -375,6 +375,29 @@ F FUNCTION_CAST(Address addr) {
#endif
+// Annotate a virtual method indicating it must be overriding a virtual
+// method in the parent class.
+// Use like:
+// virtual void bar() OVERRIDE;
+#if __cplusplus >= 201103L
+#define OVERRIDE override
+#else
+#define OVERRIDE
+#endif
+
+
+// Annotate a virtual method indicating that subclasses must not override
it,
+// or annotate a class to indicate that it cannot be subclassed.
+// Use like:
+// class B FINAL : public A {};
+// virtual void bar() FINAL;
+#if __cplusplus >= 201103L
+#define FINAL final
+#else
+#define FINAL
+#endif
+
+
#if defined(__GNUC__) && __GNUC__ >= 4
#define MUST_USE_RESULT __attribute__ ((warn_unused_result))
#else
Index: src/ia32/full-codegen-ia32.cc
diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc
index
f08a269e85b576e46b7036fdbd6febc94732687b..ec8b2c9b319e2059440888d4f389c1158908e23d
100644
--- a/src/ia32/full-codegen-ia32.cc
+++ b/src/ia32/full-codegen-ia32.cc
@@ -1945,12 +1945,12 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
VisitForStackValue(expr->expression());
switch (expr->yield_kind()) {
- case Yield::SUSPEND:
+ case Yield::kSuspend:
// Pop value from top-of-stack slot; box result into result register.
EmitCreateIteratorResult(false);
__ push(result_register());
// Fall through.
- case Yield::INITIAL: {
+ case Yield::kInitial: {
Label suspend, continuation, post_runtime, resume;
__ jmp(&suspend);
@@ -1983,7 +1983,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::FINAL: {
+ case Yield::kFinal: {
VisitForAccumulatorValue(expr->generator_object());
__ mov(FieldOperand(result_register(),
JSGeneratorObject::kContinuationOffset),
@@ -1995,7 +1995,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::DELEGATING: {
+ case Yield::kDelegating: {
VisitForStackValue(expr->generator_object());
// Initial stack layout is as follows:
Index: src/mips/full-codegen-mips.cc
diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc
index
b60502c9a5bffa8bdb23daa3ea27fe425b5ab123..895af8f0ba51f1bb7b22e0ba86d230e79ae32972
100644
--- a/src/mips/full-codegen-mips.cc
+++ b/src/mips/full-codegen-mips.cc
@@ -1993,12 +1993,12 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
VisitForStackValue(expr->expression());
switch (expr->yield_kind()) {
- case Yield::SUSPEND:
+ case Yield::kSuspend:
// Pop value from top-of-stack slot; box result into result register.
EmitCreateIteratorResult(false);
__ push(result_register());
// Fall through.
- case Yield::INITIAL: {
+ case Yield::kInitial: {
Label suspend, continuation, post_runtime, resume;
__ jmp(&suspend);
@@ -2029,7 +2029,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::FINAL: {
+ case Yield::kFinal: {
VisitForAccumulatorValue(expr->generator_object());
__ li(a1,
Operand(Smi::FromInt(JSGeneratorObject::kGeneratorClosed)));
__ sw(a1, FieldMemOperand(result_register(),
@@ -2041,7 +2041,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::DELEGATING: {
+ case Yield::kDelegating: {
VisitForStackValue(expr->generator_object());
// Initial stack layout is as follows:
Index: src/parser.cc
diff --git a/src/parser.cc b/src/parser.cc
index
4947790395f3c431db7ef1ef68f30d47fccb8e5b..7be644352948fb7d5cde04f44cf8d218be9fdb9b
100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -2319,7 +2319,7 @@ Statement* Parser::ParseReturnStatement(bool* ok) {
Expression* generator = factory()->NewVariableProxy(
current_function_state_->generator_object_variable());
Expression* yield = factory()->NewYield(
- generator, return_value, Yield::FINAL, RelocInfo::kNoPosition);
+ generator, return_value, Yield::kFinal, RelocInfo::kNoPosition);
result = factory()->NewExpressionStatement(yield);
} else {
result = factory()->NewReturnStatement(return_value);
@@ -2997,13 +2997,13 @@ Expression* Parser::ParseYieldExpression(bool* ok) {
int position = scanner().peek_location().beg_pos;
Expect(Token::YIELD, CHECK_OK);
Yield::Kind kind =
- Check(Token::MUL) ? Yield::DELEGATING : Yield::SUSPEND;
+ Check(Token::MUL) ? Yield::kDelegating : Yield::kSuspend;
Expression* generator_object = factory()->NewVariableProxy(
current_function_state_->generator_object_variable());
Expression* expression = ParseAssignmentExpression(false, CHECK_OK);
Yield* yield =
factory()->NewYield(generator_object, expression, kind, position);
- if (kind == Yield::DELEGATING) {
+ if (kind == Yield::kDelegating) {
yield->set_index(current_function_state_->NextHandlerIndex());
}
return yield;
@@ -4484,7 +4484,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
VariableProxy* get_proxy = factory()->NewVariableProxy(
current_function_state_->generator_object_variable());
Yield* yield = factory()->NewYield(
- get_proxy, assignment, Yield::INITIAL, RelocInfo::kNoPosition);
+ get_proxy, assignment, Yield::kInitial,
RelocInfo::kNoPosition);
body->Add(factory()->NewExpressionStatement(yield), zone());
}
@@ -4496,7 +4496,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
Expression *undefined = factory()->NewLiteral(
isolate()->factory()->undefined_value());
Yield* yield = factory()->NewYield(
- get_proxy, undefined, Yield::FINAL, RelocInfo::kNoPosition);
+ get_proxy, undefined, Yield::kFinal, RelocInfo::kNoPosition);
body->Add(factory()->NewExpressionStatement(yield), zone());
}
Index: src/x64/full-codegen-x64.cc
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc
index
6333e87bea1b6c2ed82cd2b4ea153dd0cc917890..7c78adc3f77139a22336bb11ea98f7a18942eed4
100644
--- a/src/x64/full-codegen-x64.cc
+++ b/src/x64/full-codegen-x64.cc
@@ -1967,12 +1967,12 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
VisitForStackValue(expr->expression());
switch (expr->yield_kind()) {
- case Yield::SUSPEND:
+ case Yield::kSuspend:
// Pop value from top-of-stack slot; box result into result register.
EmitCreateIteratorResult(false);
__ push(result_register());
// Fall through.
- case Yield::INITIAL: {
+ case Yield::kInitial: {
Label suspend, continuation, post_runtime, resume;
__ jmp(&suspend);
@@ -2006,7 +2006,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::FINAL: {
+ case Yield::kFinal: {
VisitForAccumulatorValue(expr->generator_object());
__ Move(FieldOperand(result_register(),
JSGeneratorObject::kContinuationOffset),
@@ -2018,7 +2018,7 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
break;
}
- case Yield::DELEGATING: {
+ case Yield::kDelegating: {
VisitForStackValue(expr->generator_object());
// Initial stack layout is as follows:
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.