| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/arguments.h" | 7 #include "src/arguments.h" |
| 8 #include "src/jsregexp-inl.h" | 8 #include "src/jsregexp-inl.h" |
| 9 #include "src/jsregexp.h" | 9 #include "src/jsregexp.h" |
| 10 #include "src/runtime/runtime-utils.h" | 10 #include "src/runtime/runtime-utils.h" |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 for (int i = 0; i < end; i++) { | 272 for (int i = 0; i < end; i++) { |
| 273 if (flat1.Get(i) != flat2.Get(i)) { | 273 if (flat1.Get(i) != flat2.Get(i)) { |
| 274 return Smi::FromInt(flat1.Get(i) - flat2.Get(i)); | 274 return Smi::FromInt(flat1.Get(i) - flat2.Get(i)); |
| 275 } | 275 } |
| 276 } | 276 } |
| 277 | 277 |
| 278 return Smi::FromInt(str1_length - str2_length); | 278 return Smi::FromInt(str1_length - str2_length); |
| 279 } | 279 } |
| 280 | 280 |
| 281 | 281 |
| 282 RUNTIME_FUNCTION(Runtime_SubString) { | 282 RUNTIME_FUNCTION(Runtime_SubStringRT) { |
| 283 HandleScope scope(isolate); | 283 HandleScope scope(isolate); |
| 284 DCHECK(args.length() == 3); | 284 DCHECK(args.length() == 3); |
| 285 | 285 |
| 286 CONVERT_ARG_HANDLE_CHECKED(String, string, 0); | 286 CONVERT_ARG_HANDLE_CHECKED(String, string, 0); |
| 287 int start, end; | 287 int start, end; |
| 288 // We have a fast integer-only case here to avoid a conversion to double in | 288 // We have a fast integer-only case here to avoid a conversion to double in |
| 289 // the common case where from and to are Smis. | 289 // the common case where from and to are Smis. |
| 290 if (args[1]->IsSmi() && args[2]->IsSmi()) { | 290 if (args[1]->IsSmi() && args[2]->IsSmi()) { |
| 291 CONVERT_SMI_ARG_CHECKED(from_number, 1); | 291 CONVERT_SMI_ARG_CHECKED(from_number, 1); |
| 292 CONVERT_SMI_ARG_CHECKED(to_number, 2); | 292 CONVERT_SMI_ARG_CHECKED(to_number, 2); |
| 293 start = from_number; | 293 start = from_number; |
| 294 end = to_number; | 294 end = to_number; |
| 295 } else { | 295 } else { |
| 296 CONVERT_DOUBLE_ARG_CHECKED(from_number, 1); | 296 CONVERT_DOUBLE_ARG_CHECKED(from_number, 1); |
| 297 CONVERT_DOUBLE_ARG_CHECKED(to_number, 2); | 297 CONVERT_DOUBLE_ARG_CHECKED(to_number, 2); |
| 298 start = FastD2IChecked(from_number); | 298 start = FastD2IChecked(from_number); |
| 299 end = FastD2IChecked(to_number); | 299 end = FastD2IChecked(to_number); |
| 300 } | 300 } |
| 301 RUNTIME_ASSERT(end >= start); | 301 RUNTIME_ASSERT(end >= start); |
| 302 RUNTIME_ASSERT(start >= 0); | 302 RUNTIME_ASSERT(start >= 0); |
| 303 RUNTIME_ASSERT(end <= string->length()); | 303 RUNTIME_ASSERT(end <= string->length()); |
| 304 isolate->counters()->sub_string_runtime()->Increment(); | 304 isolate->counters()->sub_string_runtime()->Increment(); |
| 305 | 305 |
| 306 return *isolate->factory()->NewSubString(string, start, end); | 306 return *isolate->factory()->NewSubString(string, start, end); |
| 307 } | 307 } |
| 308 | 308 |
| 309 | 309 |
| 310 RUNTIME_FUNCTION(Runtime_StringAdd) { | 310 RUNTIME_FUNCTION(Runtime_SubString) { |
| 311 SealHandleScope shs(isolate); |
| 312 return __RT_impl_Runtime_SubStringRT(args, isolate); |
| 313 } |
| 314 |
| 315 |
| 316 RUNTIME_FUNCTION(Runtime_StringAddRT) { |
| 311 HandleScope scope(isolate); | 317 HandleScope scope(isolate); |
| 312 DCHECK(args.length() == 2); | 318 DCHECK(args.length() == 2); |
| 313 CONVERT_ARG_HANDLE_CHECKED(String, str1, 0); | 319 CONVERT_ARG_HANDLE_CHECKED(String, str1, 0); |
| 314 CONVERT_ARG_HANDLE_CHECKED(String, str2, 1); | 320 CONVERT_ARG_HANDLE_CHECKED(String, str2, 1); |
| 315 isolate->counters()->string_add_runtime()->Increment(); | 321 isolate->counters()->string_add_runtime()->Increment(); |
| 316 Handle<String> result; | 322 Handle<String> result; |
| 317 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 323 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 318 isolate, result, isolate->factory()->NewConsString(str1, str2)); | 324 isolate, result, isolate->factory()->NewConsString(str1, str2)); |
| 319 return *result; | 325 return *result; |
| 320 } | 326 } |
| 321 | 327 |
| 322 | 328 |
| 329 RUNTIME_FUNCTION(Runtime_StringAdd) { |
| 330 SealHandleScope shs(isolate); |
| 331 return __RT_impl_Runtime_StringAddRT(args, isolate); |
| 332 } |
| 333 |
| 334 |
| 323 RUNTIME_FUNCTION(Runtime_InternalizeString) { | 335 RUNTIME_FUNCTION(Runtime_InternalizeString) { |
| 324 HandleScope handles(isolate); | 336 HandleScope handles(isolate); |
| 325 RUNTIME_ASSERT(args.length() == 1); | 337 RUNTIME_ASSERT(args.length() == 1); |
| 326 CONVERT_ARG_HANDLE_CHECKED(String, string, 0); | 338 CONVERT_ARG_HANDLE_CHECKED(String, string, 0); |
| 327 return *isolate->factory()->InternalizeString(string); | 339 return *isolate->factory()->InternalizeString(string); |
| 328 } | 340 } |
| 329 | 341 |
| 330 | 342 |
| 331 RUNTIME_FUNCTION(Runtime_StringMatch) { | 343 RUNTIME_FUNCTION(Runtime_StringMatch) { |
| 332 HandleScope handles(isolate); | 344 HandleScope handles(isolate); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 DCHECK(args.length() == 1); | 419 DCHECK(args.length() == 1); |
| 408 if (args[0]->IsNumber()) { | 420 if (args[0]->IsNumber()) { |
| 409 CONVERT_NUMBER_CHECKED(uint32_t, code, Uint32, args[0]); | 421 CONVERT_NUMBER_CHECKED(uint32_t, code, Uint32, args[0]); |
| 410 code &= 0xffff; | 422 code &= 0xffff; |
| 411 return *isolate->factory()->LookupSingleCharacterStringFromCode(code); | 423 return *isolate->factory()->LookupSingleCharacterStringFromCode(code); |
| 412 } | 424 } |
| 413 return isolate->heap()->empty_string(); | 425 return isolate->heap()->empty_string(); |
| 414 } | 426 } |
| 415 | 427 |
| 416 | 428 |
| 417 RUNTIME_FUNCTION(Runtime_StringCompare) { | 429 RUNTIME_FUNCTION(Runtime_StringCompareRT) { |
| 418 HandleScope handle_scope(isolate); | 430 HandleScope handle_scope(isolate); |
| 419 DCHECK(args.length() == 2); | 431 DCHECK(args.length() == 2); |
| 420 | 432 |
| 421 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); | 433 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); |
| 422 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); | 434 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); |
| 423 | 435 |
| 424 isolate->counters()->string_compare_runtime()->Increment(); | 436 isolate->counters()->string_compare_runtime()->Increment(); |
| 425 | 437 |
| 426 // A few fast case tests before we flatten. | 438 // A few fast case tests before we flatten. |
| 427 if (x.is_identical_to(y)) return Smi::FromInt(EQUAL); | 439 if (x.is_identical_to(y)) return Smi::FromInt(EQUAL); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 Object* result; | 488 Object* result; |
| 477 if (r == 0) { | 489 if (r == 0) { |
| 478 result = equal_prefix_result; | 490 result = equal_prefix_result; |
| 479 } else { | 491 } else { |
| 480 result = (r < 0) ? Smi::FromInt(LESS) : Smi::FromInt(GREATER); | 492 result = (r < 0) ? Smi::FromInt(LESS) : Smi::FromInt(GREATER); |
| 481 } | 493 } |
| 482 return result; | 494 return result; |
| 483 } | 495 } |
| 484 | 496 |
| 485 | 497 |
| 498 RUNTIME_FUNCTION(Runtime_StringCompare) { |
| 499 SealHandleScope shs(isolate); |
| 500 return __RT_impl_Runtime_StringCompareRT(args, isolate); |
| 501 } |
| 502 |
| 503 |
| 486 RUNTIME_FUNCTION(Runtime_StringBuilderConcat) { | 504 RUNTIME_FUNCTION(Runtime_StringBuilderConcat) { |
| 487 HandleScope scope(isolate); | 505 HandleScope scope(isolate); |
| 488 DCHECK(args.length() == 3); | 506 DCHECK(args.length() == 3); |
| 489 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); | 507 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); |
| 490 int32_t array_length; | 508 int32_t array_length; |
| 491 if (!args[1]->ToInt32(&array_length)) { | 509 if (!args[1]->ToInt32(&array_length)) { |
| 492 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError()); | 510 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError()); |
| 493 } | 511 } |
| 494 CONVERT_ARG_HANDLE_CHECKED(String, special, 2); | 512 CONVERT_ARG_HANDLE_CHECKED(String, special, 2); |
| 495 | 513 |
| (...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1278 return __RT_impl_Runtime_StringCharCodeAtRT(args, isolate); | 1296 return __RT_impl_Runtime_StringCharCodeAtRT(args, isolate); |
| 1279 } | 1297 } |
| 1280 | 1298 |
| 1281 | 1299 |
| 1282 RUNTIME_FUNCTION(Runtime_IsStringWrapperSafeForDefaultValueOf) { | 1300 RUNTIME_FUNCTION(Runtime_IsStringWrapperSafeForDefaultValueOf) { |
| 1283 UNIMPLEMENTED(); | 1301 UNIMPLEMENTED(); |
| 1284 return NULL; | 1302 return NULL; |
| 1285 } | 1303 } |
| 1286 } | 1304 } |
| 1287 } // namespace v8::internal | 1305 } // namespace v8::internal |
| OLD | NEW |