Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Unified Diff: src/interpreter/bytecode-pipeline.h

Issue 2048203002: [interpreter] Minor clean-up of BytecodeSourceInfo. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@oth-0066-suppress
Patch Set: Rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/interpreter/bytecode-peephole-optimizer.cc ('k') | src/interpreter/bytecode-pipeline.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/interpreter/bytecode-pipeline.h
diff --git a/src/interpreter/bytecode-pipeline.h b/src/interpreter/bytecode-pipeline.h
index 3ac1a9e979fbcfec36f384d72546fdf81faaa7b0..e2beff2c8e3ca94e19172c033248e8e0e6743ee4 100644
--- a/src/interpreter/bytecode-pipeline.h
+++ b/src/interpreter/bytecode-pipeline.h
@@ -54,36 +54,86 @@ class BytecodeSourceInfo final {
public:
static const int kUninitializedPosition = -1;
- BytecodeSourceInfo(int position = kUninitializedPosition,
- bool is_statement = false)
- : source_position_(position), is_statement_(is_statement) {}
+ BytecodeSourceInfo()
+ : position_type_(PositionType::kNone),
+ source_position_(kUninitializedPosition) {}
+
+ BytecodeSourceInfo(int source_position, bool is_statement)
+ : position_type_(is_statement ? PositionType::kStatement
+ : PositionType::kExpression),
+ source_position_(source_position) {
+ DCHECK_GE(source_position, 0);
+ }
+
+ // Makes instance into a statement position.
+ void MakeStatementPosition(int source_position) {
+ // Statement positions can be replaced by other statement
+ // positions. For example , "for (x = 0; x < 3; ++x) 7;" has a
+ // statement position associated with 7 but no bytecode associated
+ // with it. Then Next is emitted after the body and has
+ // statement position and overrides the existing one.
+ position_type_ = PositionType::kStatement;
+ source_position_ = source_position;
+ }
+
+ // Makes instance into an expression position. Instance should not
+ // be a statement position otherwise it could be lost and impair the
+ // debugging experience.
+ void MakeExpressionPosition(int source_position) {
+ DCHECK(!is_statement());
+ position_type_ = PositionType::kExpression;
+ source_position_ = source_position;
+ }
+
+ // Forces an instance into an expression position.
+ void ForceExpressionPosition(int source_position) {
+ position_type_ = PositionType::kExpression;
+ source_position_ = source_position;
+ }
- // Combine later source info with current.
- void Update(const BytecodeSourceInfo& entry);
+ // Clones a source position. The current instance is expected to be
+ // invalid.
+ void Clone(const BytecodeSourceInfo& other) {
+ DCHECK(!is_valid());
+ position_type_ = other.position_type_;
+ source_position_ = other.source_position_;
+ }
int source_position() const {
DCHECK(is_valid());
return source_position_;
}
- bool is_statement() const { return is_valid() && is_statement_; }
- bool is_expression() const { return is_valid() && !is_statement_; }
+ bool is_statement() const {
+ return position_type_ == PositionType::kStatement;
+ }
+ bool is_expression() const {
+ return position_type_ == PositionType::kExpression;
+ }
- bool is_valid() const { return source_position_ != kUninitializedPosition; }
- void set_invalid() { source_position_ = kUninitializedPosition; }
+ bool is_valid() const { return position_type_ != PositionType::kNone; }
+ void set_invalid() {
+ position_type_ = PositionType::kNone;
+ source_position_ = kUninitializedPosition;
+ }
bool operator==(const BytecodeSourceInfo& other) const {
- return source_position_ == other.source_position_ &&
- is_statement_ == other.is_statement_;
+ return position_type_ == other.position_type_ &&
+ source_position_ == other.source_position_;
}
+
bool operator!=(const BytecodeSourceInfo& other) const {
- return source_position_ != other.source_position_ ||
- is_statement_ != other.is_statement_;
+ return position_type_ != other.position_type_ ||
+ source_position_ != other.source_position_;
}
private:
+ enum class PositionType : uint8_t { kNone, kExpression, kStatement };
+
+ PositionType position_type_;
int source_position_;
- bool is_statement_;
+
+ DISALLOW_COPY_AND_ASSIGN(BytecodeSourceInfo);
};
// A container for a generated bytecode, it's operands, and source information.
« no previous file with comments | « src/interpreter/bytecode-peephole-optimizer.cc ('k') | src/interpreter/bytecode-pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698