| Index: src/ast.h
|
| diff --git a/src/ast.h b/src/ast.h
|
| index 07227b105c50818d32ff4219ef0038436ba28bfe..b17b7f2f8d79265b9c523d50b9f17a60311f76a2 100644
|
| --- a/src/ast.h
|
| +++ b/src/ast.h
|
| @@ -1695,14 +1695,14 @@ class Property V8_FINAL : public Expression {
|
| return STANDARD_STORE;
|
| }
|
| bool IsUninitialized() { return is_uninitialized_; }
|
| - bool IsPreMonomorphic() { return is_pre_monomorphic_; }
|
| bool HasNoTypeInformation() {
|
| - return is_uninitialized_ || is_pre_monomorphic_;
|
| + return is_uninitialized_;
|
| }
|
| void set_is_uninitialized(bool b) { is_uninitialized_ = b; }
|
| - void set_is_pre_monomorphic(bool b) { is_pre_monomorphic_ = b; }
|
| void set_is_string_access(bool b) { is_string_access_ = b; }
|
| void set_is_function_prototype(bool b) { is_function_prototype_ = b; }
|
| + void mark_for_call() { is_for_call_ = true; }
|
| + bool IsForCall() { return is_for_call_; }
|
|
|
| TypeFeedbackId PropertyFeedbackId() { return reuse(id()); }
|
|
|
| @@ -1715,7 +1715,7 @@ class Property V8_FINAL : public Expression {
|
| obj_(obj),
|
| key_(key),
|
| load_id_(GetNextId(zone)),
|
| - is_pre_monomorphic_(false),
|
| + is_for_call_(false),
|
| is_uninitialized_(false),
|
| is_string_access_(false),
|
| is_function_prototype_(false) { }
|
| @@ -1726,7 +1726,7 @@ class Property V8_FINAL : public Expression {
|
| const BailoutId load_id_;
|
|
|
| SmallMapList receiver_types_;
|
| - bool is_pre_monomorphic_ : 1;
|
| + bool is_for_call_ : 1;
|
| bool is_uninitialized_ : 1;
|
| bool is_string_access_ : 1;
|
| bool is_function_prototype_ : 1;
|
| @@ -1742,39 +1742,26 @@ class Call V8_FINAL : public Expression {
|
|
|
| // Type feedback information.
|
| TypeFeedbackId CallFeedbackId() const { return reuse(id()); }
|
| - void RecordTypeFeedback(TypeFeedbackOracle* oracle);
|
| - virtual SmallMapList* GetReceiverTypes() V8_OVERRIDE {
|
| - return &receiver_types_;
|
| - }
|
| - virtual bool IsMonomorphic() V8_OVERRIDE { return is_monomorphic_; }
|
| - bool KeyedArrayCallIsHoley() { return keyed_array_call_is_holey_; }
|
| - CheckType check_type() const { return check_type_; }
|
|
|
| - void set_string_check(Handle<JSObject> holder) {
|
| - holder_ = holder;
|
| - check_type_ = STRING_CHECK;
|
| - }
|
| -
|
| - void set_number_check(Handle<JSObject> holder) {
|
| - holder_ = holder;
|
| - check_type_ = NUMBER_CHECK;
|
| + virtual SmallMapList* GetReceiverTypes() V8_OVERRIDE {
|
| + if (expression()->IsProperty()) {
|
| + return expression()->AsProperty()->GetReceiverTypes();
|
| + }
|
| + return NULL;
|
| }
|
|
|
| - void set_map_check() {
|
| - holder_ = Handle<JSObject>::null();
|
| - check_type_ = RECEIVER_MAP_CHECK;
|
| + virtual bool IsMonomorphic() V8_OVERRIDE {
|
| + if (expression()->IsProperty()) {
|
| + return expression()->AsProperty()->IsMonomorphic();
|
| + }
|
| + return !target_.is_null();
|
| }
|
|
|
| Handle<JSFunction> target() { return target_; }
|
|
|
| - // A cache for the holder, set as a side effect of computing the target of the
|
| - // call. Note that it contains the null handle when the receiver is the same
|
| - // as the holder!
|
| - Handle<JSObject> holder() { return holder_; }
|
| -
|
| Handle<Cell> cell() { return cell_; }
|
|
|
| - bool ComputeTarget(Handle<Map> type, Handle<String> name);
|
| + void set_target(Handle<JSFunction> target) { target_ = target; }
|
| bool ComputeGlobalTarget(Handle<GlobalObject> global, LookupResult* lookup);
|
|
|
| BailoutId ReturnId() const { return return_id_; }
|
| @@ -1790,11 +1777,6 @@ class Call V8_FINAL : public Expression {
|
| // Helpers to determine how to handle the call.
|
| CallType GetCallType(Isolate* isolate) const;
|
|
|
| - // TODO(rossberg): this should really move somewhere else (and be merged with
|
| - // various similar methods in objets.cc), but for now...
|
| - static Handle<JSObject> GetPrototypeForPrimitiveCheck(
|
| - CheckType check, Isolate* isolate);
|
| -
|
| #ifdef DEBUG
|
| // Used to assert that the FullCodeGenerator records the return site.
|
| bool return_is_recorded_;
|
| @@ -1808,21 +1790,17 @@ class Call V8_FINAL : public Expression {
|
| : Expression(zone, pos),
|
| expression_(expression),
|
| arguments_(arguments),
|
| - is_monomorphic_(false),
|
| - keyed_array_call_is_holey_(true),
|
| - check_type_(RECEIVER_MAP_CHECK),
|
| - return_id_(GetNextId(zone)) { }
|
| + return_id_(GetNextId(zone)) {
|
| + if (expression->IsProperty()) {
|
| + expression->AsProperty()->mark_for_call();
|
| + }
|
| + }
|
|
|
| private:
|
| Expression* expression_;
|
| ZoneList<Expression*>* arguments_;
|
|
|
| - bool is_monomorphic_;
|
| - bool keyed_array_call_is_holey_;
|
| - CheckType check_type_;
|
| - SmallMapList receiver_types_;
|
| Handle<JSFunction> target_;
|
| - Handle<JSObject> holder_;
|
| Handle<Cell> cell_;
|
|
|
| const BailoutId return_id_;
|
| @@ -2154,9 +2132,8 @@ class Assignment V8_FINAL : public Expression {
|
| return receiver_types_.length() == 1;
|
| }
|
| bool IsUninitialized() { return is_uninitialized_; }
|
| - bool IsPreMonomorphic() { return is_pre_monomorphic_; }
|
| bool HasNoTypeInformation() {
|
| - return is_uninitialized_ || is_pre_monomorphic_;
|
| + return is_uninitialized_;
|
| }
|
| virtual SmallMapList* GetReceiverTypes() V8_OVERRIDE {
|
| return &receiver_types_;
|
| @@ -2165,7 +2142,6 @@ class Assignment V8_FINAL : public Expression {
|
| return store_mode_;
|
| }
|
| void set_is_uninitialized(bool b) { is_uninitialized_ = b; }
|
| - void set_is_pre_monomorphic(bool b) { is_pre_monomorphic_ = b; }
|
| void set_store_mode(KeyedAccessStoreMode mode) { store_mode_ = mode; }
|
|
|
| protected:
|
| @@ -2192,7 +2168,6 @@ class Assignment V8_FINAL : public Expression {
|
| const BailoutId assignment_id_;
|
|
|
| bool is_uninitialized_ : 1;
|
| - bool is_pre_monomorphic_ : 1;
|
| KeyedAccessStoreMode store_mode_ : 5; // Windows treats as signed,
|
| // must have extra bit.
|
| SmallMapList receiver_types_;
|
|
|