| Index: src/ast/ast-value-factory.h
|
| diff --git a/src/ast/ast-value-factory.h b/src/ast/ast-value-factory.h
|
| index 6f9091bd167d09ae09848101377ef729280f6f73..8b28c5e4bc4976a2a26077bf5fbacac4ab4a2052 100644
|
| --- a/src/ast/ast-value-factory.h
|
| +++ b/src/ast/ast-value-factory.h
|
| @@ -159,10 +159,7 @@ class AstValue : public ZoneObject {
|
| return type_ == STRING;
|
| }
|
|
|
| - bool IsNumber() const {
|
| - return type_ == NUMBER || type_ == NUMBER_WITH_DOT || type_ == SMI ||
|
| - type_ == SMI_WITH_DOT;
|
| - }
|
| + bool IsNumber() const { return IsSmi() || IsHeapNumber(); }
|
|
|
| bool ContainsDot() const {
|
| return type_ == NUMBER_WITH_DOT || type_ == SMI_WITH_DOT;
|
| @@ -174,19 +171,30 @@ class AstValue : public ZoneObject {
|
| }
|
|
|
| double AsNumber() const {
|
| - if (type_ == NUMBER || type_ == NUMBER_WITH_DOT)
|
| - return number_;
|
| - if (type_ == SMI || type_ == SMI_WITH_DOT)
|
| - return smi_;
|
| + if (IsHeapNumber()) return number_;
|
| + if (IsSmi()) return smi_;
|
| UNREACHABLE();
|
| return 0;
|
| }
|
|
|
| Smi* AsSmi() const {
|
| - CHECK(type_ == SMI || type_ == SMI_WITH_DOT);
|
| + CHECK(IsSmi());
|
| return Smi::FromInt(smi_);
|
| }
|
|
|
| + bool ToUint32(uint32_t* value) const {
|
| + if (IsSmi()) {
|
| + int num = smi_;
|
| + if (num < 0) return false;
|
| + *value = static_cast<uint32_t>(num);
|
| + return true;
|
| + }
|
| + if (IsHeapNumber()) {
|
| + return DoubleToUint32IfEqualToSelf(number_, value);
|
| + }
|
| + return false;
|
| + }
|
| +
|
| bool EqualsString(const AstRawString* string) const {
|
| return type_ == STRING && string_ == string;
|
| }
|
| @@ -196,6 +204,9 @@ class AstValue : public ZoneObject {
|
| bool BooleanValue() const;
|
|
|
| bool IsSmi() const { return type_ == SMI || type_ == SMI_WITH_DOT; }
|
| + bool IsHeapNumber() const {
|
| + return type_ == NUMBER || type_ == NUMBER_WITH_DOT;
|
| + }
|
| bool IsFalse() const { return type_ == BOOLEAN && !bool_; }
|
| bool IsTrue() const { return type_ == BOOLEAN && bool_; }
|
| bool IsUndefined() const { return type_ == UNDEFINED; }
|
|
|