| 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 270 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 281 | 281 | 
| 282 static Object* Runtime_IsConstructCall(Arguments args) { | 282 static Object* Runtime_IsConstructCall(Arguments args) { | 
| 283   NoHandleAllocation ha; | 283   NoHandleAllocation ha; | 
| 284   ASSERT(args.length() == 0); | 284   ASSERT(args.length() == 0); | 
| 285   JavaScriptFrameIterator it; | 285   JavaScriptFrameIterator it; | 
| 286   return Heap::ToBoolean(it.frame()->IsConstructor()); | 286   return Heap::ToBoolean(it.frame()->IsConstructor()); | 
| 287 } | 287 } | 
| 288 | 288 | 
| 289 | 289 | 
| 290 static Object* Runtime_RegExpCompile(Arguments args) { | 290 static Object* Runtime_RegExpCompile(Arguments args) { | 
| 291   HandleScope scope;  // create a new handle scope | 291   HandleScope scope; | 
| 292   ASSERT(args.length() == 3); | 292   ASSERT(args.length() == 3); | 
| 293   CONVERT_CHECKED(JSRegExp, raw_re, args[0]); | 293   CONVERT_CHECKED(JSRegExp, raw_re, args[0]); | 
| 294   Handle<JSRegExp> re(raw_re); | 294   Handle<JSRegExp> re(raw_re); | 
| 295   CONVERT_CHECKED(String, raw_pattern, args[1]); | 295   CONVERT_CHECKED(String, raw_pattern, args[1]); | 
| 296   Handle<String> pattern(raw_pattern); | 296   Handle<String> pattern(raw_pattern); | 
| 297   CONVERT_CHECKED(String, raw_flags, args[2]); | 297   CONVERT_CHECKED(String, raw_flags, args[2]); | 
| 298   Handle<String> flags(raw_flags); | 298   Handle<String> flags(raw_flags); | 
| 299   Handle<Object> result = RegExpImpl::Compile(re, pattern, flags); | 299   Handle<Object> result = RegExpImpl::Compile(re, pattern, flags); | 
| 300   if (result.is_null()) return Failure::Exception(); | 300   if (result.is_null()) return Failure::Exception(); | 
| 301   return *result; | 301   return *result; | 
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 779 | 779 | 
| 780 static Object* Runtime_RegExpExec(Arguments args) { | 780 static Object* Runtime_RegExpExec(Arguments args) { | 
| 781   HandleScope scope; | 781   HandleScope scope; | 
| 782   ASSERT(args.length() == 3); | 782   ASSERT(args.length() == 3); | 
| 783   CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); | 783   CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); | 
| 784   Handle<JSRegExp> regexp(raw_regexp); | 784   Handle<JSRegExp> regexp(raw_regexp); | 
| 785   CONVERT_CHECKED(String, raw_subject, args[1]); | 785   CONVERT_CHECKED(String, raw_subject, args[1]); | 
| 786   Handle<String> subject(raw_subject); | 786   Handle<String> subject(raw_subject); | 
| 787   Handle<Object> index(args[2]); | 787   Handle<Object> index(args[2]); | 
| 788   ASSERT(index->IsNumber()); | 788   ASSERT(index->IsNumber()); | 
| 789   return *RegExpImpl::Exec(regexp, subject, index); | 789   Handle<Object> result = RegExpImpl::Exec(regexp, subject, index); | 
|  | 790   if (result.is_null()) return Failure::Exception(); | 
|  | 791   return *result; | 
| 790 } | 792 } | 
| 791 | 793 | 
| 792 | 794 | 
| 793 static Object* Runtime_RegExpExecGlobal(Arguments args) { | 795 static Object* Runtime_RegExpExecGlobal(Arguments args) { | 
| 794   HandleScope scope; | 796   HandleScope scope; | 
| 795   ASSERT(args.length() == 2); | 797   ASSERT(args.length() == 2); | 
| 796   CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); | 798   CONVERT_CHECKED(JSRegExp, raw_regexp, args[0]); | 
| 797   Handle<JSRegExp> regexp(raw_regexp); | 799   Handle<JSRegExp> regexp(raw_regexp); | 
| 798   CONVERT_CHECKED(String, raw_subject, args[1]); | 800   CONVERT_CHECKED(String, raw_subject, args[1]); | 
| 799   Handle<String> subject(raw_subject); | 801   Handle<String> subject(raw_subject); | 
| 800   return *RegExpImpl::ExecGlobal(regexp, subject); | 802   Handle<Object> result = RegExpImpl::ExecGlobal(regexp, subject); | 
|  | 803   if (result.is_null()) return Failure::Exception(); | 
|  | 804   return *result; | 
| 801 } | 805 } | 
| 802 | 806 | 
| 803 | 807 | 
| 804 static Object* Runtime_MaterializeRegExpLiteral(Arguments args) { | 808 static Object* Runtime_MaterializeRegExpLiteral(Arguments args) { | 
| 805   HandleScope scope; | 809   HandleScope scope; | 
| 806   ASSERT(args.length() == 4); | 810   ASSERT(args.length() == 4); | 
| 807   CONVERT_ARG_CHECKED(FixedArray, literals, 0); | 811   CONVERT_ARG_CHECKED(FixedArray, literals, 0); | 
| 808   int index = Smi::cast(args[1])->value(); | 812   int index = Smi::cast(args[1])->value(); | 
| 809   Handle<String> pattern = args.at<String>(2); | 813   Handle<String> pattern = args.at<String>(2); | 
| 810   Handle<String> flags = args.at<String>(3); | 814   Handle<String> flags = args.at<String>(3); | 
| (...skipping 1626 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2437       : Heap::AllocateRawTwoByteString(length); | 2441       : Heap::AllocateRawTwoByteString(length); | 
| 2438   if (o->IsFailure()) return o; | 2442   if (o->IsFailure()) return o; | 
| 2439   String* result = String::cast(o); | 2443   String* result = String::cast(o); | 
| 2440   StringShape result_shape(result); | 2444   StringShape result_shape(result); | 
| 2441   bool has_changed_character = false; | 2445   bool has_changed_character = false; | 
| 2442 | 2446 | 
| 2443   // Convert all characters to upper case, assuming that they will fit | 2447   // Convert all characters to upper case, assuming that they will fit | 
| 2444   // in the buffer | 2448   // in the buffer | 
| 2445   Access<StringInputBuffer> buffer(&string_input_buffer); | 2449   Access<StringInputBuffer> buffer(&string_input_buffer); | 
| 2446   buffer->Reset(s); | 2450   buffer->Reset(s); | 
| 2447   unibrow::uchar chars[unibrow::kMaxCaseConvertedSize]; | 2451   unibrow::uchar chars[Converter::kMaxWidth]; | 
| 2448   int i = 0; | 2452   int i = 0; | 
| 2449   // We can assume that the string is not empty | 2453   // We can assume that the string is not empty | 
| 2450   uc32 current = buffer->GetNext(); | 2454   uc32 current = buffer->GetNext(); | 
| 2451   while (i < length) { | 2455   while (i < length) { | 
| 2452     bool has_next = buffer->has_more(); | 2456     bool has_next = buffer->has_more(); | 
| 2453     uc32 next = has_next ? buffer->GetNext() : 0; | 2457     uc32 next = has_next ? buffer->GetNext() : 0; | 
| 2454     int char_length = mapping->get(current, next, chars); | 2458     int char_length = mapping->get(current, next, chars); | 
| 2455     if (char_length == 0) { | 2459     if (char_length == 0) { | 
| 2456       // The case conversion of this character is the character itself. | 2460       // The case conversion of this character is the character itself. | 
| 2457       result->Set(result_shape, i, current); | 2461       result->Set(result_shape, i, current); | 
| (...skipping 3414 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5872   } else { | 5876   } else { | 
| 5873     // Handle last resort GC and make sure to allow future allocations | 5877     // Handle last resort GC and make sure to allow future allocations | 
| 5874     // to grow the heap without causing GCs (if possible). | 5878     // to grow the heap without causing GCs (if possible). | 
| 5875     Counters::gc_last_resort_from_js.Increment(); | 5879     Counters::gc_last_resort_from_js.Increment(); | 
| 5876     Heap::CollectAllGarbage(); | 5880     Heap::CollectAllGarbage(); | 
| 5877   } | 5881   } | 
| 5878 } | 5882 } | 
| 5879 | 5883 | 
| 5880 | 5884 | 
| 5881 } }  // namespace v8::internal | 5885 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|