| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/bailout-reason.h" | 7 #include "src/bailout-reason.h" |
| 8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
| 9 #include "src/field-index.h" | 9 #include "src/field-index.h" |
| 10 #include "src/hydrogen.h" | 10 #include "src/hydrogen.h" |
| (...skipping 1169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1180 // critical. | 1180 // critical. |
| 1181 if (left_type->Maybe(Type::String())) { | 1181 if (left_type->Maybe(Type::String())) { |
| 1182 IfBuilder if_leftisstring(this); | 1182 IfBuilder if_leftisstring(this); |
| 1183 if_leftisstring.If<HIsStringAndBranch>(left); | 1183 if_leftisstring.If<HIsStringAndBranch>(left); |
| 1184 if_leftisstring.Then(); | 1184 if_leftisstring.Then(); |
| 1185 { | 1185 { |
| 1186 Push(BuildBinaryOperation( | 1186 Push(BuildBinaryOperation( |
| 1187 state.op(), left, right, | 1187 state.op(), left, right, |
| 1188 Type::String(zone()), right_type, | 1188 Type::String(zone()), right_type, |
| 1189 result_type, state.fixed_right_arg(), | 1189 result_type, state.fixed_right_arg(), |
| 1190 allocation_mode)); | 1190 allocation_mode, state.language_mode())); |
| 1191 } | 1191 } |
| 1192 if_leftisstring.Else(); | 1192 if_leftisstring.Else(); |
| 1193 { | 1193 { |
| 1194 Push(BuildBinaryOperation( | 1194 Push(BuildBinaryOperation( |
| 1195 state.op(), left, right, | 1195 state.op(), left, right, |
| 1196 left_type, right_type, result_type, | 1196 left_type, right_type, result_type, |
| 1197 state.fixed_right_arg(), allocation_mode)); | 1197 state.fixed_right_arg(), allocation_mode, |
| 1198 state.language_mode())); |
| 1198 } | 1199 } |
| 1199 if_leftisstring.End(); | 1200 if_leftisstring.End(); |
| 1200 result = Pop(); | 1201 result = Pop(); |
| 1201 } else { | 1202 } else { |
| 1202 IfBuilder if_rightisstring(this); | 1203 IfBuilder if_rightisstring(this); |
| 1203 if_rightisstring.If<HIsStringAndBranch>(right); | 1204 if_rightisstring.If<HIsStringAndBranch>(right); |
| 1204 if_rightisstring.Then(); | 1205 if_rightisstring.Then(); |
| 1205 { | 1206 { |
| 1206 Push(BuildBinaryOperation( | 1207 Push(BuildBinaryOperation( |
| 1207 state.op(), left, right, | 1208 state.op(), left, right, |
| 1208 left_type, Type::String(zone()), | 1209 left_type, Type::String(zone()), |
| 1209 result_type, state.fixed_right_arg(), | 1210 result_type, state.fixed_right_arg(), |
| 1210 allocation_mode)); | 1211 allocation_mode, state.language_mode())); |
| 1211 } | 1212 } |
| 1212 if_rightisstring.Else(); | 1213 if_rightisstring.Else(); |
| 1213 { | 1214 { |
| 1214 Push(BuildBinaryOperation( | 1215 Push(BuildBinaryOperation( |
| 1215 state.op(), left, right, | 1216 state.op(), left, right, |
| 1216 left_type, right_type, result_type, | 1217 left_type, right_type, result_type, |
| 1217 state.fixed_right_arg(), allocation_mode)); | 1218 state.fixed_right_arg(), allocation_mode, |
| 1219 state.language_mode())); |
| 1218 } | 1220 } |
| 1219 if_rightisstring.End(); | 1221 if_rightisstring.End(); |
| 1220 result = Pop(); | 1222 result = Pop(); |
| 1221 } | 1223 } |
| 1222 } else { | 1224 } else { |
| 1223 result = BuildBinaryOperation( | 1225 result = BuildBinaryOperation( |
| 1224 state.op(), left, right, | 1226 state.op(), left, right, |
| 1225 left_type, right_type, result_type, | 1227 left_type, right_type, result_type, |
| 1226 state.fixed_right_arg(), allocation_mode); | 1228 state.fixed_right_arg(), allocation_mode, state.language_mode()); |
| 1227 } | 1229 } |
| 1228 | 1230 |
| 1229 // If we encounter a generic argument, the number conversion is | 1231 // If we encounter a generic argument, the number conversion is |
| 1230 // observable, thus we cannot afford to bail out after the fact. | 1232 // observable, thus we cannot afford to bail out after the fact. |
| 1231 if (!state.HasSideEffects()) { | 1233 if (!state.HasSideEffects()) { |
| 1232 result = EnforceNumberType(result, result_type); | 1234 result = EnforceNumberType(result, result_type); |
| 1233 } | 1235 } |
| 1234 | 1236 |
| 1235 return result; | 1237 return result; |
| 1236 } | 1238 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1250 HValue* left = GetParameter(BinaryOpWithAllocationSiteStub::kLeft); | 1252 HValue* left = GetParameter(BinaryOpWithAllocationSiteStub::kLeft); |
| 1251 HValue* right = GetParameter(BinaryOpWithAllocationSiteStub::kRight); | 1253 HValue* right = GetParameter(BinaryOpWithAllocationSiteStub::kRight); |
| 1252 | 1254 |
| 1253 Type* left_type = state.GetLeftType(zone()); | 1255 Type* left_type = state.GetLeftType(zone()); |
| 1254 Type* right_type = state.GetRightType(zone()); | 1256 Type* right_type = state.GetRightType(zone()); |
| 1255 Type* result_type = state.GetResultType(zone()); | 1257 Type* result_type = state.GetResultType(zone()); |
| 1256 HAllocationMode allocation_mode(allocation_site); | 1258 HAllocationMode allocation_mode(allocation_site); |
| 1257 | 1259 |
| 1258 return BuildBinaryOperation(state.op(), left, right, | 1260 return BuildBinaryOperation(state.op(), left, right, |
| 1259 left_type, right_type, result_type, | 1261 left_type, right_type, result_type, |
| 1260 state.fixed_right_arg(), allocation_mode); | 1262 state.fixed_right_arg(), allocation_mode, |
| 1263 state.language_mode()); |
| 1261 } | 1264 } |
| 1262 | 1265 |
| 1263 | 1266 |
| 1264 Handle<Code> BinaryOpWithAllocationSiteStub::GenerateCode() { | 1267 Handle<Code> BinaryOpWithAllocationSiteStub::GenerateCode() { |
| 1265 return DoGenerateCode(this); | 1268 return DoGenerateCode(this); |
| 1266 } | 1269 } |
| 1267 | 1270 |
| 1268 | 1271 |
| 1269 template <> | 1272 template <> |
| 1270 HValue* CodeStubGraphBuilder<StringAddStub>::BuildCodeInitializedStub() { | 1273 HValue* CodeStubGraphBuilder<StringAddStub>::BuildCodeInitializedStub() { |
| (...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2080 // need. | 2083 // need. |
| 2081 info()->MarkMustNotHaveEagerFrame(); | 2084 info()->MarkMustNotHaveEagerFrame(); |
| 2082 | 2085 |
| 2083 // Probe the stub cache. | 2086 // Probe the stub cache. |
| 2084 Add<HTailCallThroughMegamorphicCache>(receiver, name); | 2087 Add<HTailCallThroughMegamorphicCache>(receiver, name); |
| 2085 | 2088 |
| 2086 // We never continue. | 2089 // We never continue. |
| 2087 return graph()->GetConstant0(); | 2090 return graph()->GetConstant0(); |
| 2088 } | 2091 } |
| 2089 } } // namespace v8::internal | 2092 } } // namespace v8::internal |
| OLD | NEW |