OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 } | 923 } |
924 } | 924 } |
925 } | 925 } |
926 | 926 |
927 return *value; | 927 return *value; |
928 } | 928 } |
929 | 929 |
930 | 930 |
931 static Object* Runtime_RegExpExec(Arguments args) { | 931 static Object* Runtime_RegExpExec(Arguments args) { |
932 HandleScope scope; | 932 HandleScope scope; |
933 ASSERT(args.length() == 3); | 933 ASSERT(args.length() == 4); |
934 CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); | 934 CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); |
935 Handle<JSRegExp> regexp(raw_regexp); | 935 Handle<JSRegExp> regexp(raw_regexp); |
936 CONVERT_CHECKED(String, raw_subject, args[1]); | 936 CONVERT_CHECKED(String, raw_subject, args[1]); |
937 Handle<String> subject(raw_subject); | 937 Handle<String> subject(raw_subject); |
938 Handle<Object> index(args[2]); | 938 // Due to the way the JS files are constructed this must be less than the |
939 ASSERT(index->IsNumber()); | 939 // length of a string, i.e. it is always a Smi. We check anyway for security. |
940 Handle<Object> result = RegExpImpl::Exec(regexp, subject, index); | 940 CONVERT_CHECKED(Smi, index, args[2]); |
| 941 CONVERT_CHECKED(JSArray, raw_last_match_info, args[3]); |
| 942 Handle<JSArray> last_match_info(raw_last_match_info); |
| 943 CHECK(last_match_info->HasFastElements()); |
| 944 Handle<Object> result = RegExpImpl::Exec(regexp, |
| 945 subject, |
| 946 index->value(), |
| 947 last_match_info); |
941 if (result.is_null()) return Failure::Exception(); | 948 if (result.is_null()) return Failure::Exception(); |
942 return *result; | 949 return *result; |
943 } | 950 } |
944 | 951 |
945 | 952 |
946 static Object* Runtime_RegExpExecGlobal(Arguments args) { | 953 static Object* Runtime_RegExpExecGlobal(Arguments args) { |
947 HandleScope scope; | 954 HandleScope scope; |
948 ASSERT(args.length() == 2); | 955 ASSERT(args.length() == 3); |
949 CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); | 956 CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); |
950 Handle<JSRegExp> regexp(raw_regexp); | 957 Handle<JSRegExp> regexp(raw_regexp); |
951 CONVERT_CHECKED(String, raw_subject, args[1]); | 958 CONVERT_CHECKED(String, raw_subject, args[1]); |
952 Handle<String> subject(raw_subject); | 959 Handle<String> subject(raw_subject); |
953 Handle<Object> result = RegExpImpl::ExecGlobal(regexp, subject); | 960 CONVERT_CHECKED(JSArray, raw_last_match_info, args[2]); |
| 961 Handle<JSArray> last_match_info(raw_last_match_info); |
| 962 CHECK(last_match_info->HasFastElements()); |
| 963 Handle<Object> result = |
| 964 RegExpImpl::ExecGlobal(regexp, subject, last_match_info); |
954 if (result.is_null()) return Failure::Exception(); | 965 if (result.is_null()) return Failure::Exception(); |
955 return *result; | 966 return *result; |
956 } | 967 } |
957 | 968 |
958 | 969 |
959 static Object* Runtime_MaterializeRegExpLiteral(Arguments args) { | 970 static Object* Runtime_MaterializeRegExpLiteral(Arguments args) { |
960 HandleScope scope; | 971 HandleScope scope; |
961 ASSERT(args.length() == 4); | 972 ASSERT(args.length() == 4); |
962 CONVERT_ARG_CHECKED(FixedArray, literals, 0); | 973 CONVERT_ARG_CHECKED(FixedArray, literals, 0); |
963 int index = Smi::cast(args[1])->value(); | 974 int index = Smi::cast(args[1])->value(); |
(...skipping 5222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6186 } else { | 6197 } else { |
6187 // Handle last resort GC and make sure to allow future allocations | 6198 // Handle last resort GC and make sure to allow future allocations |
6188 // to grow the heap without causing GCs (if possible). | 6199 // to grow the heap without causing GCs (if possible). |
6189 Counters::gc_last_resort_from_js.Increment(); | 6200 Counters::gc_last_resort_from_js.Increment(); |
6190 Heap::CollectAllGarbage(); | 6201 Heap::CollectAllGarbage(); |
6191 } | 6202 } |
6192 } | 6203 } |
6193 | 6204 |
6194 | 6205 |
6195 } } // namespace v8::internal | 6206 } } // namespace v8::internal |
OLD | NEW |