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

Side by Side Diff: vm/dart_api_impl.cc

Issue 11969029: Allow externalization of canonical strings also. Only restrict canonical strings (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | vm/dart_api_impl_test.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "include/dart_api.h" 5 #include "include/dart_api.h"
6 6
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/class_finalizer.h" 8 #include "vm/class_finalizer.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/dart.h" 10 #include "vm/dart.h"
(...skipping 1769 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 if (array == NULL) { 1780 if (array == NULL) {
1781 RETURN_NULL_ERROR(array); 1781 RETURN_NULL_ERROR(array);
1782 } 1782 }
1783 intptr_t str_size = (str_obj.Length() * str_obj.CharSize()); 1783 intptr_t str_size = (str_obj.Length() * str_obj.CharSize());
1784 if ((length < str_size) || (length > String::kMaxElements)) { 1784 if ((length < str_size) || (length > String::kMaxElements)) {
1785 return Api::NewError("Dart_MakeExternalString " 1785 return Api::NewError("Dart_MakeExternalString "
1786 "expects argument length to be in the range" 1786 "expects argument length to be in the range"
1787 "[%"Pd"..%"Pd"].", 1787 "[%"Pd"..%"Pd"].",
1788 str_size, String::kMaxElements); 1788 str_size, String::kMaxElements);
1789 } 1789 }
1790 if (str_obj.IsCanonical()) { 1790 if (str_obj.InVMHeap()) {
1791 // Since the string object is read only we do not externalize 1791 // Since the string object is read only we do not externalize
1792 // the string but instead copy the contents of the string into the 1792 // the string but instead copy the contents of the string into the
1793 // specified buffer and return a Null object. 1793 // specified buffer and return a Null object.
1794 // This ensures that the embedder does not have to call again 1794 // This ensures that the embedder does not have to call again
1795 // to get at the contents. 1795 // to get at the contents.
1796 intptr_t copy_len = str_obj.Length(); 1796 intptr_t copy_len = str_obj.Length();
1797 if (str_obj.IsOneByteString()) { 1797 if (str_obj.IsOneByteString()) {
1798 ASSERT(length >= copy_len); 1798 ASSERT(length >= copy_len);
1799 uint8_t* latin1_array = reinterpret_cast<uint8_t*>(array); 1799 uint8_t* latin1_array = reinterpret_cast<uint8_t*>(array);
1800 for (intptr_t i = 0; i < copy_len; i++) { 1800 for (intptr_t i = 0; i < copy_len; i++) {
(...skipping 2722 matching lines...) Expand 10 before | Expand all | Expand 10 after
4523 } 4523 }
4524 { 4524 {
4525 NoGCScope no_gc; 4525 NoGCScope no_gc;
4526 RawObject* raw_obj = obj.raw(); 4526 RawObject* raw_obj = obj.raw();
4527 isolate->heap()->SetPeer(raw_obj, peer); 4527 isolate->heap()->SetPeer(raw_obj, peer);
4528 } 4528 }
4529 return Api::Success(isolate); 4529 return Api::Success(isolate);
4530 } 4530 }
4531 4531
4532 } // namespace dart 4532 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698