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

Side by Side Diff: src/handles.cc

Issue 4236: This is a fix of issue http://b/issue?id=1381845.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 12 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 | « no previous file | test/cctest/test-api.cc » ('j') | test/cctest/test-api.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 result = enum_fun(info); 325 result = enum_fun(info);
326 } 326 }
327 } 327 }
328 return result; 328 return result;
329 } 329 }
330 330
331 331
332 Handle<FixedArray> GetKeysInFixedArrayFor(Handle<JSObject> object) { 332 Handle<FixedArray> GetKeysInFixedArrayFor(Handle<JSObject> object) {
333 Handle<FixedArray> content = Factory::empty_fixed_array(); 333 Handle<FixedArray> content = Factory::empty_fixed_array();
334 334
335 // Check access rights if required.
336 if (object->IsAccessCheckNeeded() &&
337 !Top::MayNamedAccess(*object, Heap::undefined_value(), v8::ACCESS_KEYS)) {
338 Top::ReportFailedAccessCheck(*object, v8::ACCESS_KEYS);
339 return content;
340 }
341
342 JSObject* arguments_boilerplate = 335 JSObject* arguments_boilerplate =
343 Top::context()->global_context()->arguments_boilerplate(); 336 Top::context()->global_context()->arguments_boilerplate();
344 JSFunction* arguments_function = 337 JSFunction* arguments_function =
345 JSFunction::cast(arguments_boilerplate->map()->constructor()); 338 JSFunction::cast(arguments_boilerplate->map()->constructor());
346 bool allow_enumeration = (object->map()->constructor() != arguments_function); 339 bool allow_enumeration = (object->map()->constructor() != arguments_function);
347 340
348 // Only collect keys if access is permitted. 341 // Only collect keys if access is permitted.
349 if (allow_enumeration) { 342 if (allow_enumeration) {
350 for (Handle<Object> p = object; 343 for (Handle<Object> p = object;
351 *p != Heap::null_value(); 344 *p != Heap::null_value();
352 p = Handle<Object>(p->GetPrototype())) { 345 p = Handle<Object>(p->GetPrototype())) {
353 Handle<JSObject> current(JSObject::cast(*p)); 346 Handle<JSObject> current(JSObject::cast(*p));
354 347
348 // Check access rights if required.
349 if (current->IsAccessCheckNeeded() &&
350 !Top::MayNamedAccess(*current, Heap::undefined_value(),
351 v8::ACCESS_KEYS)) {
352 Top::ReportFailedAccessCheck(*current, v8::ACCESS_KEYS);
353 break;
354 }
355
355 // Compute the property keys. 356 // Compute the property keys.
356 content = UnionOfKeys(content, GetEnumPropertyKeys(current)); 357 content = UnionOfKeys(content, GetEnumPropertyKeys(current));
357 358
358 // Add the property keys from the interceptor. 359 // Add the property keys from the interceptor.
359 if (current->HasNamedInterceptor()) { 360 if (current->HasNamedInterceptor()) {
360 v8::Handle<v8::Array> result = 361 v8::Handle<v8::Array> result =
361 GetKeysForNamedInterceptor(object, current); 362 GetKeysForNamedInterceptor(object, current);
362 if (!result.IsEmpty()) 363 if (!result.IsEmpty())
363 content = AddKeysFromJSArray(content, v8::Utils::OpenHandle(*result)); 364 content = AddKeysFromJSArray(content, v8::Utils::OpenHandle(*result));
364 } 365 }
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 Handle<Context> security_context) { 543 Handle<Context> security_context) {
543 Handle<FixedArray> arr = Factory::NewFixedArray(4); 544 Handle<FixedArray> arr = Factory::NewFixedArray(4);
544 arr->set(0, Smi::FromInt(index)); 545 arr->set(0, Smi::FromInt(index));
545 arr->set(1, *compile_context); // Compile in this context 546 arr->set(1, *compile_context); // Compile in this context
546 arr->set(2, *function_context); // Set function context to this 547 arr->set(2, *function_context); // Set function context to this
547 arr->set(3, *security_context); // Receiver for call 548 arr->set(3, *security_context); // Receiver for call
548 fun->shared()->set_lazy_load_data(*arr); 549 fun->shared()->set_lazy_load_data(*arr);
549 } 550 }
550 551
551 } } // namespace v8::internal 552 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | test/cctest/test-api.cc » ('j') | test/cctest/test-api.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698