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

Side by Side Diff: src/runtime.cc

Issue 14425011: api: Object::CachedProperty Base URL: gh:v8/v8.git@master
Patch Set: globalize reference Created 7 years, 7 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
« no previous file with comments | « src/runtime.h ('k') | test/cctest/test-api.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 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 4241 matching lines...) Expand 10 before | Expand all | Expand 10 after
4252 MaybeObject* Runtime::GetObjectPropertyOrFail( 4252 MaybeObject* Runtime::GetObjectPropertyOrFail(
4253 Isolate* isolate, 4253 Isolate* isolate,
4254 Handle<Object> object, 4254 Handle<Object> object,
4255 Handle<Object> key) { 4255 Handle<Object> key) {
4256 CALL_HEAP_FUNCTION_PASS_EXCEPTION(isolate, 4256 CALL_HEAP_FUNCTION_PASS_EXCEPTION(isolate,
4257 GetObjectProperty(isolate, object, key)); 4257 GetObjectProperty(isolate, object, key));
4258 } 4258 }
4259 4259
4260 MaybeObject* Runtime::GetObjectProperty(Isolate* isolate, 4260 MaybeObject* Runtime::GetObjectProperty(Isolate* isolate,
4261 Handle<Object> object, 4261 Handle<Object> object,
4262 Handle<Object> key) { 4262 Handle<Object> key,
4263 LookupCache* cache) {
4263 HandleScope scope(isolate); 4264 HandleScope scope(isolate);
4264 4265
4265 if (object->IsUndefined() || object->IsNull()) { 4266 if (object->IsUndefined() || object->IsNull()) {
4266 Handle<Object> args[2] = { key, object }; 4267 Handle<Object> args[2] = { key, object };
4267 Handle<Object> error = 4268 Handle<Object> error =
4268 isolate->factory()->NewTypeError("non_object_property_load", 4269 isolate->factory()->NewTypeError("non_object_property_load",
4269 HandleVector(args, 2)); 4270 HandleVector(args, 2));
4270 return isolate->Throw(*error); 4271 return isolate->Throw(*error);
4271 } 4272 }
4272 4273
(...skipping 12 matching lines...) Expand all
4285 Handle<Object> converted = 4286 Handle<Object> converted =
4286 Execution::ToString(key, &has_pending_exception); 4287 Execution::ToString(key, &has_pending_exception);
4287 if (has_pending_exception) return Failure::Exception(); 4288 if (has_pending_exception) return Failure::Exception();
4288 name = Handle<Name>::cast(converted); 4289 name = Handle<Name>::cast(converted);
4289 } 4290 }
4290 4291
4291 // Check if the name is trivially convertible to an index and get 4292 // Check if the name is trivially convertible to an index and get
4292 // the element if so. 4293 // the element if so.
4293 if (name->AsArrayIndex(&index)) { 4294 if (name->AsArrayIndex(&index)) {
4294 return GetElementOrCharAt(isolate, object, index); 4295 return GetElementOrCharAt(isolate, object, index);
4296 } else if (cache == NULL) {
4297 return object->GetProperty(*name);
4295 } else { 4298 } else {
4296 return object->GetProperty(*name); 4299 return cache->GetProperty(object, name);
4297 } 4300 }
4298 } 4301 }
4299 4302
4300 4303
4301 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetProperty) { 4304 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetProperty) {
4302 NoHandleAllocation ha(isolate); 4305 NoHandleAllocation ha(isolate);
4303 ASSERT(args.length() == 2); 4306 ASSERT(args.length() == 2);
4304 4307
4305 Handle<Object> object = args.at<Object>(0); 4308 Handle<Object> object = args.at<Object>(0);
4306 Handle<Object> key = args.at<Object>(1); 4309 Handle<Object> key = args.at<Object>(1);
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
4550 CALL_HEAP_FUNCTION_PASS_EXCEPTION(isolate, 4553 CALL_HEAP_FUNCTION_PASS_EXCEPTION(isolate,
4551 SetObjectProperty(isolate, object, key, value, attr, strict_mode)); 4554 SetObjectProperty(isolate, object, key, value, attr, strict_mode));
4552 } 4555 }
4553 4556
4554 4557
4555 MaybeObject* Runtime::SetObjectProperty(Isolate* isolate, 4558 MaybeObject* Runtime::SetObjectProperty(Isolate* isolate,
4556 Handle<Object> object, 4559 Handle<Object> object,
4557 Handle<Object> key, 4560 Handle<Object> key,
4558 Handle<Object> value, 4561 Handle<Object> value,
4559 PropertyAttributes attr, 4562 PropertyAttributes attr,
4560 StrictModeFlag strict_mode) { 4563 StrictModeFlag strict_mode,
4564 LookupCache* cache) {
4561 SetPropertyMode set_mode = attr == NONE ? SET_PROPERTY : DEFINE_PROPERTY; 4565 SetPropertyMode set_mode = attr == NONE ? SET_PROPERTY : DEFINE_PROPERTY;
4562 HandleScope scope(isolate); 4566 HandleScope scope(isolate);
4563 4567
4564 if (object->IsUndefined() || object->IsNull()) { 4568 if (object->IsUndefined() || object->IsNull()) {
4565 Handle<Object> args[2] = { key, object }; 4569 Handle<Object> args[2] = { key, object };
4566 Handle<Object> error = 4570 Handle<Object> error =
4567 isolate->factory()->NewTypeError("non_object_property_store", 4571 isolate->factory()->NewTypeError("non_object_property_store",
4568 HandleVector(args, 2)); 4572 HandleVector(args, 2));
4569 return isolate->Throw(*error); 4573 return isolate->Throw(*error);
4570 } 4574 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
4606 } 4610 }
4607 4611
4608 if (key->IsName()) { 4612 if (key->IsName()) {
4609 Handle<Object> result; 4613 Handle<Object> result;
4610 Handle<Name> name = Handle<Name>::cast(key); 4614 Handle<Name> name = Handle<Name>::cast(key);
4611 if (name->AsArrayIndex(&index)) { 4615 if (name->AsArrayIndex(&index)) {
4612 result = JSObject::SetElement( 4616 result = JSObject::SetElement(
4613 js_object, index, value, attr, strict_mode, set_mode); 4617 js_object, index, value, attr, strict_mode, set_mode);
4614 } else { 4618 } else {
4615 if (name->IsString()) Handle<String>::cast(name)->TryFlatten(); 4619 if (name->IsString()) Handle<String>::cast(name)->TryFlatten();
4616 result = JSReceiver::SetProperty( 4620 if (cache == NULL || attr != NONE || strict_mode != kNonStrictMode) {
4617 js_object, name, value, attr, strict_mode); 4621 result = JSReceiver::SetProperty(
4622 js_object, name, value, attr, strict_mode);
4623 } else {
4624 return cache->SetProperty(js_object, name, value);
4625 }
4618 } 4626 }
4619 if (result.is_null()) return Failure::Exception(); 4627 if (result.is_null()) return Failure::Exception();
4620 return *value; 4628 return *value;
4621 } 4629 }
4622 4630
4623 // Call-back into JavaScript to convert the key to a string. 4631 // Call-back into JavaScript to convert the key to a string.
4624 bool has_pending_exception = false; 4632 bool has_pending_exception = false;
4625 Handle<Object> converted = Execution::ToString(key, &has_pending_exception); 4633 Handle<Object> converted = Execution::ToString(key, &has_pending_exception);
4626 if (has_pending_exception) return Failure::Exception(); 4634 if (has_pending_exception) return Failure::Exception();
4627 Handle<String> name = Handle<String>::cast(converted); 4635 Handle<String> name = Handle<String>::cast(converted);
(...skipping 8741 matching lines...) Expand 10 before | Expand all | Expand 10 after
13369 // Handle last resort GC and make sure to allow future allocations 13377 // Handle last resort GC and make sure to allow future allocations
13370 // to grow the heap without causing GCs (if possible). 13378 // to grow the heap without causing GCs (if possible).
13371 isolate->counters()->gc_last_resort_from_js()->Increment(); 13379 isolate->counters()->gc_last_resort_from_js()->Increment();
13372 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, 13380 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags,
13373 "Runtime::PerformGC"); 13381 "Runtime::PerformGC");
13374 } 13382 }
13375 } 13383 }
13376 13384
13377 13385
13378 } } // namespace v8::internal 13386 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/runtime.h ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698