| Index: src/runtime.cc
|
| ===================================================================
|
| --- src/runtime.cc (revision 782)
|
| +++ src/runtime.cc (working copy)
|
| @@ -3961,6 +3961,26 @@
|
| }
|
|
|
|
|
| +static Object* Runtime_EvalReceiver(Arguments args) {
|
| + ASSERT(args.length() == 1);
|
| + StackFrameLocator locator;
|
| + JavaScriptFrame* frame = locator.FindJavaScriptFrame(1);
|
| + // Fetch the caller context from the frame.
|
| + Context* caller = Context::cast(frame->context());
|
| +
|
| + // Check for eval() invocations that cross environments. Use the
|
| + // top frames receiver if evaluating in current environment.
|
| + Context* global_context = Top::context()->global()->global_context();
|
| + if (caller->global_context() == global_context) {
|
| + return frame->receiver();
|
| + }
|
| +
|
| + // Otherwise use the given argument (the global object of the
|
| + // receiving context).
|
| + return args[0];
|
| +}
|
| +
|
| +
|
| static Object* Runtime_GlobalReceiver(Arguments args) {
|
| ASSERT(args.length() == 1);
|
| Object* global = args[0];
|
|
|