| 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/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
| 6 | 6 |
| 7 #include "src/arguments.h" | 7 #include "src/arguments.h" |
| 8 #include "src/regexp/jsregexp-inl.h" | 8 #include "src/regexp/jsregexp-inl.h" |
| 9 #include "src/string-builder.h" | 9 #include "src/string-builder.h" |
| 10 #include "src/string-search.h" | 10 #include "src/string-search.h" |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 case ComparisonResult::kLessThan: | 249 case ComparisonResult::kLessThan: |
| 250 return Smi::FromInt(LESS); | 250 return Smi::FromInt(LESS); |
| 251 case ComparisonResult::kEqual: | 251 case ComparisonResult::kEqual: |
| 252 return Smi::FromInt(EQUAL); | 252 return Smi::FromInt(EQUAL); |
| 253 case ComparisonResult::kGreaterThan: | 253 case ComparisonResult::kGreaterThan: |
| 254 return Smi::FromInt(GREATER); | 254 return Smi::FromInt(GREATER); |
| 255 case ComparisonResult::kUndefined: | 255 case ComparisonResult::kUndefined: |
| 256 break; | 256 break; |
| 257 } | 257 } |
| 258 UNREACHABLE(); | 258 UNREACHABLE(); |
| 259 return Smi::FromInt(0); | 259 return Smi::kZero; |
| 260 } | 260 } |
| 261 | 261 |
| 262 | 262 |
| 263 RUNTIME_FUNCTION(Runtime_StringBuilderConcat) { | 263 RUNTIME_FUNCTION(Runtime_StringBuilderConcat) { |
| 264 HandleScope scope(isolate); | 264 HandleScope scope(isolate); |
| 265 DCHECK(args.length() == 3); | 265 DCHECK(args.length() == 3); |
| 266 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); | 266 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); |
| 267 int32_t array_length; | 267 int32_t array_length; |
| 268 if (!args[1]->ToInt32(&array_length)) { | 268 if (!args[1]->ToInt32(&array_length)) { |
| 269 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError()); | 269 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError()); |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 FixedArray* one_byte_cache = heap->single_character_string_cache(); | 566 FixedArray* one_byte_cache = heap->single_character_string_cache(); |
| 567 Object* undefined = heap->undefined_value(); | 567 Object* undefined = heap->undefined_value(); |
| 568 int i; | 568 int i; |
| 569 WriteBarrierMode mode = elements->GetWriteBarrierMode(no_gc); | 569 WriteBarrierMode mode = elements->GetWriteBarrierMode(no_gc); |
| 570 for (i = 0; i < length; ++i) { | 570 for (i = 0; i < length; ++i) { |
| 571 Object* value = one_byte_cache->get(chars[i]); | 571 Object* value = one_byte_cache->get(chars[i]); |
| 572 if (value == undefined) break; | 572 if (value == undefined) break; |
| 573 elements->set(i, value, mode); | 573 elements->set(i, value, mode); |
| 574 } | 574 } |
| 575 if (i < length) { | 575 if (i < length) { |
| 576 DCHECK(Smi::FromInt(0) == 0); | 576 DCHECK(Smi::kZero == 0); |
| 577 memset(elements->data_start() + i, 0, kPointerSize * (length - i)); | 577 memset(elements->data_start() + i, 0, kPointerSize * (length - i)); |
| 578 } | 578 } |
| 579 #ifdef DEBUG | 579 #ifdef DEBUG |
| 580 for (int j = 0; j < length; ++j) { | 580 for (int j = 0; j < length; ++j) { |
| 581 Object* element = elements->get(j); | 581 Object* element = elements->get(j); |
| 582 DCHECK(element == Smi::FromInt(0) || | 582 DCHECK(element == Smi::kZero || |
| 583 (element->IsString() && String::cast(element)->LooksValid())); | 583 (element->IsString() && String::cast(element)->LooksValid())); |
| 584 } | 584 } |
| 585 #endif | 585 #endif |
| 586 return i; | 586 return i; |
| 587 } | 587 } |
| 588 | 588 |
| 589 | 589 |
| 590 // Converts a String to JSArray. | 590 // Converts a String to JSArray. |
| 591 // For example, "foo" => ["f", "o", "o"]. | 591 // For example, "foo" => ["f", "o", "o"]. |
| 592 RUNTIME_FUNCTION(Runtime_StringToArray) { | 592 RUNTIME_FUNCTION(Runtime_StringToArray) { |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 935 switch (String::Compare(x, y)) { | 935 switch (String::Compare(x, y)) { |
| 936 case ComparisonResult::kLessThan: | 936 case ComparisonResult::kLessThan: |
| 937 return isolate->heap()->true_value(); | 937 return isolate->heap()->true_value(); |
| 938 case ComparisonResult::kEqual: | 938 case ComparisonResult::kEqual: |
| 939 case ComparisonResult::kGreaterThan: | 939 case ComparisonResult::kGreaterThan: |
| 940 return isolate->heap()->false_value(); | 940 return isolate->heap()->false_value(); |
| 941 case ComparisonResult::kUndefined: | 941 case ComparisonResult::kUndefined: |
| 942 break; | 942 break; |
| 943 } | 943 } |
| 944 UNREACHABLE(); | 944 UNREACHABLE(); |
| 945 return Smi::FromInt(0); | 945 return Smi::kZero; |
| 946 } | 946 } |
| 947 | 947 |
| 948 RUNTIME_FUNCTION(Runtime_StringLessThanOrEqual) { | 948 RUNTIME_FUNCTION(Runtime_StringLessThanOrEqual) { |
| 949 HandleScope handle_scope(isolate); | 949 HandleScope handle_scope(isolate); |
| 950 DCHECK_EQ(2, args.length()); | 950 DCHECK_EQ(2, args.length()); |
| 951 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); | 951 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); |
| 952 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); | 952 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); |
| 953 switch (String::Compare(x, y)) { | 953 switch (String::Compare(x, y)) { |
| 954 case ComparisonResult::kEqual: | 954 case ComparisonResult::kEqual: |
| 955 case ComparisonResult::kLessThan: | 955 case ComparisonResult::kLessThan: |
| 956 return isolate->heap()->true_value(); | 956 return isolate->heap()->true_value(); |
| 957 case ComparisonResult::kGreaterThan: | 957 case ComparisonResult::kGreaterThan: |
| 958 return isolate->heap()->false_value(); | 958 return isolate->heap()->false_value(); |
| 959 case ComparisonResult::kUndefined: | 959 case ComparisonResult::kUndefined: |
| 960 break; | 960 break; |
| 961 } | 961 } |
| 962 UNREACHABLE(); | 962 UNREACHABLE(); |
| 963 return Smi::FromInt(0); | 963 return Smi::kZero; |
| 964 } | 964 } |
| 965 | 965 |
| 966 RUNTIME_FUNCTION(Runtime_StringGreaterThan) { | 966 RUNTIME_FUNCTION(Runtime_StringGreaterThan) { |
| 967 HandleScope handle_scope(isolate); | 967 HandleScope handle_scope(isolate); |
| 968 DCHECK_EQ(2, args.length()); | 968 DCHECK_EQ(2, args.length()); |
| 969 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); | 969 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); |
| 970 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); | 970 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); |
| 971 switch (String::Compare(x, y)) { | 971 switch (String::Compare(x, y)) { |
| 972 case ComparisonResult::kGreaterThan: | 972 case ComparisonResult::kGreaterThan: |
| 973 return isolate->heap()->true_value(); | 973 return isolate->heap()->true_value(); |
| 974 case ComparisonResult::kEqual: | 974 case ComparisonResult::kEqual: |
| 975 case ComparisonResult::kLessThan: | 975 case ComparisonResult::kLessThan: |
| 976 return isolate->heap()->false_value(); | 976 return isolate->heap()->false_value(); |
| 977 case ComparisonResult::kUndefined: | 977 case ComparisonResult::kUndefined: |
| 978 break; | 978 break; |
| 979 } | 979 } |
| 980 UNREACHABLE(); | 980 UNREACHABLE(); |
| 981 return Smi::FromInt(0); | 981 return Smi::kZero; |
| 982 } | 982 } |
| 983 | 983 |
| 984 RUNTIME_FUNCTION(Runtime_StringGreaterThanOrEqual) { | 984 RUNTIME_FUNCTION(Runtime_StringGreaterThanOrEqual) { |
| 985 HandleScope handle_scope(isolate); | 985 HandleScope handle_scope(isolate); |
| 986 DCHECK_EQ(2, args.length()); | 986 DCHECK_EQ(2, args.length()); |
| 987 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); | 987 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); |
| 988 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); | 988 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); |
| 989 switch (String::Compare(x, y)) { | 989 switch (String::Compare(x, y)) { |
| 990 case ComparisonResult::kEqual: | 990 case ComparisonResult::kEqual: |
| 991 case ComparisonResult::kGreaterThan: | 991 case ComparisonResult::kGreaterThan: |
| 992 return isolate->heap()->true_value(); | 992 return isolate->heap()->true_value(); |
| 993 case ComparisonResult::kLessThan: | 993 case ComparisonResult::kLessThan: |
| 994 return isolate->heap()->false_value(); | 994 return isolate->heap()->false_value(); |
| 995 case ComparisonResult::kUndefined: | 995 case ComparisonResult::kUndefined: |
| 996 break; | 996 break; |
| 997 } | 997 } |
| 998 UNREACHABLE(); | 998 UNREACHABLE(); |
| 999 return Smi::FromInt(0); | 999 return Smi::kZero; |
| 1000 } | 1000 } |
| 1001 | 1001 |
| 1002 RUNTIME_FUNCTION(Runtime_StringEqual) { | 1002 RUNTIME_FUNCTION(Runtime_StringEqual) { |
| 1003 HandleScope handle_scope(isolate); | 1003 HandleScope handle_scope(isolate); |
| 1004 DCHECK_EQ(2, args.length()); | 1004 DCHECK_EQ(2, args.length()); |
| 1005 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); | 1005 CONVERT_ARG_HANDLE_CHECKED(String, x, 0); |
| 1006 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); | 1006 CONVERT_ARG_HANDLE_CHECKED(String, y, 1); |
| 1007 return isolate->heap()->ToBoolean(String::Equals(x, y)); | 1007 return isolate->heap()->ToBoolean(String::Equals(x, y)); |
| 1008 } | 1008 } |
| 1009 | 1009 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1046 SealHandleScope shs(isolate); | 1046 SealHandleScope shs(isolate); |
| 1047 DCHECK(args.length() == 2); | 1047 DCHECK(args.length() == 2); |
| 1048 if (!args[0]->IsString()) return isolate->heap()->undefined_value(); | 1048 if (!args[0]->IsString()) return isolate->heap()->undefined_value(); |
| 1049 if (!args[1]->IsNumber()) return isolate->heap()->undefined_value(); | 1049 if (!args[1]->IsNumber()) return isolate->heap()->undefined_value(); |
| 1050 if (std::isinf(args.number_at(1))) return isolate->heap()->nan_value(); | 1050 if (std::isinf(args.number_at(1))) return isolate->heap()->nan_value(); |
| 1051 return __RT_impl_Runtime_StringCharCodeAtRT(args, isolate); | 1051 return __RT_impl_Runtime_StringCharCodeAtRT(args, isolate); |
| 1052 } | 1052 } |
| 1053 | 1053 |
| 1054 } // namespace internal | 1054 } // namespace internal |
| 1055 } // namespace v8 | 1055 } // namespace v8 |
| OLD | NEW |