blob: 561f9880de5b5d90d465d7d0a3777595bcb1694b [file] [log] [blame] [edit]
// Copyright 2022 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_NUMBERS_INTEGER_LITERAL_INL_H_
#define V8_NUMBERS_INTEGER_LITERAL_INL_H_
#include "src/numbers/integer-literal.h"
namespace v8 {
namespace internal {
inline std::string IntegerLiteral::ToString() const {
if (negative_) return std::string("-") + std::to_string(absolute_value_);
return std::to_string(absolute_value_);
}
inline IntegerLiteral operator<<(const IntegerLiteral& x,
const IntegerLiteral& y) {
DCHECK(!y.is_negative());
DCHECK_LT(y.absolute_value(), sizeof(uint64_t) * kBitsPerByte);
return IntegerLiteral(x.is_negative(), x.absolute_value()
<< y.absolute_value());
}
inline IntegerLiteral operator+(const IntegerLiteral& x,
const IntegerLiteral& y) {
if (x.is_negative() == y.is_negative()) {
DCHECK_GE(x.absolute_value() + y.absolute_value(), x.absolute_value());
return IntegerLiteral(x.is_negative(),
x.absolute_value() + y.absolute_value());
}
if (x.absolute_value() >= y.absolute_value()) {
return IntegerLiteral(x.is_negative(),
x.absolute_value() - y.absolute_value());
}
return IntegerLiteral(!x.is_negative(),
y.absolute_value() - x.absolute_value());
}
} // namespace internal
} // namespace v8
#endif // V8_NUMBERS_INTEGER_LITERAL_INL_H_