Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: src/runtime/runtime-regexp.cc

Issue 2613723002: [runtime] Use DCHECK_EQ instead of DCHECK for number of args. (Closed)
Patch Set: Rebase. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/runtime/runtime-proxy.cc ('k') | src/runtime/runtime-scopes.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/conversions-inl.h" 8 #include "src/conversions-inl.h"
9 #include "src/isolate-inl.h" 9 #include "src/isolate-inl.h"
10 #include "src/messages.h" 10 #include "src/messages.h"
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 replacement = String::Flatten(replacement); 678 replacement = String::Flatten(replacement);
679 679
680 return StringReplaceGlobalRegExpWithString(isolate, subject, regexp, 680 return StringReplaceGlobalRegExpWithString(isolate, subject, regexp,
681 replacement, last_match_info); 681 replacement, last_match_info);
682 } 682 }
683 683
684 } // namespace 684 } // namespace
685 685
686 RUNTIME_FUNCTION(Runtime_StringReplaceGlobalRegExpWithString) { 686 RUNTIME_FUNCTION(Runtime_StringReplaceGlobalRegExpWithString) {
687 HandleScope scope(isolate); 687 HandleScope scope(isolate);
688 DCHECK(args.length() == 4); 688 DCHECK_EQ(4, args.length());
689 689
690 CONVERT_ARG_HANDLE_CHECKED(String, subject, 0); 690 CONVERT_ARG_HANDLE_CHECKED(String, subject, 0);
691 CONVERT_ARG_HANDLE_CHECKED(String, replacement, 2); 691 CONVERT_ARG_HANDLE_CHECKED(String, replacement, 2);
692 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 1); 692 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 1);
693 CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 3); 693 CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 3);
694 694
695 return StringReplaceGlobalRegExpWithStringHelper( 695 return StringReplaceGlobalRegExpWithStringHelper(
696 isolate, regexp, subject, replacement, last_match_info); 696 isolate, regexp, subject, replacement, last_match_info);
697 } 697 }
698 698
699 RUNTIME_FUNCTION(Runtime_StringSplit) { 699 RUNTIME_FUNCTION(Runtime_StringSplit) {
700 HandleScope handle_scope(isolate); 700 HandleScope handle_scope(isolate);
701 DCHECK(args.length() == 3); 701 DCHECK_EQ(3, args.length());
702 CONVERT_ARG_HANDLE_CHECKED(String, subject, 0); 702 CONVERT_ARG_HANDLE_CHECKED(String, subject, 0);
703 CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1); 703 CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1);
704 CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[2]); 704 CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[2]);
705 CHECK(limit > 0); 705 CHECK(limit > 0);
706 706
707 int subject_length = subject->length(); 707 int subject_length = subject->length();
708 int pattern_length = pattern->length(); 708 int pattern_length = pattern->length();
709 CHECK(pattern_length > 0); 709 CHECK(pattern_length > 0);
710 710
711 if (limit == 0xffffffffu) { 711 if (limit == 0xffffffffu) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 774
775 TruncateRegexpIndicesList(isolate); 775 TruncateRegexpIndicesList(isolate);
776 776
777 return *result; 777 return *result;
778 } 778 }
779 779
780 // ES##sec-regexpcreate 780 // ES##sec-regexpcreate
781 // RegExpCreate ( P, F ) 781 // RegExpCreate ( P, F )
782 RUNTIME_FUNCTION(Runtime_RegExpCreate) { 782 RUNTIME_FUNCTION(Runtime_RegExpCreate) {
783 HandleScope scope(isolate); 783 HandleScope scope(isolate);
784 DCHECK(args.length() == 1); 784 DCHECK_EQ(1, args.length());
785 CONVERT_ARG_HANDLE_CHECKED(Object, source_object, 0); 785 CONVERT_ARG_HANDLE_CHECKED(Object, source_object, 0);
786 786
787 Handle<String> source; 787 Handle<String> source;
788 if (source_object->IsUndefined(isolate)) { 788 if (source_object->IsUndefined(isolate)) {
789 source = isolate->factory()->empty_string(); 789 source = isolate->factory()->empty_string();
790 } else { 790 } else {
791 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 791 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
792 isolate, source, Object::ToString(isolate, source_object)); 792 isolate, source, Object::ToString(isolate, source_object));
793 } 793 }
794 794
795 Handle<Map> map(isolate->regexp_function()->initial_map()); 795 Handle<Map> map(isolate->regexp_function()->initial_map());
796 Handle<JSRegExp> regexp = 796 Handle<JSRegExp> regexp =
797 Handle<JSRegExp>::cast(isolate->factory()->NewJSObjectFromMap(map)); 797 Handle<JSRegExp>::cast(isolate->factory()->NewJSObjectFromMap(map));
798 798
799 JSRegExp::Flags flags = JSRegExp::kNone; 799 JSRegExp::Flags flags = JSRegExp::kNone;
800 800
801 RETURN_FAILURE_ON_EXCEPTION(isolate, 801 RETURN_FAILURE_ON_EXCEPTION(isolate,
802 JSRegExp::Initialize(regexp, source, flags)); 802 JSRegExp::Initialize(regexp, source, flags));
803 803
804 return *regexp; 804 return *regexp;
805 } 805 }
806 806
807 RUNTIME_FUNCTION(Runtime_RegExpExec) { 807 RUNTIME_FUNCTION(Runtime_RegExpExec) {
808 HandleScope scope(isolate); 808 HandleScope scope(isolate);
809 DCHECK(args.length() == 4); 809 DCHECK_EQ(4, args.length());
810 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); 810 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0);
811 CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); 811 CONVERT_ARG_HANDLE_CHECKED(String, subject, 1);
812 CONVERT_INT32_ARG_CHECKED(index, 2); 812 CONVERT_INT32_ARG_CHECKED(index, 2);
813 CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 3); 813 CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 3);
814 // Due to the way the JS calls are constructed this must be less than the 814 // Due to the way the JS calls are constructed this must be less than the
815 // length of a string, i.e. it is always a Smi. We check anyway for security. 815 // length of a string, i.e. it is always a Smi. We check anyway for security.
816 CHECK(index >= 0); 816 CHECK(index >= 0);
817 CHECK(index <= subject->length()); 817 CHECK(index <= subject->length());
818 isolate->counters()->regexp_entry_runtime()->Increment(); 818 isolate->counters()->regexp_entry_runtime()->Increment();
819 RETURN_RESULT_OR_FAILURE( 819 RETURN_RESULT_OR_FAILURE(
820 isolate, RegExpImpl::Exec(regexp, subject, index, last_match_info)); 820 isolate, RegExpImpl::Exec(regexp, subject, index, last_match_info));
821 } 821 }
822 822
823 RUNTIME_FUNCTION(Runtime_RegExpInternalReplace) { 823 RUNTIME_FUNCTION(Runtime_RegExpInternalReplace) {
824 HandleScope scope(isolate); 824 HandleScope scope(isolate);
825 DCHECK(args.length() == 3); 825 DCHECK_EQ(3, args.length());
826 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); 826 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0);
827 CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); 827 CONVERT_ARG_HANDLE_CHECKED(String, subject, 1);
828 CONVERT_ARG_HANDLE_CHECKED(String, replacement, 2); 828 CONVERT_ARG_HANDLE_CHECKED(String, replacement, 2);
829 829
830 Handle<RegExpMatchInfo> internal_match_info = 830 Handle<RegExpMatchInfo> internal_match_info =
831 isolate->regexp_internal_match_info(); 831 isolate->regexp_internal_match_info();
832 832
833 return StringReplaceGlobalRegExpWithStringHelper( 833 return StringReplaceGlobalRegExpWithStringHelper(
834 isolate, regexp, subject, replacement, internal_match_info); 834 isolate, regexp, subject, replacement, internal_match_info);
835 } 835 }
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1230 1230
1231 UNREACHABLE(); 1231 UNREACHABLE();
1232 return MaybeHandle<String>(); 1232 return MaybeHandle<String>();
1233 } 1233 }
1234 1234
1235 } // namespace 1235 } // namespace
1236 1236
1237 // This is only called for StringReplaceGlobalRegExpWithFunction. 1237 // This is only called for StringReplaceGlobalRegExpWithFunction.
1238 RUNTIME_FUNCTION(Runtime_RegExpExecMultiple) { 1238 RUNTIME_FUNCTION(Runtime_RegExpExecMultiple) {
1239 HandleScope handles(isolate); 1239 HandleScope handles(isolate);
1240 DCHECK(args.length() == 4); 1240 DCHECK_EQ(4, args.length());
1241 1241
1242 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); 1242 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0);
1243 CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); 1243 CONVERT_ARG_HANDLE_CHECKED(String, subject, 1);
1244 CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 2); 1244 CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 2);
1245 CONVERT_ARG_HANDLE_CHECKED(JSArray, result_array, 3); 1245 CONVERT_ARG_HANDLE_CHECKED(JSArray, result_array, 3);
1246 CHECK(result_array->HasFastObjectElements()); 1246 CHECK(result_array->HasFastObjectElements());
1247 1247
1248 subject = String::Flatten(subject); 1248 subject = String::Flatten(subject);
1249 CHECK(regexp->GetFlags() & JSRegExp::kGlobal); 1249 CHECK(regexp->GetFlags() & JSRegExp::kGlobal);
1250 1250
1251 if (regexp->CaptureCount() == 0) { 1251 if (regexp->CaptureCount() == 0) {
1252 return SearchRegExpMultiple<false>(isolate, subject, regexp, 1252 return SearchRegExpMultiple<false>(isolate, subject, regexp,
1253 last_match_info, result_array); 1253 last_match_info, result_array);
1254 } else { 1254 } else {
1255 return SearchRegExpMultiple<true>(isolate, subject, regexp, last_match_info, 1255 return SearchRegExpMultiple<true>(isolate, subject, regexp, last_match_info,
1256 result_array); 1256 result_array);
1257 } 1257 }
1258 } 1258 }
1259 1259
1260 RUNTIME_FUNCTION(Runtime_StringReplaceNonGlobalRegExpWithFunction) { 1260 RUNTIME_FUNCTION(Runtime_StringReplaceNonGlobalRegExpWithFunction) {
1261 HandleScope scope(isolate); 1261 HandleScope scope(isolate);
1262 DCHECK(args.length() == 3); 1262 DCHECK_EQ(3, args.length());
1263 1263
1264 CONVERT_ARG_HANDLE_CHECKED(String, subject, 0); 1264 CONVERT_ARG_HANDLE_CHECKED(String, subject, 0);
1265 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 1); 1265 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 1);
1266 CONVERT_ARG_HANDLE_CHECKED(JSObject, replace, 2); 1266 CONVERT_ARG_HANDLE_CHECKED(JSObject, replace, 2);
1267 1267
1268 RETURN_RESULT_OR_FAILURE(isolate, StringReplaceNonGlobalRegExpWithFunction( 1268 RETURN_RESULT_OR_FAILURE(isolate, StringReplaceNonGlobalRegExpWithFunction(
1269 isolate, subject, regexp, replace)); 1269 isolate, subject, regexp, replace));
1270 } 1270 }
1271 1271
1272 namespace { 1272 namespace {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 return isolate->factory()->NewJSArrayWithElements(elems); 1329 return isolate->factory()->NewJSArrayWithElements(elems);
1330 } 1330 }
1331 1331
1332 } // namespace 1332 } // namespace
1333 1333
1334 // Slow path for: 1334 // Slow path for:
1335 // ES#sec-regexp.prototype-@@replace 1335 // ES#sec-regexp.prototype-@@replace
1336 // RegExp.prototype [ @@split ] ( string, limit ) 1336 // RegExp.prototype [ @@split ] ( string, limit )
1337 RUNTIME_FUNCTION(Runtime_RegExpSplit) { 1337 RUNTIME_FUNCTION(Runtime_RegExpSplit) {
1338 HandleScope scope(isolate); 1338 HandleScope scope(isolate);
1339 DCHECK(args.length() == 3); 1339 DCHECK_EQ(3, args.length());
1340 1340
1341 DCHECK(args[1]->IsString()); 1341 DCHECK(args[1]->IsString());
1342 1342
1343 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, recv, 0); 1343 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, recv, 0);
1344 CONVERT_ARG_HANDLE_CHECKED(String, string, 1); 1344 CONVERT_ARG_HANDLE_CHECKED(String, string, 1);
1345 CONVERT_ARG_HANDLE_CHECKED(Object, limit_obj, 2); 1345 CONVERT_ARG_HANDLE_CHECKED(Object, limit_obj, 2);
1346 1346
1347 Factory* factory = isolate->factory(); 1347 Factory* factory = isolate->factory();
1348 1348
1349 Handle<JSFunction> regexp_fun = isolate->regexp_function(); 1349 Handle<JSFunction> regexp_fun = isolate->regexp_function();
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1483 } 1483 }
1484 1484
1485 return *NewJSArrayWithElements(isolate, elems, num_elems); 1485 return *NewJSArrayWithElements(isolate, elems, num_elems);
1486 } 1486 }
1487 1487
1488 // Slow path for: 1488 // Slow path for:
1489 // ES#sec-regexp.prototype-@@replace 1489 // ES#sec-regexp.prototype-@@replace
1490 // RegExp.prototype [ @@replace ] ( string, replaceValue ) 1490 // RegExp.prototype [ @@replace ] ( string, replaceValue )
1491 RUNTIME_FUNCTION(Runtime_RegExpReplace) { 1491 RUNTIME_FUNCTION(Runtime_RegExpReplace) {
1492 HandleScope scope(isolate); 1492 HandleScope scope(isolate);
1493 DCHECK(args.length() == 3); 1493 DCHECK_EQ(3, args.length());
1494 1494
1495 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, recv, 0); 1495 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, recv, 0);
1496 CONVERT_ARG_HANDLE_CHECKED(String, string, 1); 1496 CONVERT_ARG_HANDLE_CHECKED(String, string, 1);
1497 Handle<Object> replace_obj = args.at(2); 1497 Handle<Object> replace_obj = args.at(2);
1498 1498
1499 Factory* factory = isolate->factory(); 1499 Factory* factory = isolate->factory();
1500 1500
1501 string = String::Flatten(string); 1501 string = String::Flatten(string);
1502 1502
1503 // Fast-path for unmodified JSRegExps. 1503 // Fast-path for unmodified JSRegExps.
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1650 if (next_source_position < length) { 1650 if (next_source_position < length) {
1651 builder.AppendString( 1651 builder.AppendString(
1652 factory->NewSubString(string, next_source_position, length)); 1652 factory->NewSubString(string, next_source_position, length));
1653 } 1653 }
1654 1654
1655 RETURN_RESULT_OR_FAILURE(isolate, builder.Finish()); 1655 RETURN_RESULT_OR_FAILURE(isolate, builder.Finish());
1656 } 1656 }
1657 1657
1658 RUNTIME_FUNCTION(Runtime_RegExpExecReThrow) { 1658 RUNTIME_FUNCTION(Runtime_RegExpExecReThrow) {
1659 SealHandleScope shs(isolate); 1659 SealHandleScope shs(isolate);
1660 DCHECK(args.length() == 4); 1660 DCHECK_EQ(4, args.length());
1661 Object* exception = isolate->pending_exception(); 1661 Object* exception = isolate->pending_exception();
1662 isolate->clear_pending_exception(); 1662 isolate->clear_pending_exception();
1663 return isolate->ReThrow(exception); 1663 return isolate->ReThrow(exception);
1664 } 1664 }
1665 1665
1666 RUNTIME_FUNCTION(Runtime_RegExpInitializeAndCompile) { 1666 RUNTIME_FUNCTION(Runtime_RegExpInitializeAndCompile) {
1667 HandleScope scope(isolate); 1667 HandleScope scope(isolate);
1668 DCHECK(args.length() == 3); 1668 DCHECK_EQ(3, args.length());
1669 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); 1669 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0);
1670 CONVERT_ARG_HANDLE_CHECKED(String, source, 1); 1670 CONVERT_ARG_HANDLE_CHECKED(String, source, 1);
1671 CONVERT_ARG_HANDLE_CHECKED(String, flags, 2); 1671 CONVERT_ARG_HANDLE_CHECKED(String, flags, 2);
1672 1672
1673 RETURN_FAILURE_ON_EXCEPTION(isolate, 1673 RETURN_FAILURE_ON_EXCEPTION(isolate,
1674 JSRegExp::Initialize(regexp, source, flags)); 1674 JSRegExp::Initialize(regexp, source, flags));
1675 1675
1676 return *regexp; 1676 return *regexp;
1677 } 1677 }
1678 1678
1679 RUNTIME_FUNCTION(Runtime_IsRegExp) { 1679 RUNTIME_FUNCTION(Runtime_IsRegExp) {
1680 SealHandleScope shs(isolate); 1680 SealHandleScope shs(isolate);
1681 DCHECK(args.length() == 1); 1681 DCHECK_EQ(1, args.length());
1682 CONVERT_ARG_CHECKED(Object, obj, 0); 1682 CONVERT_ARG_CHECKED(Object, obj, 0);
1683 return isolate->heap()->ToBoolean(obj->IsJSRegExp()); 1683 return isolate->heap()->ToBoolean(obj->IsJSRegExp());
1684 } 1684 }
1685 1685
1686 } // namespace internal 1686 } // namespace internal
1687 } // namespace v8 1687 } // namespace v8
OLDNEW
« no previous file with comments | « src/runtime/runtime-proxy.cc ('k') | src/runtime/runtime-scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698