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

Side by Side Diff: src/objects.cc

Issue 8133020: Simplify calling generated code from the runtime. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 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
« src/ic.cc ('K') | « src/messages.cc ('k') | src/runtime.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 1912 matching lines...) Expand 10 before | Expand all | Expand 10 after
1923 #ifdef ENABLE_DEBUGGER_SUPPORT 1923 #ifdef ENABLE_DEBUGGER_SUPPORT
1924 Debug* debug = isolate->debug(); 1924 Debug* debug = isolate->debug();
1925 // Handle stepping into a setter if step into is active. 1925 // Handle stepping into a setter if step into is active.
1926 // TODO(rossberg): should this apply to getters that are function proxies? 1926 // TODO(rossberg): should this apply to getters that are function proxies?
1927 if (debug->StepInActive() && fun->IsJSFunction()) { 1927 if (debug->StepInActive() && fun->IsJSFunction()) {
1928 debug->HandleStepIn( 1928 debug->HandleStepIn(
1929 Handle<JSFunction>::cast(fun), Handle<Object>::null(), 0, false); 1929 Handle<JSFunction>::cast(fun), Handle<Object>::null(), 0, false);
1930 } 1930 }
1931 #endif 1931 #endif
1932 bool has_pending_exception; 1932 bool has_pending_exception;
1933 Object** argv[] = { value_handle.location() }; 1933 Handle<Object> argv[] = { value_handle };
1934 Execution::Call(fun, self, 1, argv, &has_pending_exception); 1934 Execution::Call(fun, self, ARRAY_SIZE(argv), argv, &has_pending_exception);
1935 // Check for pending exception and return the result. 1935 // Check for pending exception and return the result.
1936 if (has_pending_exception) return Failure::Exception(); 1936 if (has_pending_exception) return Failure::Exception();
1937 return *value_handle; 1937 return *value_handle;
1938 } 1938 }
1939 1939
1940 1940
1941 void JSObject::LookupCallbackSetterInPrototypes(String* name, 1941 void JSObject::LookupCallbackSetterInPrototypes(String* name,
1942 LookupResult* result) { 1942 LookupResult* result) {
1943 Heap* heap = GetHeap(); 1943 Heap* heap = GetHeap();
1944 for (Object* pt = GetPrototype(); 1944 for (Object* pt = GetPrototype();
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
2449 Handle<Object> args[] = { name }; 2449 Handle<Object> args[] = { name };
2450 Handle<Object> result = proxy->CallTrap( 2450 Handle<Object> result = proxy->CallTrap(
2451 "getOwnPropertyDescriptor", Handle<Object>(), ARRAY_SIZE(args), args); 2451 "getOwnPropertyDescriptor", Handle<Object>(), ARRAY_SIZE(args), args);
2452 if (isolate->has_pending_exception()) return Failure::Exception(); 2452 if (isolate->has_pending_exception()) return Failure::Exception();
2453 2453
2454 if (!result->IsUndefined()) { 2454 if (!result->IsUndefined()) {
2455 // The proxy handler cares about this property. 2455 // The proxy handler cares about this property.
2456 // Check whether it is virtualized as an accessor. 2456 // Check whether it is virtualized as an accessor.
2457 // Emulate [[GetProperty]] semantics for proxies. 2457 // Emulate [[GetProperty]] semantics for proxies.
2458 bool has_pending_exception; 2458 bool has_pending_exception;
2459 Object** argv[] = { result.location() }; 2459 Handle<Object> argv[] = { result };
2460 Handle<Object> desc = 2460 Handle<Object> desc =
2461 Execution::Call(isolate->to_complete_property_descriptor(), result, 2461 Execution::Call(isolate->to_complete_property_descriptor(), result,
2462 ARRAY_SIZE(argv), argv, &has_pending_exception); 2462 ARRAY_SIZE(argv), argv, &has_pending_exception);
2463 if (has_pending_exception) return Failure::Exception(); 2463 if (has_pending_exception) return Failure::Exception();
2464 2464
2465 Handle<String> conf_name = 2465 Handle<String> conf_name =
2466 isolate->factory()->LookupAsciiSymbol("configurable_"); 2466 isolate->factory()->LookupAsciiSymbol("configurable_");
2467 Handle<Object> configurable(v8::internal::GetProperty(desc, conf_name)); 2467 Handle<Object> configurable(v8::internal::GetProperty(desc, conf_name));
2468 ASSERT(!isolate->has_pending_exception()); 2468 ASSERT(!isolate->has_pending_exception());
2469 if (configurable->IsFalse()) { 2469 if (configurable->IsFalse()) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2551 Handle<Object> name(name_raw); 2551 Handle<Object> name(name_raw);
2552 2552
2553 Handle<Object> args[] = { name }; 2553 Handle<Object> args[] = { name };
2554 Handle<Object> result = CallTrap( 2554 Handle<Object> result = CallTrap(
2555 "getPropertyDescriptor", Handle<Object>(), ARRAY_SIZE(args), args); 2555 "getPropertyDescriptor", Handle<Object>(), ARRAY_SIZE(args), args);
2556 if (isolate->has_pending_exception()) return NONE; 2556 if (isolate->has_pending_exception()) return NONE;
2557 2557
2558 if (result->IsUndefined()) return ABSENT; 2558 if (result->IsUndefined()) return ABSENT;
2559 2559
2560 bool has_pending_exception; 2560 bool has_pending_exception;
2561 Object** argv[] = { result.location() }; 2561 Handle<Object> argv[] = { result };
2562 Handle<Object> desc = 2562 Handle<Object> desc =
2563 Execution::Call(isolate->to_complete_property_descriptor(), result, 2563 Execution::Call(isolate->to_complete_property_descriptor(), result,
2564 ARRAY_SIZE(argv), argv, &has_pending_exception); 2564 ARRAY_SIZE(argv), argv, &has_pending_exception);
2565 if (has_pending_exception) return NONE; 2565 if (has_pending_exception) return NONE;
2566 2566
2567 // Convert result to PropertyAttributes. 2567 // Convert result to PropertyAttributes.
2568 Handle<String> enum_n = isolate->factory()->LookupAsciiSymbol("enumerable"); 2568 Handle<String> enum_n = isolate->factory()->LookupAsciiSymbol("enumerable");
2569 Handle<Object> enumerable(v8::internal::GetProperty(desc, enum_n)); 2569 Handle<Object> enumerable(v8::internal::GetProperty(desc, enum_n));
2570 if (isolate->has_pending_exception()) return NONE; 2570 if (isolate->has_pending_exception()) return NONE;
2571 Handle<String> conf_n = isolate->factory()->LookupAsciiSymbol("configurable"); 2571 Handle<String> conf_n = isolate->factory()->LookupAsciiSymbol("configurable");
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2619 2619
2620 // Inherit identity, if it was present. 2620 // Inherit identity, if it was present.
2621 Object* hash; 2621 Object* hash;
2622 if (maybe_hash->To<Object>(&hash) && hash->IsSmi()) { 2622 if (maybe_hash->To<Object>(&hash) && hash->IsSmi()) {
2623 Handle<JSObject> new_self(JSObject::cast(*self)); 2623 Handle<JSObject> new_self(JSObject::cast(*self));
2624 isolate->factory()->SetIdentityHash(new_self, hash); 2624 isolate->factory()->SetIdentityHash(new_self, hash);
2625 } 2625 }
2626 } 2626 }
2627 2627
2628 2628
2629 MUST_USE_RESULT Handle<Object> JSProxy::CallTrap( 2629 MUST_USE_RESULT Handle<Object> JSProxy::CallTrap(const char* name,
2630 const char* name, 2630 Handle<Object> derived,
2631 Handle<Object> derived, 2631 int argc,
2632 int argc, 2632 Handle<Object> argv[]) {
2633 Handle<Object> args[]) {
2634 Isolate* isolate = GetIsolate(); 2633 Isolate* isolate = GetIsolate();
2635 Handle<Object> handler(this->handler()); 2634 Handle<Object> handler(this->handler());
2636 2635
2637 Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol(name); 2636 Handle<String> trap_name = isolate->factory()->LookupAsciiSymbol(name);
2638 Handle<Object> trap(v8::internal::GetProperty(handler, trap_name)); 2637 Handle<Object> trap(v8::internal::GetProperty(handler, trap_name));
2639 if (isolate->has_pending_exception()) return trap; 2638 if (isolate->has_pending_exception()) return trap;
2640 2639
2641 if (trap->IsUndefined()) { 2640 if (trap->IsUndefined()) {
2642 if (derived.is_null()) { 2641 if (derived.is_null()) {
2643 Handle<Object> args[] = { handler, trap_name }; 2642 Handle<Object> args[] = { handler, trap_name };
2644 Handle<Object> error = isolate->factory()->NewTypeError( 2643 Handle<Object> error = isolate->factory()->NewTypeError(
2645 "handler_trap_missing", HandleVector(args, ARRAY_SIZE(args))); 2644 "handler_trap_missing", HandleVector(args, ARRAY_SIZE(args)));
2646 isolate->Throw(*error); 2645 isolate->Throw(*error);
2647 return Handle<Object>(); 2646 return Handle<Object>();
2648 } 2647 }
2649 trap = Handle<Object>(derived); 2648 trap = Handle<Object>(derived);
2650 } 2649 }
2651 2650
2652 Object*** argv = reinterpret_cast<Object***>(args);
2653 bool threw; 2651 bool threw;
2654 return Execution::Call(trap, handler, argc, argv, &threw); 2652 return Execution::Call(trap, handler, argc, argv, &threw);
2655 } 2653 }
2656 2654
2657 2655
2658 MaybeObject* JSObject::SetPropertyForResult(LookupResult* result, 2656 MaybeObject* JSObject::SetPropertyForResult(LookupResult* result,
2659 String* name, 2657 String* name,
2660 Object* value, 2658 Object* value,
2661 PropertyAttributes attributes, 2659 PropertyAttributes attributes,
2662 StrictModeFlag strict_mode) { 2660 StrictModeFlag strict_mode) {
(...skipping 9509 matching lines...) Expand 10 before | Expand all | Expand 10 after
12172 if (break_point_objects()->IsUndefined()) return 0; 12170 if (break_point_objects()->IsUndefined()) return 0;
12173 // Single break point. 12171 // Single break point.
12174 if (!break_point_objects()->IsFixedArray()) return 1; 12172 if (!break_point_objects()->IsFixedArray()) return 1;
12175 // Multiple break points. 12173 // Multiple break points.
12176 return FixedArray::cast(break_point_objects())->length(); 12174 return FixedArray::cast(break_point_objects())->length();
12177 } 12175 }
12178 #endif 12176 #endif
12179 12177
12180 12178
12181 } } // namespace v8::internal 12179 } } // namespace v8::internal
OLDNEW
« src/ic.cc ('K') | « src/messages.cc ('k') | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698