| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 5168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5179 CONVERT_SMI_ARG_CHECKED(new_length, 1); | 5179 CONVERT_SMI_ARG_CHECKED(new_length, 1); |
| 5180 return *SeqString::Truncate(string, new_length); | 5180 return *SeqString::Truncate(string, new_length); |
| 5181 } | 5181 } |
| 5182 | 5182 |
| 5183 | 5183 |
| 5184 RUNTIME_FUNCTION(MaybeObject*, Runtime_URIEscape) { | 5184 RUNTIME_FUNCTION(MaybeObject*, Runtime_URIEscape) { |
| 5185 HandleScope scope(isolate); | 5185 HandleScope scope(isolate); |
| 5186 ASSERT(args.length() == 1); | 5186 ASSERT(args.length() == 1); |
| 5187 CONVERT_ARG_HANDLE_CHECKED(String, source, 0); | 5187 CONVERT_ARG_HANDLE_CHECKED(String, source, 0); |
| 5188 Handle<String> string = FlattenGetString(source); | 5188 Handle<String> string = FlattenGetString(source); |
| 5189 String::FlatContent content = string->GetFlatContent(); | 5189 ASSERT(string->IsFlat()); |
| 5190 ASSERT(content.IsFlat()); | 5190 Handle<String> result = string->IsOneByteRepresentationUnderneath() |
| 5191 Handle<String> result = | 5191 ? URIEscape::Escape<uint8_t>(isolate, source) |
| 5192 content.IsAscii() ? URIEscape::Escape<uint8_t>(isolate, source) | 5192 : URIEscape::Escape<uc16>(isolate, source); |
| 5193 : URIEscape::Escape<uc16>(isolate, source); | |
| 5194 if (result.is_null()) return Failure::OutOfMemoryException(0x12); | 5193 if (result.is_null()) return Failure::OutOfMemoryException(0x12); |
| 5195 return *result; | 5194 return *result; |
| 5196 } | 5195 } |
| 5197 | 5196 |
| 5198 | 5197 |
| 5199 RUNTIME_FUNCTION(MaybeObject*, Runtime_URIUnescape) { | 5198 RUNTIME_FUNCTION(MaybeObject*, Runtime_URIUnescape) { |
| 5200 HandleScope scope(isolate); | 5199 HandleScope scope(isolate); |
| 5201 ASSERT(args.length() == 1); | 5200 ASSERT(args.length() == 1); |
| 5202 CONVERT_ARG_HANDLE_CHECKED(String, source, 0); | 5201 CONVERT_ARG_HANDLE_CHECKED(String, source, 0); |
| 5203 Handle<String> string = FlattenGetString(source); | 5202 Handle<String> string = FlattenGetString(source); |
| 5204 String::FlatContent content = string->GetFlatContent(); | 5203 ASSERT(string->IsFlat()); |
| 5205 ASSERT(content.IsFlat()); | 5204 return string->IsOneByteRepresentationUnderneath() |
| 5206 return content.IsAscii() ? *URIUnescape::Unescape<uint8_t>(isolate, source) | 5205 ? *URIUnescape::Unescape<uint8_t>(isolate, source) |
| 5207 : *URIUnescape::Unescape<uc16>(isolate, source); | 5206 : *URIUnescape::Unescape<uc16>(isolate, source); |
| 5208 } | 5207 } |
| 5209 | 5208 |
| 5210 | 5209 |
| 5211 RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONString) { | 5210 RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONString) { |
| 5212 HandleScope scope(isolate); | 5211 HandleScope scope(isolate); |
| 5213 CONVERT_ARG_HANDLE_CHECKED(String, string, 0); | 5212 CONVERT_ARG_HANDLE_CHECKED(String, string, 0); |
| 5214 ASSERT(args.length() == 1); | 5213 ASSERT(args.length() == 1); |
| 5215 return BasicJsonStringifier::StringifyString(isolate, string); | 5214 return BasicJsonStringifier::StringifyString(isolate, string); |
| 5216 } | 5215 } |
| 5217 | 5216 |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5726 Handle<FixedArray> elements; | 5725 Handle<FixedArray> elements; |
| 5727 int position = 0; | 5726 int position = 0; |
| 5728 if (s->IsFlat() && s->IsOneByteRepresentation()) { | 5727 if (s->IsFlat() && s->IsOneByteRepresentation()) { |
| 5729 // Try using cached chars where possible. | 5728 // Try using cached chars where possible. |
| 5730 Object* obj; | 5729 Object* obj; |
| 5731 { MaybeObject* maybe_obj = | 5730 { MaybeObject* maybe_obj = |
| 5732 isolate->heap()->AllocateUninitializedFixedArray(length); | 5731 isolate->heap()->AllocateUninitializedFixedArray(length); |
| 5733 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 5732 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 5734 } | 5733 } |
| 5735 elements = Handle<FixedArray>(FixedArray::cast(obj), isolate); | 5734 elements = Handle<FixedArray>(FixedArray::cast(obj), isolate); |
| 5735 AssertNoAllocation no_gc; |
| 5736 String::FlatContent content = s->GetFlatContent(); | 5736 String::FlatContent content = s->GetFlatContent(); |
| 5737 if (content.IsAscii()) { | 5737 if (content.IsAscii()) { |
| 5738 Vector<const uint8_t> chars = content.ToOneByteVector(); | 5738 Vector<const uint8_t> chars = content.ToOneByteVector(); |
| 5739 // Note, this will initialize all elements (not only the prefix) | 5739 // Note, this will initialize all elements (not only the prefix) |
| 5740 // to prevent GC from seeing partially initialized array. | 5740 // to prevent GC from seeing partially initialized array. |
| 5741 position = CopyCachedAsciiCharsToArray(isolate->heap(), | 5741 position = CopyCachedAsciiCharsToArray(isolate->heap(), |
| 5742 chars.start(), | 5742 chars.start(), |
| 5743 *elements, | 5743 *elements, |
| 5744 length); | 5744 length); |
| 5745 } else { | 5745 } else { |
| (...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6581 ASSERT(y->IsFlat()); | 6581 ASSERT(y->IsFlat()); |
| 6582 Object* equal_prefix_result = Smi::FromInt(EQUAL); | 6582 Object* equal_prefix_result = Smi::FromInt(EQUAL); |
| 6583 int prefix_length = x->length(); | 6583 int prefix_length = x->length(); |
| 6584 if (y->length() < prefix_length) { | 6584 if (y->length() < prefix_length) { |
| 6585 prefix_length = y->length(); | 6585 prefix_length = y->length(); |
| 6586 equal_prefix_result = Smi::FromInt(GREATER); | 6586 equal_prefix_result = Smi::FromInt(GREATER); |
| 6587 } else if (y->length() > prefix_length) { | 6587 } else if (y->length() > prefix_length) { |
| 6588 equal_prefix_result = Smi::FromInt(LESS); | 6588 equal_prefix_result = Smi::FromInt(LESS); |
| 6589 } | 6589 } |
| 6590 int r; | 6590 int r; |
| 6591 AssertNoAllocation no_gc; |
| 6591 String::FlatContent x_content = x->GetFlatContent(); | 6592 String::FlatContent x_content = x->GetFlatContent(); |
| 6592 String::FlatContent y_content = y->GetFlatContent(); | 6593 String::FlatContent y_content = y->GetFlatContent(); |
| 6593 if (x_content.IsAscii()) { | 6594 if (x_content.IsAscii()) { |
| 6594 Vector<const uint8_t> x_chars = x_content.ToOneByteVector(); | 6595 Vector<const uint8_t> x_chars = x_content.ToOneByteVector(); |
| 6595 if (y_content.IsAscii()) { | 6596 if (y_content.IsAscii()) { |
| 6596 Vector<const uint8_t> y_chars = y_content.ToOneByteVector(); | 6597 Vector<const uint8_t> y_chars = y_content.ToOneByteVector(); |
| 6597 r = CompareChars(x_chars.start(), y_chars.start(), prefix_length); | 6598 r = CompareChars(x_chars.start(), y_chars.start(), prefix_length); |
| 6598 } else { | 6599 } else { |
| 6599 Vector<const uc16> y_chars = y_content.ToUC16Vector(); | 6600 Vector<const uc16> y_chars = y_content.ToUC16Vector(); |
| 6600 r = CompareChars(x_chars.start(), y_chars.start(), prefix_length); | 6601 r = CompareChars(x_chars.start(), y_chars.start(), prefix_length); |
| (...skipping 6227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12828 return *result; | 12829 return *result; |
| 12829 } | 12830 } |
| 12830 #endif | 12831 #endif |
| 12831 | 12832 |
| 12832 | 12833 |
| 12833 RUNTIME_FUNCTION(MaybeObject*, Runtime_Log) { | 12834 RUNTIME_FUNCTION(MaybeObject*, Runtime_Log) { |
| 12834 NoHandleAllocation ha(isolate); | 12835 NoHandleAllocation ha(isolate); |
| 12835 ASSERT(args.length() == 2); | 12836 ASSERT(args.length() == 2); |
| 12836 CONVERT_ARG_CHECKED(String, format, 0); | 12837 CONVERT_ARG_CHECKED(String, format, 0); |
| 12837 CONVERT_ARG_CHECKED(JSArray, elms, 1); | 12838 CONVERT_ARG_CHECKED(JSArray, elms, 1); |
| 12839 AssertNoAllocation no_gc; |
| 12838 String::FlatContent format_content = format->GetFlatContent(); | 12840 String::FlatContent format_content = format->GetFlatContent(); |
| 12839 RUNTIME_ASSERT(format_content.IsAscii()); | 12841 RUNTIME_ASSERT(format_content.IsAscii()); |
| 12840 Vector<const uint8_t> chars = format_content.ToOneByteVector(); | 12842 Vector<const uint8_t> chars = format_content.ToOneByteVector(); |
| 12841 isolate->logger()->LogRuntime(Vector<const char>::cast(chars), elms); | 12843 isolate->logger()->LogRuntime(Vector<const char>::cast(chars), elms); |
| 12842 return isolate->heap()->undefined_value(); | 12844 return isolate->heap()->undefined_value(); |
| 12843 } | 12845 } |
| 12844 | 12846 |
| 12845 | 12847 |
| 12846 RUNTIME_FUNCTION(MaybeObject*, Runtime_IS_VAR) { | 12848 RUNTIME_FUNCTION(MaybeObject*, Runtime_IS_VAR) { |
| 12847 UNREACHABLE(); // implemented as macro in the parser | 12849 UNREACHABLE(); // implemented as macro in the parser |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13051 // Handle last resort GC and make sure to allow future allocations | 13053 // Handle last resort GC and make sure to allow future allocations |
| 13052 // to grow the heap without causing GCs (if possible). | 13054 // to grow the heap without causing GCs (if possible). |
| 13053 isolate->counters()->gc_last_resort_from_js()->Increment(); | 13055 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 13054 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 13056 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
| 13055 "Runtime::PerformGC"); | 13057 "Runtime::PerformGC"); |
| 13056 } | 13058 } |
| 13057 } | 13059 } |
| 13058 | 13060 |
| 13059 | 13061 |
| 13060 } } // namespace v8::internal | 13062 } } // namespace v8::internal |
| OLD | NEW |