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

Unified Diff: src/ast.h

Issue 17468003: Use AST's type field and merge types for unary, binary & compare ICs (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Comments Created 7 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/arm/lithium-codegen-arm.cc ('k') | src/ast.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast.h
diff --git a/src/ast.h b/src/ast.h
index b07456b8f789ed9f03d6aa8b82a2409bf0fe004b..568725d33f835c62e7e8fc6a19640f92418f0b4e 100644
--- a/src/ast.h
+++ b/src/ast.h
@@ -356,9 +356,11 @@ class Expression: public AstNode {
// True iff the expression is the undefined literal.
bool IsUndefinedLiteral();
- // Expression type
- Handle<Type> type() { return type_; }
- void set_type(Handle<Type> type) { type_ = type; }
+ // Expression type bounds
+ Handle<Type> upper_type() { return upper_type_; }
+ Handle<Type> lower_type() { return lower_type_; }
+ void set_upper_type(Handle<Type> type) { upper_type_ = type; }
+ void set_lower_type(Handle<Type> type) { lower_type_ = type; }
// Type feedback information for assignments and properties.
virtual bool IsMonomorphic() {
@@ -389,12 +391,14 @@ class Expression: public AstNode {
protected:
explicit Expression(Isolate* isolate)
- : type_(Type::None(), isolate),
+ : upper_type_(Type::Any(), isolate),
+ lower_type_(Type::None(), isolate),
id_(GetNextId(isolate)),
test_id_(GetNextId(isolate)) {}
private:
- Handle<Type> type_;
+ Handle<Type> upper_type_;
+ Handle<Type> lower_type_;
byte to_boolean_types_;
const BailoutId id_;
@@ -1836,8 +1840,6 @@ class UnaryOperation: public Expression {
BailoutId MaterializeFalseId() { return materialize_false_id_; }
TypeFeedbackId UnaryOperationFeedbackId() const { return reuse(id()); }
- void RecordTypeFeedback(TypeFeedbackOracle* oracle);
- Handle<Type> type() const { return type_; }
protected:
UnaryOperation(Isolate* isolate,
@@ -1858,8 +1860,6 @@ class UnaryOperation: public Expression {
Expression* expression_;
int pos_;
- Handle<Type> type_;
-
// For unary not (Token::NOT), the AST ids where true and false will
// actually be materialized, respectively.
const BailoutId materialize_true_id_;
@@ -1881,12 +1881,11 @@ class BinaryOperation: public Expression {
BailoutId RightId() const { return right_id_; }
TypeFeedbackId BinaryOperationFeedbackId() const { return reuse(id()); }
- void RecordTypeFeedback(TypeFeedbackOracle* oracle);
- Handle<Type> left_type() const { return left_type_; }
- Handle<Type> right_type() const { return right_type_; }
+ // TODO(rossberg): result_type should be subsumed by lower_type.
Handle<Type> result_type() const { return result_type_; }
- bool has_fixed_right_arg() const { return has_fixed_right_arg_; }
- int fixed_right_arg_value() const { return fixed_right_arg_value_; }
+ void set_result_type(Handle<Type> type) { result_type_ = type; }
+ Maybe<int> fixed_right_arg() const { return fixed_right_arg_; }
+ void set_fixed_right_arg(Maybe<int> arg) { fixed_right_arg_ = arg; }
protected:
BinaryOperation(Isolate* isolate,
@@ -1909,11 +1908,10 @@ class BinaryOperation: public Expression {
Expression* right_;
int pos_;
- Handle<Type> left_type_;
- Handle<Type> right_type_;
Handle<Type> result_type_;
- bool has_fixed_right_arg_;
- int fixed_right_arg_value_;
+ // TODO(rossberg): the fixed arg should probably be represented as a Constant
+ // type for the RHS.
+ Maybe<int> fixed_right_arg_;
// The short-circuit logical operations need an AST ID for their
// right-hand subexpression.
@@ -1994,11 +1992,8 @@ class CompareOperation: public Expression {
// Type feedback information.
TypeFeedbackId CompareOperationFeedbackId() const { return reuse(id()); }
- void RecordTypeFeedback(TypeFeedbackOracle* oracle);
- Handle<Type> left_type() const { return left_type_; }
- Handle<Type> right_type() const { return right_type_; }
- Handle<Type> overall_type() const { return overall_type_; }
- Handle<Type> compare_nil_type() const { return compare_nil_type_; }
+ Handle<Type> combined_type() const { return combined_type_; }
+ void set_combined_type(Handle<Type> type) { combined_type_ = type; }
// Match special cases.
bool IsLiteralCompareTypeof(Expression** expr, Handle<String>* check);
@@ -2025,10 +2020,7 @@ class CompareOperation: public Expression {
Expression* right_;
int pos_;
- Handle<Type> left_type_;
- Handle<Type> right_type_;
- Handle<Type> overall_type_;
- Handle<Type> compare_nil_type_;
+ Handle<Type> combined_type_;
};
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/ast.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698