diff options
Diffstat (limited to 'deps/v8/src/ast.cc')
-rw-r--r-- | deps/v8/src/ast.cc | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/deps/v8/src/ast.cc b/deps/v8/src/ast.cc index e8b065c4ea..d241355fc1 100644 --- a/deps/v8/src/ast.cc +++ b/deps/v8/src/ast.cc @@ -27,7 +27,7 @@ #include "ast.h" -#include <math.h> // For isfinite. +#include <cmath> // For isfinite. #include "builtins.h" #include "code-stubs.h" #include "conversions.h" @@ -70,6 +70,11 @@ bool Expression::IsNullLiteral() { } +bool Expression::IsUndefinedLiteral() { + return AsLiteral() != NULL && AsLiteral()->handle()->IsUndefined(); +} + + VariableProxy::VariableProxy(Isolate* isolate, Variable* var) : Expression(isolate), name_(var->name()), @@ -241,8 +246,8 @@ bool IsEqualNumber(void* first, void* second) { if (h2->IsSmi()) return false; Handle<HeapNumber> n1 = Handle<HeapNumber>::cast(h1); Handle<HeapNumber> n2 = Handle<HeapNumber>::cast(h2); - ASSERT(isfinite(n1->value())); - ASSERT(isfinite(n2->value())); + ASSERT(std::isfinite(n1->value())); + ASSERT(std::isfinite(n2->value())); return n1->value() == n2->value(); } @@ -352,7 +357,8 @@ static bool IsVoidOfLiteral(Expression* expr) { } -// Check for the pattern: void <literal> equals <expression> +// Check for the pattern: void <literal> equals <expression> or +// undefined equals <expression> static bool MatchLiteralCompareUndefined(Expression* left, Token::Value op, Expression* right, @@ -361,6 +367,10 @@ static bool MatchLiteralCompareUndefined(Expression* left, *expr = right; return true; } + if (left->IsUndefinedLiteral() && Token::IsEqualityOp(op)) { + *expr = right; + return true; + } return false; } |