Add void operator to fast compiler.
authorwhesse@chromium.org <whesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 30 Oct 2009 11:32:42 +0000 (11:32 +0000)
committerwhesse@chromium.org <whesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 30 Oct 2009 11:32:42 +0000 (11:32 +0000)
Review URL: http://codereview.chromium.org/342055

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3186 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/arm/fast-codegen-arm.cc
src/compiler.cc
src/fast-codegen.cc
src/ia32/fast-codegen-ia32.cc
src/x64/fast-codegen-x64.cc

index 3871d1b..ebf15aa 100644 (file)
@@ -723,6 +723,32 @@ void FastCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
 }
 
 
+void FastCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
+  Comment cmnt(masm_, "[ UnaryOperation");
+
+  switch (expr->op()) {
+    case Token::VOID:
+      Visit(expr->expression());
+      ASSERT_EQ(Expression::kEffect, expr->expression()->context());
+      switch (expr->context()) {
+        case Expression::kUninitialized:
+          UNREACHABLE();
+          break;
+        case Expression::kValue:
+          __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
+          __ push(ip);
+          break;
+        case Expression::kEffect:
+          break;
+      }
+      break;
+
+    default:
+      UNREACHABLE();
+  }
+}
+
+
 void FastCodeGenerator::VisitBinaryOperation(BinaryOperation* expr) {
   switch (expr->op()) {
     case Token::COMMA:
index d8168ec..38a41a2 100644 (file)
@@ -825,7 +825,13 @@ void CodeGenSelector::VisitCallRuntime(CallRuntime* expr) {
 
 
 void CodeGenSelector::VisitUnaryOperation(UnaryOperation* expr) {
-  BAILOUT("UnaryOperation");
+  switch (expr->op()) {
+    case Token::VOID:
+      ProcessExpression(expr->expression(), Expression::kEffect);
+      break;
+    default:
+      BAILOUT("UnaryOperation");
+  }
 }
 
 
index 551ffab..397fe34 100644 (file)
@@ -324,11 +324,6 @@ void FastCodeGenerator::VisitThrow(Throw* expr) {
 }
 
 
-void FastCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
-  UNREACHABLE();
-}
-
-
 void FastCodeGenerator::VisitCountOperation(CountOperation* expr) {
   UNREACHABLE();
 }
index 6a19ae3..01f8bd4 100644 (file)
@@ -729,6 +729,31 @@ void FastCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
 }
 
 
+void FastCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
+  Comment cmnt(masm_, "[ UnaryOperation");
+
+  switch (expr->op()) {
+    case Token::VOID:
+      Visit(expr->expression());
+      ASSERT_EQ(Expression::kEffect, expr->expression()->context());
+      switch (expr->context()) {
+        case Expression::kUninitialized:
+          UNREACHABLE();
+          break;
+        case Expression::kValue:
+          __ push(Immediate(Factory::undefined_value()));
+          break;
+        case Expression::kEffect:
+          break;
+      }
+      break;
+
+    default:
+      UNREACHABLE();
+  }
+}
+
+
 void FastCodeGenerator::VisitBinaryOperation(BinaryOperation* expr) {
   switch (expr->op()) {
     case Token::COMMA:
index 4bbb42d..5ea11fc 100644 (file)
@@ -741,6 +741,31 @@ void FastCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
 }
 
 
+void FastCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
+  Comment cmnt(masm_, "[ UnaryOperation");
+
+  switch (expr->op()) {
+    case Token::VOID:
+      Visit(expr->expression());
+      ASSERT_EQ(Expression::kEffect, expr->expression()->context());
+      switch (expr->context()) {
+        case Expression::kUninitialized:
+          UNREACHABLE();
+          break;
+        case Expression::kValue:
+          __ PushRoot(Heap::kUndefinedValueRootIndex);
+          break;
+        case Expression::kEffect:
+          break;
+      }
+      break;
+
+    default:
+      UNREACHABLE();
+  }
+}
+
+
 void FastCodeGenerator::VisitBinaryOperation(BinaryOperation* expr) {
   switch (expr->op()) {
     case Token::COMMA: