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

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

Issue 614083002: Use symbols instead of hidden properties for i18n markers. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 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 | « src/runtime/runtime.cc ('k') | test/mjsunit/test-hidden-string.js » ('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 5
6 #ifdef V8_I18N_SUPPORT 6 #ifdef V8_I18N_SUPPORT
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/arguments.h" 9 #include "src/arguments.h"
10 #include "src/i18n.h" 10 #include "src/i18n.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 RUNTIME_FUNCTION(Runtime_IsInitializedIntlObject) { 226 RUNTIME_FUNCTION(Runtime_IsInitializedIntlObject) {
227 HandleScope scope(isolate); 227 HandleScope scope(isolate);
228 228
229 DCHECK(args.length() == 1); 229 DCHECK(args.length() == 1);
230 230
231 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); 231 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0);
232 232
233 if (!input->IsJSObject()) return isolate->heap()->false_value(); 233 if (!input->IsJSObject()) return isolate->heap()->false_value();
234 Handle<JSObject> obj = Handle<JSObject>::cast(input); 234 Handle<JSObject> obj = Handle<JSObject>::cast(input);
235 235
236 Handle<String> marker = isolate->factory()->intl_initialized_marker_string(); 236 Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol();
237 Handle<Object> tag(obj->GetHiddenProperty(marker), isolate); 237 Handle<Object> tag = JSObject::GetDataProperty(obj, marker);
238 return isolate->heap()->ToBoolean(!tag->IsTheHole()); 238 return isolate->heap()->ToBoolean(!tag->IsUndefined());
239 } 239 }
240 240
241 241
242 RUNTIME_FUNCTION(Runtime_IsInitializedIntlObjectOfType) { 242 RUNTIME_FUNCTION(Runtime_IsInitializedIntlObjectOfType) {
243 HandleScope scope(isolate); 243 HandleScope scope(isolate);
244 244
245 DCHECK(args.length() == 2); 245 DCHECK(args.length() == 2);
246 246
247 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); 247 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0);
248 CONVERT_ARG_HANDLE_CHECKED(String, expected_type, 1); 248 CONVERT_ARG_HANDLE_CHECKED(String, expected_type, 1);
249 249
250 if (!input->IsJSObject()) return isolate->heap()->false_value(); 250 if (!input->IsJSObject()) return isolate->heap()->false_value();
251 Handle<JSObject> obj = Handle<JSObject>::cast(input); 251 Handle<JSObject> obj = Handle<JSObject>::cast(input);
252 252
253 Handle<String> marker = isolate->factory()->intl_initialized_marker_string(); 253 Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol();
254 Handle<Object> tag(obj->GetHiddenProperty(marker), isolate); 254 Handle<Object> tag = JSObject::GetDataProperty(obj, marker);
255 return isolate->heap()->ToBoolean(tag->IsString() && 255 return isolate->heap()->ToBoolean(tag->IsString() &&
256 String::cast(*tag)->Equals(*expected_type)); 256 String::cast(*tag)->Equals(*expected_type));
257 } 257 }
258 258
259 259
260 RUNTIME_FUNCTION(Runtime_MarkAsInitializedIntlObjectOfType) { 260 RUNTIME_FUNCTION(Runtime_MarkAsInitializedIntlObjectOfType) {
261 HandleScope scope(isolate); 261 HandleScope scope(isolate);
262 262
263 DCHECK(args.length() == 3); 263 DCHECK(args.length() == 3);
264 264
265 CONVERT_ARG_HANDLE_CHECKED(JSObject, input, 0); 265 CONVERT_ARG_HANDLE_CHECKED(JSObject, input, 0);
266 CONVERT_ARG_HANDLE_CHECKED(String, type, 1); 266 CONVERT_ARG_HANDLE_CHECKED(String, type, 1);
267 CONVERT_ARG_HANDLE_CHECKED(JSObject, impl, 2); 267 CONVERT_ARG_HANDLE_CHECKED(JSObject, impl, 2);
268 268
269 Handle<String> marker = isolate->factory()->intl_initialized_marker_string(); 269 Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol();
270 JSObject::SetHiddenProperty(input, marker, type); 270 JSObject::SetProperty(input, marker, type, STRICT).Assert();
271 271
272 marker = isolate->factory()->intl_impl_object_string(); 272 marker = isolate->factory()->intl_impl_object_symbol();
273 JSObject::SetHiddenProperty(input, marker, impl); 273 JSObject::SetProperty(input, marker, impl, STRICT).Assert();
274 274
275 return isolate->heap()->undefined_value(); 275 return isolate->heap()->undefined_value();
276 } 276 }
277 277
278 278
279 RUNTIME_FUNCTION(Runtime_GetImplFromInitializedIntlObject) { 279 RUNTIME_FUNCTION(Runtime_GetImplFromInitializedIntlObject) {
280 HandleScope scope(isolate); 280 HandleScope scope(isolate);
281 281
282 DCHECK(args.length() == 1); 282 DCHECK(args.length() == 1);
283 283
284 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); 284 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0);
285 285
286 if (!input->IsJSObject()) { 286 if (!input->IsJSObject()) {
287 Vector<Handle<Object> > arguments = HandleVector(&input, 1); 287 Vector<Handle<Object> > arguments = HandleVector(&input, 1);
288 THROW_NEW_ERROR_RETURN_FAILURE(isolate, 288 THROW_NEW_ERROR_RETURN_FAILURE(isolate,
289 NewTypeError("not_intl_object", arguments)); 289 NewTypeError("not_intl_object", arguments));
290 } 290 }
291 291
292 Handle<JSObject> obj = Handle<JSObject>::cast(input); 292 Handle<JSObject> obj = Handle<JSObject>::cast(input);
293 293
294 Handle<String> marker = isolate->factory()->intl_impl_object_string(); 294 Handle<Symbol> marker = isolate->factory()->intl_impl_object_symbol();
295 Handle<Object> impl(obj->GetHiddenProperty(marker), isolate); 295
296 Handle<Object> impl = JSObject::GetDataProperty(obj, marker);
296 if (impl->IsTheHole()) { 297 if (impl->IsTheHole()) {
297 Vector<Handle<Object> > arguments = HandleVector(&obj, 1); 298 Vector<Handle<Object> > arguments = HandleVector(&obj, 1);
298 THROW_NEW_ERROR_RETURN_FAILURE(isolate, 299 THROW_NEW_ERROR_RETURN_FAILURE(isolate,
299 NewTypeError("not_intl_object", arguments)); 300 NewTypeError("not_intl_object", arguments));
300 } 301 }
301 return *impl; 302 return *impl;
302 } 303 }
303 304
304 305
305 RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) { 306 RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) {
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 } else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) { 743 } else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) {
743 return *isolate->factory()->NewStringFromStaticChars("ideo"); 744 return *isolate->factory()->NewStringFromStaticChars("ideo");
744 } else { 745 } else {
745 return *isolate->factory()->NewStringFromStaticChars("unknown"); 746 return *isolate->factory()->NewStringFromStaticChars("unknown");
746 } 747 }
747 } 748 }
748 } 749 }
749 } // namespace v8::internal 750 } // namespace v8::internal
750 751
751 #endif // V8_I18N_SUPPORT 752 #endif // V8_I18N_SUPPORT
OLDNEW
« no previous file with comments | « src/runtime/runtime.cc ('k') | test/mjsunit/test-hidden-string.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698