| Index: src/ast.h
|
| ===================================================================
|
| --- src/ast.h (revision 4055)
|
| +++ src/ast.h (working copy)
|
| @@ -237,27 +237,19 @@
|
| // side-effect free compiler.
|
| bool side_effect_free() { return SideEffectFreeField::decode(bitfields_); }
|
| void set_side_effect_free(bool is_side_effect_free) {
|
| - bitfields_ = (bitfields_ & ~SideEffectFreeField::mask()) |
|
| - SideEffectFreeField::encode(is_side_effect_free);
|
| + bitfields_ &= ~SideEffectFreeField::mask();
|
| + bitfields_ |= SideEffectFreeField::encode(is_side_effect_free);
|
| }
|
|
|
| - // The number of unary and binary operations contained in the expression
|
| - // rooted at this node. Valid only if side_effect_free() is true.
|
| - int expression_size() { return ExpressionSizeField::decode(bitfields_); }
|
| - void set_expression_size(int expression_size) {
|
| - bitfields_ = (bitfields_ & ~ExpressionSizeField::mask()) |
|
| - ExpressionSizeField::encode(Min(expression_size, ExpressionSizeMax));
|
| + // Will ToInt32 ECMA 262-3 9.5) or ToUunt32 (ECMA 262-3 9.6)
|
| + // be applied to the value of this expression?
|
| + // If so, we may be able to optimize the calculation of the value.
|
| + bool to_int32() { return ToInt32Field::decode(bitfields_); }
|
| + void set_to_int32(bool to_int32) {
|
| + bitfields_ &= ~ToInt32Field::mask();
|
| + bitfields_ |= ToInt32Field::encode(to_int32);
|
| }
|
|
|
| - // The number of expression stack slots needed to compute the expression
|
| - // rooted at this node. Does not count the slot needed by the value
|
| - // computed by this expression. Valid only if side_effect_free() is true.
|
| - int stack_height() { return StackHeightField::decode(bitfields_); }
|
| - void set_stack_height(int stack_height) {
|
| - bitfields_ &= ~StackHeightField::mask();
|
| - bitfields_ |=
|
| - StackHeightField::encode(Min(stack_height, StackHeightMax));
|
| - }
|
|
|
| private:
|
| uint32_t bitfields_;
|
| @@ -266,30 +258,9 @@
|
| DefinitionInfo* def_;
|
| ZoneList<DefinitionInfo*>* defined_vars_;
|
|
|
| - static const int SideEffectFreeFieldStart = 0;
|
| - static const int SideEffectFreeFieldLength = 1;
|
| - class SideEffectFreeField: public BitField<bool,
|
| - SideEffectFreeFieldStart,
|
| - SideEffectFreeFieldLength> {
|
| - };
|
| -
|
| - static const int ExpressionSizeFieldStart =
|
| - SideEffectFreeFieldStart + SideEffectFreeFieldLength;
|
| - static const int ExpressionSizeFieldLength = 5;
|
| - static const int ExpressionSizeMax = (1 << ExpressionSizeFieldLength) - 1;
|
| - class ExpressionSizeField: public BitField<int,
|
| - ExpressionSizeFieldStart,
|
| - ExpressionSizeFieldLength> {
|
| - };
|
| -
|
| - static const int StackHeightFieldStart =
|
| - ExpressionSizeFieldStart + ExpressionSizeFieldLength;
|
| - static const int StackHeightFieldLength = 5;
|
| - static const int StackHeightMax = (1 << StackHeightFieldLength) - 1;
|
| - class StackHeightField: public BitField<int,
|
| - StackHeightFieldStart,
|
| - StackHeightFieldLength> {
|
| - };
|
| + // Using template BitField<type, start, size>.
|
| + class SideEffectFreeField : public BitField<bool, 0, 1> {};
|
| + class ToInt32Field : public BitField<bool, 1, 1> {};
|
| };
|
|
|
|
|
|
|