OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1043 assign_type = | 1043 assign_type = |
1044 (prop->key()->IsPropertyName()) ? NAMED_PROPERTY : KEYED_PROPERTY; | 1044 (prop->key()->IsPropertyName()) ? NAMED_PROPERTY : KEYED_PROPERTY; |
1045 } | 1045 } |
1046 | 1046 |
1047 // Evaluate LHS expression. | 1047 // Evaluate LHS expression. |
1048 switch (assign_type) { | 1048 switch (assign_type) { |
1049 case VARIABLE: | 1049 case VARIABLE: |
1050 // Nothing to do here. | 1050 // Nothing to do here. |
1051 break; | 1051 break; |
1052 case NAMED_PROPERTY: | 1052 case NAMED_PROPERTY: |
1053 VisitForValue(prop->obj(), kStack); | 1053 if (expr->is_compound()) { |
| 1054 // We need the receiver both on the stack and in the accumulator. |
| 1055 VisitForValue(prop->obj(), kAccumulator); |
| 1056 __ push(result_register()); |
| 1057 } else { |
| 1058 VisitForValue(prop->obj(), kStack); |
| 1059 } |
1054 break; | 1060 break; |
1055 case KEYED_PROPERTY: | 1061 case KEYED_PROPERTY: |
1056 VisitForValue(prop->obj(), kStack); | 1062 VisitForValue(prop->obj(), kStack); |
1057 VisitForValue(prop->key(), kStack); | 1063 VisitForValue(prop->key(), kStack); |
1058 break; | 1064 break; |
1059 } | 1065 } |
1060 | 1066 |
1061 // If we have a compound assignment: Get value of LHS expression and | 1067 // If we have a compound assignment: Get value of LHS expression and |
1062 // store in on top of the stack. | 1068 // store in on top of the stack. |
1063 if (expr->is_compound()) { | 1069 if (expr->is_compound()) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1144 // The macros used here must preserve the result register. | 1150 // The macros used here must preserve the result register. |
1145 __ Drop(stack_depth); | 1151 __ Drop(stack_depth); |
1146 __ PopTryHandler(); | 1152 __ PopTryHandler(); |
1147 return 0; | 1153 return 0; |
1148 } | 1154 } |
1149 | 1155 |
1150 #undef __ | 1156 #undef __ |
1151 | 1157 |
1152 | 1158 |
1153 } } // namespace v8::internal | 1159 } } // namespace v8::internal |
OLD | NEW |