<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[210149] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/210149">210149</a></dd>
<dt>Author</dt> <dd>utatane.tea@gmail.com</dd>
<dt>Date</dt> <dd>2016-12-25 22:35:07 -0800 (Sun, 25 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Propagate the source origin as much as possible
https://bugs.webkit.org/show_bug.cgi?id=166348

Reviewed by Darin Adler.

JSTests:

* stress/source-origin.js: Added.
(shouldBe):

Source/JavaScriptCore:

This patch introduces CallFrame::callerSourceOrigin, SourceOrigin class
and SourceProvider::m_sourceOrigin. CallFrame::callerSourceOrigin returns
an appropriate SourceOrigin if possible. If we cannot find the appropriate
one, we just return null SourceOrigin.

This paves the way for implementing the module dynamic-import[1].
When the import operator is evaluated, it will resolve the module
specifier with this propagated source origin of the caller function.

To support import operator inside the dynamic code generation
functions (like `eval`, `new Function`, indirect call to `eval`),
we need to propagate the caller's source origin to the generated
source code.

We do not use sourceURL for that purpose. This is because we
would like to keep sourceURL for `eval` / `new Function` null.
This sourceURL will be used for the stack dump for errors with line/column
numbers. Dumping the caller's sourceURL with line/column numbers are
meaningless. So we would like to keep it null while we would like
to propagate SourceOrigin for dynamic imports.

[1]: https://github.com/tc39/proposal-dynamic-import

* API/JSBase.cpp:
(JSEvaluateScript):
(JSCheckScriptSyntax):
* API/JSObjectRef.cpp:
(JSObjectMakeFunction):
* API/JSScriptRef.cpp:
(OpaqueJSScript::create):
(OpaqueJSScript::vm):
(OpaqueJSScript::OpaqueJSScript):
(parseScript):
* JavaScriptCore.xcodeproj/project.pbxproj:
* Scripts/builtins/builtins_templates.py:
* Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
* Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
* Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
* Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
* Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
* Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
* builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::BuiltinExecutables):
(JSC::BuiltinExecutables::createDefaultConstructor):
* debugger/DebuggerCallFrame.cpp:
(JSC::DebuggerCallFrame::evaluateWithScopeExtension):
* inspector/InjectedScriptManager.cpp:
(Inspector::InjectedScriptManager::createInjectedScript):
* inspector/JSInjectedScriptHost.cpp:
(Inspector::JSInjectedScriptHost::evaluateWithScopeExtension):
* inspector/agents/InspectorRuntimeAgent.cpp:
(Inspector::InspectorRuntimeAgent::parse):
* interpreter/CallFrame.cpp:
(JSC::CallFrame::callerSourceOrigin):
* interpreter/CallFrame.h:
* interpreter/Interpreter.cpp:
(JSC::eval):
* jsc.cpp:
(jscSource):
(GlobalObject::finishCreation):
(extractDirectoryName):
(currentWorkingDirectory):
(GlobalObject::moduleLoaderResolve):
(functionRunString):
(functionLoadString):
(functionCallerSourceOrigin):
(functionCreateBuiltin):
(functionCheckModuleSyntax):
(runInteractive):
* parser/SourceCode.h:
(JSC::makeSource):
* parser/SourceProvider.cpp:
(JSC::SourceProvider::SourceProvider):
* parser/SourceProvider.h:
(JSC::SourceProvider::sourceOrigin):
(JSC::StringSourceProvider::create):
(JSC::StringSourceProvider::StringSourceProvider):
(JSC::WebAssemblySourceProvider::create):
(JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
* runtime/FunctionConstructor.cpp:
(JSC::constructFunction):
(JSC::constructFunctionSkippingEvalEnabledCheck):
* runtime/FunctionConstructor.h:
* runtime/JSGlobalObjectFunctions.cpp:
(JSC::globalFuncEval):
* runtime/ModuleLoaderPrototype.cpp:
(JSC::moduleLoaderPrototypeParseModule):
* runtime/ScriptExecutable.h:
(JSC::ScriptExecutable::sourceOrigin):
* runtime/SourceOrigin.h: Added.
(JSC::SourceOrigin::SourceOrigin):
(JSC::SourceOrigin::string):
(JSC::SourceOrigin::isNull):
* tools/FunctionOverrides.cpp:
(JSC::initializeOverrideInfo):

Source/WebCore:

* bindings/js/CachedScriptSourceProvider.h:
(WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
* bindings/js/JSLazyEventListener.cpp:
(WebCore::JSLazyEventListener::initializeJSFunction):
* bindings/js/ScriptSourceCode.h:
(WebCore::ScriptSourceCode::ScriptSourceCode):
* bridge/NP_jsobject.cpp:
(_NPN_Evaluate):
* bridge/objc/WebScriptObject.mm:
(-[WebScriptObject evaluateWebScript:]):

Source/WebKit/mac:

* Plugins/Hosted/NetscapePluginInstanceProxy.mm:
(WebKit::NetscapePluginInstanceProxy::evaluate):

Source/WebKit/win:

* Plugins/PluginPackage.cpp:
(WebCore::NPN_Evaluate):
(WebCore::makeSource): Deleted.

Source/WebKit2:

* WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
(WebKit::NPRuntimeObjectMap::evaluate):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkJSTestsChangeLog">trunk/JSTests/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSBasecpp">trunk/Source/JavaScriptCore/API/JSBase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSObjectRefcpp">trunk/Source/JavaScriptCore/API/JSObjectRef.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIJSScriptRefcpp">trunk/Source/JavaScriptCore/API/JSScriptRef.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreScriptsbuiltinsbuiltins_templatespy">trunk/Source/JavaScriptCore/Scripts/builtins/builtins_templates.py</a></li>
<li><a href="#trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreAnotherGuardedInternalBuiltinSeparatejsresult">trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreArbitraryConditionalGuardSeparatejsresult">trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreGuardedBuiltinSeparatejsresult">trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreGuardedInternalBuiltinSeparatejsresult">trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreUnguardedBuiltinSeparatejsresult">trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCorexmlCasingTestSeparatejsresult">trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result</a></li>
<li><a href="#trunkSourceJavaScriptCorebuiltinsBuiltinExecutablescpp">trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredebuggerDebuggerCallFramecpp">trunk/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInjectedScriptManagercpp">trunk/Source/JavaScriptCore/inspector/InjectedScriptManager.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp">trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgentcpp">trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFramecpp">trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFrameh">trunk/Source/JavaScriptCore/interpreter/CallFrame.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterInterpretercpp">trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejsccpp">trunk/Source/JavaScriptCore/jsc.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceCodeh">trunk/Source/JavaScriptCore/parser/SourceCode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceProvidercpp">trunk/Source/JavaScriptCore/parser/SourceProvider.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceProviderh">trunk/Source/JavaScriptCore/parser/SourceProvider.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp">trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionConstructorh">trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeModuleLoaderPrototypecpp">trunk/Source/JavaScriptCore/runtime/ModuleLoaderPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeScriptExecutableh">trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsFunctionOverridescpp">trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsCachedScriptSourceProviderh">trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSLazyEventListenercpp">trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsScriptSourceCodeh">trunk/Source/WebCore/bindings/js/ScriptSourceCode.h</a></li>
<li><a href="#trunkSourceWebCorebridgeNP_jsobjectcpp">trunk/Source/WebCore/bridge/NP_jsobject.cpp</a></li>
<li><a href="#trunkSourceWebCorebridgeobjcWebScriptObjectmm">trunk/Source/WebCore/bridge/objc/WebScriptObject.mm</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacPluginsHostedNetscapePluginInstanceProxymm">trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm</a></li>
<li><a href="#trunkSourceWebKitwinChangeLog">trunk/Source/WebKit/win/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitwinPluginsPluginPackagecpp">trunk/Source/WebKit/win/Plugins/PluginPackage.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessPluginsNetscapeNPRuntimeObjectMapcpp">trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkJSTestsstresssourceoriginjs">trunk/JSTests/stress/source-origin.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSourceOriginh">trunk/Source/JavaScriptCore/runtime/SourceOrigin.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkJSTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/JSTests/ChangeLog (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/ChangeLog        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/JSTests/ChangeLog        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-12-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Propagate the source origin as much as possible
+        https://bugs.webkit.org/show_bug.cgi?id=166348
+
+        Reviewed by Darin Adler.
+
+        * stress/source-origin.js: Added.
+        (shouldBe):
+
</ins><span class="cx"> 2016-12-24  Caio Lima  &lt;ticaiolima@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [test262] Fixing mapped arguments object property test case
</span></span></pre></div>
<a id="trunkJSTestsstresssourceoriginjs"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/source-origin.js (0 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/source-origin.js                                (rev 0)
+++ trunk/JSTests/stress/source-origin.js        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error('bad value: ' + actual);
+}
+
+shouldBe(callerSourceOrigin().endsWith('source-origin.js'), true);
+shouldBe([ 0 ].map(callerSourceOrigin)[0].endsWith('source-origin.js'), true);
+shouldBe(eval(`callerSourceOrigin()`).endsWith('source-origin.js'), true);
+shouldBe((0, eval)(`callerSourceOrigin()`).endsWith('source-origin.js'), true);
+shouldBe((new Function(`return callerSourceOrigin()`))().endsWith('source-origin.js'), true);
+shouldBe((Function(`return callerSourceOrigin()`))().endsWith('source-origin.js'), true);
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSBase.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSBase.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/API/JSBase.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -62,7 +62,8 @@
</span><span class="cx"> 
</span><span class="cx">     // evaluate sets &quot;this&quot; to the global object if it is NULL
</span><span class="cx">     JSGlobalObject* globalObject = exec-&gt;vmEntryGlobalObject();
</span><del>-    SourceCode source = makeSource(script-&gt;string(), sourceURL ? sourceURL-&gt;string() : String(), TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
</del><ins>+    auto sourceURLString = sourceURL ? sourceURL-&gt;string() : String();
+    SourceCode source = makeSource(script-&gt;string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
</ins><span class="cx"> 
</span><span class="cx">     NakedPtr&lt;Exception&gt; evaluationException;
</span><span class="cx">     JSValue returnValue = profiledEvaluate(globalObject-&gt;globalExec(), ProfilingReason::API, source, jsThisObject, evaluationException);
</span><span class="lines">@@ -99,7 +100,8 @@
</span><span class="cx"> 
</span><span class="cx">     startingLineNumber = std::max(1, startingLineNumber);
</span><span class="cx"> 
</span><del>-    SourceCode source = makeSource(script-&gt;string(), sourceURL ? sourceURL-&gt;string() : String(), TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
</del><ins>+    auto sourceURLString = sourceURL ? sourceURL-&gt;string() : String();
+    SourceCode source = makeSource(script-&gt;string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
</ins><span class="cx">     
</span><span class="cx">     JSValue syntaxException;
</span><span class="cx">     bool isValidSyntax = checkSyntax(exec-&gt;vmEntryGlobalObject()-&gt;globalExec(), source, &amp;syntaxException);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSObjectRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSObjectRef.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSObjectRef.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/API/JSObjectRef.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -146,7 +146,8 @@
</span><span class="cx">         args.append(jsString(exec, parameterNames[i]-&gt;string()));
</span><span class="cx">     args.append(jsString(exec, body-&gt;string()));
</span><span class="cx"> 
</span><del>-    JSObject* result = constructFunction(exec, exec-&gt;lexicalGlobalObject(), args, nameID, sourceURL ? sourceURL-&gt;string() : String(), TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
</del><ins>+    auto sourceURLString = sourceURL ? sourceURL-&gt;string() : String();
+    JSObject* result = constructFunction(exec, exec-&gt;lexicalGlobalObject(), args, nameID, SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
</ins><span class="cx">     if (handleExceptionIfNeeded(exec, exception) == ExceptionStatus::DidThrow)
</span><span class="cx">         result = 0;
</span><span class="cx">     return toRef(result);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIJSScriptRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSScriptRef.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/API/JSScriptRef.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -41,9 +41,9 @@
</span><span class="cx"> 
</span><span class="cx"> struct OpaqueJSScript : public SourceProvider {
</span><span class="cx"> public:
</span><del>-    static WTF::RefPtr&lt;OpaqueJSScript&gt; create(VM* vm, const String&amp; url, int startingLineNumber, const String&amp; source)
</del><ins>+    static WTF::RefPtr&lt;OpaqueJSScript&gt; create(VM&amp; vm, const SourceOrigin&amp; sourceOrigin, const String&amp; url, int startingLineNumber, const String&amp; source)
</ins><span class="cx">     {
</span><del>-        return WTF::adoptRef(*new OpaqueJSScript(vm, url, startingLineNumber, source));
</del><ins>+        return WTF::adoptRef(*new OpaqueJSScript(vm, sourceOrigin, url, startingLineNumber, source));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     unsigned hash() const override
</span><span class="lines">@@ -56,11 +56,11 @@
</span><span class="cx">         return m_source.get();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    VM* vm() const { return m_vm; }
</del><ins>+    VM&amp; vm() const { return m_vm; }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    OpaqueJSScript(VM* vm, const String&amp; url, int startingLineNumber, const String&amp; source)
-        : SourceProvider(url, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()), SourceProviderSourceType::Program)
</del><ins>+    OpaqueJSScript(VM&amp; vm, const SourceOrigin&amp; sourceOrigin, const String&amp; url, int startingLineNumber, const String&amp; source)
+        : SourceProvider(sourceOrigin, url, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()), SourceProviderSourceType::Program)
</ins><span class="cx">         , m_vm(vm)
</span><span class="cx">         , m_source(source.isNull() ? *StringImpl::empty() : *source.impl())
</span><span class="cx">     {
</span><span class="lines">@@ -68,14 +68,14 @@
</span><span class="cx"> 
</span><span class="cx">     virtual ~OpaqueJSScript() { }
</span><span class="cx"> 
</span><del>-    VM* m_vm;
</del><ins>+    VM&amp; m_vm;
</ins><span class="cx">     Ref&lt;StringImpl&gt; m_source;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static bool parseScript(VM* vm, const SourceCode&amp; source, ParserError&amp; error)
</del><ins>+static bool parseScript(VM&amp; vm, const SourceCode&amp; source, ParserError&amp; error)
</ins><span class="cx"> {
</span><span class="cx">     return !!JSC::parse&lt;JSC::ProgramNode&gt;(
</span><del>-        vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin,
</del><ins>+        &amp;vm, source, Identifier(), JSParserBuiltinMode::NotBuiltin,
</ins><span class="cx">         JSParserStrictMode::NotStrict, JSParserScriptMode::Classic, SourceParseMode::ProgramMode, SuperBinding::NotNeeded,
</span><span class="cx">         error);
</span><span class="cx"> }
</span><span class="lines">@@ -84,8 +84,8 @@
</span><span class="cx"> 
</span><span class="cx"> JSScriptRef JSScriptCreateReferencingImmortalASCIIText(JSContextGroupRef contextGroup, JSStringRef url, int startingLineNumber, const char* source, size_t length, JSStringRef* errorMessage, int* errorLine)
</span><span class="cx"> {
</span><del>-    VM* vm = toJS(contextGroup);
-    JSLockHolder locker(vm);
</del><ins>+    auto&amp; vm = *toJS(contextGroup);
+    JSLockHolder locker(&amp;vm);
</ins><span class="cx">     for (size_t i = 0; i &lt; length; i++) {
</span><span class="cx">         if (!isASCII(source[i]))
</span><span class="cx">             return 0;
</span><span class="lines">@@ -93,7 +93,8 @@
</span><span class="cx"> 
</span><span class="cx">     startingLineNumber = std::max(1, startingLineNumber);
</span><span class="cx"> 
</span><del>-    auto result = OpaqueJSScript::create(vm, url ? url-&gt;string() : String(), startingLineNumber, String(StringImpl::createFromLiteral(source, length)));
</del><ins>+    auto sourceURLString = url ? url-&gt;string() : String();
+    auto result = OpaqueJSScript::create(vm, SourceOrigin { sourceURLString }, sourceURLString, startingLineNumber, String(StringImpl::createFromLiteral(source, length)));
</ins><span class="cx"> 
</span><span class="cx">     ParserError error;
</span><span class="cx">     if (!parseScript(vm, SourceCode(result), error)) {
</span><span class="lines">@@ -109,12 +110,13 @@
</span><span class="cx"> 
</span><span class="cx"> JSScriptRef JSScriptCreateFromString(JSContextGroupRef contextGroup, JSStringRef url, int startingLineNumber, JSStringRef source, JSStringRef* errorMessage, int* errorLine)
</span><span class="cx"> {
</span><del>-    VM* vm = toJS(contextGroup);
-    JSLockHolder locker(vm);
</del><ins>+    auto&amp; vm = *toJS(contextGroup);
+    JSLockHolder locker(&amp;vm);
</ins><span class="cx"> 
</span><span class="cx">     startingLineNumber = std::max(1, startingLineNumber);
</span><span class="cx"> 
</span><del>-    auto result = OpaqueJSScript::create(vm, url ? url-&gt;string() : String(), startingLineNumber, source-&gt;string());
</del><ins>+    auto sourceURLString = url ? url-&gt;string() : String();
+    auto result = OpaqueJSScript::create(vm, SourceOrigin { sourceURLString }, sourceURLString, startingLineNumber, source-&gt;string());
</ins><span class="cx"> 
</span><span class="cx">     ParserError error;
</span><span class="cx">     if (!parseScript(vm, SourceCode(result), error)) {
</span><span class="lines">@@ -130,13 +132,13 @@
</span><span class="cx"> 
</span><span class="cx"> void JSScriptRetain(JSScriptRef script)
</span><span class="cx"> {
</span><del>-    JSLockHolder locker(script-&gt;vm());
</del><ins>+    JSLockHolder locker(&amp;script-&gt;vm());
</ins><span class="cx">     script-&gt;ref();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSScriptRelease(JSScriptRef script)
</span><span class="cx"> {
</span><del>-    JSLockHolder locker(script-&gt;vm());
</del><ins>+    JSLockHolder locker(&amp;script-&gt;vm());
</ins><span class="cx">     script-&gt;deref();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -144,7 +146,7 @@
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = toJS(context);
</span><span class="cx">     JSLockHolder locker(exec);
</span><del>-    if (script-&gt;vm() != &amp;exec-&gt;vm()) {
</del><ins>+    if (&amp;script-&gt;vm() != &amp;exec-&gt;vm()) {
</ins><span class="cx">         RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -1,3 +1,106 @@
</span><ins>+2016-12-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Propagate the source origin as much as possible
+        https://bugs.webkit.org/show_bug.cgi?id=166348
+
+        Reviewed by Darin Adler.
+
+        This patch introduces CallFrame::callerSourceOrigin, SourceOrigin class
+        and SourceProvider::m_sourceOrigin. CallFrame::callerSourceOrigin returns
+        an appropriate SourceOrigin if possible. If we cannot find the appropriate
+        one, we just return null SourceOrigin.
+
+        This paves the way for implementing the module dynamic-import[1].
+        When the import operator is evaluated, it will resolve the module
+        specifier with this propagated source origin of the caller function.
+
+        To support import operator inside the dynamic code generation
+        functions (like `eval`, `new Function`, indirect call to `eval`),
+        we need to propagate the caller's source origin to the generated
+        source code.
+
+        We do not use sourceURL for that purpose. This is because we
+        would like to keep sourceURL for `eval` / `new Function` null.
+        This sourceURL will be used for the stack dump for errors with line/column
+        numbers. Dumping the caller's sourceURL with line/column numbers are
+        meaningless. So we would like to keep it null while we would like
+        to propagate SourceOrigin for dynamic imports.
+
+        [1]: https://github.com/tc39/proposal-dynamic-import
+
+        * API/JSBase.cpp:
+        (JSEvaluateScript):
+        (JSCheckScriptSyntax):
+        * API/JSObjectRef.cpp:
+        (JSObjectMakeFunction):
+        * API/JSScriptRef.cpp:
+        (OpaqueJSScript::create):
+        (OpaqueJSScript::vm):
+        (OpaqueJSScript::OpaqueJSScript):
+        (parseScript):
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * Scripts/builtins/builtins_templates.py:
+        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
+        * Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
+        * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
+        * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
+        * Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
+        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
+        * builtins/BuiltinExecutables.cpp:
+        (JSC::BuiltinExecutables::BuiltinExecutables):
+        (JSC::BuiltinExecutables::createDefaultConstructor):
+        * debugger/DebuggerCallFrame.cpp:
+        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
+        * inspector/InjectedScriptManager.cpp:
+        (Inspector::InjectedScriptManager::createInjectedScript):
+        * inspector/JSInjectedScriptHost.cpp:
+        (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension):
+        * inspector/agents/InspectorRuntimeAgent.cpp:
+        (Inspector::InspectorRuntimeAgent::parse):
+        * interpreter/CallFrame.cpp:
+        (JSC::CallFrame::callerSourceOrigin):
+        * interpreter/CallFrame.h:
+        * interpreter/Interpreter.cpp:
+        (JSC::eval):
+        * jsc.cpp:
+        (jscSource):
+        (GlobalObject::finishCreation):
+        (extractDirectoryName):
+        (currentWorkingDirectory):
+        (GlobalObject::moduleLoaderResolve):
+        (functionRunString):
+        (functionLoadString):
+        (functionCallerSourceOrigin):
+        (functionCreateBuiltin):
+        (functionCheckModuleSyntax):
+        (runInteractive):
+        * parser/SourceCode.h:
+        (JSC::makeSource):
+        * parser/SourceProvider.cpp:
+        (JSC::SourceProvider::SourceProvider):
+        * parser/SourceProvider.h:
+        (JSC::SourceProvider::sourceOrigin):
+        (JSC::StringSourceProvider::create):
+        (JSC::StringSourceProvider::StringSourceProvider):
+        (JSC::WebAssemblySourceProvider::create):
+        (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
+        * runtime/FunctionConstructor.cpp:
+        (JSC::constructFunction):
+        (JSC::constructFunctionSkippingEvalEnabledCheck):
+        * runtime/FunctionConstructor.h:
+        * runtime/JSGlobalObjectFunctions.cpp:
+        (JSC::globalFuncEval):
+        * runtime/ModuleLoaderPrototype.cpp:
+        (JSC::moduleLoaderPrototypeParseModule):
+        * runtime/ScriptExecutable.h:
+        (JSC::ScriptExecutable::sourceOrigin):
+        * runtime/SourceOrigin.h: Added.
+        (JSC::SourceOrigin::SourceOrigin):
+        (JSC::SourceOrigin::string):
+        (JSC::SourceOrigin::isNull):
+        * tools/FunctionOverrides.cpp:
+        (JSC::initializeOverrideInfo):
+
</ins><span class="cx"> 2016-12-24  Caio Lima  &lt;ticaiolima@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [test262] Fixing mapped arguments object property test case
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -2361,6 +2361,7 @@
</span><span class="cx">                 FED94F2F171E3E2300BE77A4 /* Watchdog.h in Headers */ = {isa = PBXBuildFile; fileRef = FED94F2C171E3E2300BE77A4 /* Watchdog.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 FEF040511AAE662D00BD28B0 /* CompareAndSwapTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEF040501AAE662D00BD28B0 /* CompareAndSwapTest.cpp */; };
</span><span class="cx">                 FEFD6FC61D5E7992008F2F0B /* JSStringInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = FEFD6FC51D5E7970008F2F0B /* JSStringInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                2D342F36F7244096804ADB24 /* SourceOrigin.h in Headers */ = {isa = PBXBuildFile; fileRef = 425BA1337E4344E1B269A671 /* SourceOrigin.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx"> /* End PBXBuildFile section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXContainerItemProxy section */
</span><span class="lines">@@ -4878,6 +4879,7 @@
</span><span class="cx">                 FEF040501AAE662D00BD28B0 /* CompareAndSwapTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CompareAndSwapTest.cpp; path = API/tests/CompareAndSwapTest.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 FEF040521AAEC4ED00BD28B0 /* CompareAndSwapTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CompareAndSwapTest.h; path = API/tests/CompareAndSwapTest.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 FEFD6FC51D5E7970008F2F0B /* JSStringInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStringInlines.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                425BA1337E4344E1B269A671 /* SourceOrigin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SourceOrigin.h; path = SourceOrigin.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx"> /* End PBXFileReference section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXFrameworksBuildPhase section */
</span><span class="lines">@@ -6707,6 +6709,7 @@
</span><span class="cx">                                 709FB8661AE335C60039D069 /* WeakSetPrototype.h */,
</span><span class="cx">                                 A7DCB77912E3D90500911940 /* WriteBarrier.h */,
</span><span class="cx">                                 C2B6D75218A33793004A9301 /* WriteBarrierInlines.h */,
</span><ins>+                                425BA1337E4344E1B269A671 /* SourceOrigin.h */,
</ins><span class="cx">                         );
</span><span class="cx">                         path = runtime;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -9075,6 +9078,7 @@
</span><span class="cx">                                 86704B8812DBA33700A9FE7B /* YarrParser.h in Headers */,
</span><span class="cx">                                 86704B8A12DBA33700A9FE7B /* YarrPattern.h in Headers */,
</span><span class="cx">                                 86704B4312DB8A8100A9FE7B /* YarrSyntaxChecker.h in Headers */,
</span><ins>+                                2D342F36F7244096804ADB24 /* SourceOrigin.h in Headers */,
</ins><span class="cx">                         );
</span><span class="cx">                         runOnlyForDeploymentPostprocessing = 0;
</span><span class="cx">                 };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreScriptsbuiltinsbuiltins_templatespy"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Scripts/builtins/builtins_templates.py (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Scripts/builtins/builtins_templates.py        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/Scripts/builtins/builtins_templates.py        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx">     explicit ${objectName}BuiltinsWrapper(JSC::VM* vm)
</span><span class="cx">         : m_vm(*vm)
</span><span class="cx">         ${macroPrefix}_FOREACH_${objectMacro}_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">         ${macroPrefix}_FOREACH_${objectMacro}_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreAnotherGuardedInternalBuiltinSeparatejsresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx">     explicit AnotherGuardedInternalBuiltinBuiltinsWrapper(JSC::VM* vm)
</span><span class="cx">         : m_vm(*vm)
</span><span class="cx">         WEBCORE_FOREACH_ANOTHERGUARDEDINTERNALBUILTIN_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">         WEBCORE_FOREACH_ANOTHERGUARDEDINTERNALBUILTIN_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreArbitraryConditionalGuardSeparatejsresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     explicit ArbitraryConditionalGuardBuiltinsWrapper(JSC::VM* vm)
</span><span class="cx">         : m_vm(*vm)
</span><span class="cx">         WEBCORE_FOREACH_ARBITRARYCONDITIONALGUARD_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">         WEBCORE_FOREACH_ARBITRARYCONDITIONALGUARD_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreGuardedBuiltinSeparatejsresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     explicit GuardedBuiltinBuiltinsWrapper(JSC::VM* vm)
</span><span class="cx">         : m_vm(*vm)
</span><span class="cx">         WEBCORE_FOREACH_GUARDEDBUILTIN_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">         WEBCORE_FOREACH_GUARDEDBUILTIN_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreGuardedInternalBuiltinSeparatejsresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     explicit GuardedInternalBuiltinBuiltinsWrapper(JSC::VM* vm)
</span><span class="cx">         : m_vm(*vm)
</span><span class="cx">         WEBCORE_FOREACH_GUARDEDINTERNALBUILTIN_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">         WEBCORE_FOREACH_GUARDEDINTERNALBUILTIN_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCoreUnguardedBuiltinSeparatejsresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">     explicit UnguardedBuiltinBuiltinsWrapper(JSC::VM* vm)
</span><span class="cx">         : m_vm(*vm)
</span><span class="cx">         WEBCORE_FOREACH_UNGUARDEDBUILTIN_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">         WEBCORE_FOREACH_UNGUARDEDBUILTIN_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreScriptstestsbuiltinsexpectedWebCorexmlCasingTestSeparatejsresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     explicit xmlCasingTestBuiltinsWrapper(JSC::VM* vm)
</span><span class="cx">         : m_vm(*vm)
</span><span class="cx">         WEBCORE_FOREACH_XMLCASINGTEST_BUILTIN_FUNCTION_NAME(INITIALIZE_BUILTIN_NAMES)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(JSC::makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">         WEBCORE_FOREACH_XMLCASINGTEST_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef INITIALIZE_BUILTIN_SOURCE_MEMBERS
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebuiltinsBuiltinExecutablescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> 
</span><span class="cx"> BuiltinExecutables::BuiltinExecutables(VM&amp; vm)
</span><span class="cx">     : m_vm(vm)
</span><del>-#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(makeSource(StringImpl::createFromLiteral(s_##name, length)))
</del><ins>+#define INITIALIZE_BUILTIN_SOURCE_MEMBERS(name, functionName, length) , m_##name##Source(makeSource(StringImpl::createFromLiteral(s_##name, length), { }))
</ins><span class="cx">     JSC_FOREACH_BUILTIN_CODE(INITIALIZE_BUILTIN_SOURCE_MEMBERS)
</span><span class="cx"> #undef EXPOSE_BUILTIN_STRINGS
</span><span class="cx"> {
</span><span class="lines">@@ -51,9 +51,9 @@
</span><span class="cx">     case ConstructorKind::None:
</span><span class="cx">         break;
</span><span class="cx">     case ConstructorKind::Base:
</span><del>-        return createExecutable(m_vm, makeSource(baseConstructorCode), name, constructorKind, ConstructAbility::CanConstruct);
</del><ins>+        return createExecutable(m_vm, makeSource(baseConstructorCode, { }), name, constructorKind, ConstructAbility::CanConstruct);
</ins><span class="cx">     case ConstructorKind::Extends:
</span><del>-        return createExecutable(m_vm, makeSource(derivedConstructorCode), name, constructorKind, ConstructAbility::CanConstruct);
</del><ins>+        return createExecutable(m_vm, makeSource(derivedConstructorCode, { }), name, constructorKind, ConstructAbility::CanConstruct);
</ins><span class="cx">     }
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx">     return nullptr;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredebuggerDebuggerCallFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -243,7 +243,7 @@
</span><span class="cx">     VariableEnvironment variablesUnderTDZ;
</span><span class="cx">     JSScope::collectClosureVariablesUnderTDZ(scope()-&gt;jsScope(), variablesUnderTDZ);
</span><span class="cx"> 
</span><del>-    EvalExecutable* eval = DirectEvalExecutable::create(callFrame, makeSource(script), codeBlock-&gt;isStrictMode(), codeBlock-&gt;unlinkedCodeBlock()-&gt;derivedContextType(), codeBlock-&gt;unlinkedCodeBlock()-&gt;isArrowFunction(), evalContextType, &amp;variablesUnderTDZ);
</del><ins>+    auto* eval = DirectEvalExecutable::create(callFrame, makeSource(script, callFrame-&gt;callerSourceOrigin()), codeBlock-&gt;isStrictMode(), codeBlock-&gt;unlinkedCodeBlock()-&gt;derivedContextType(), codeBlock-&gt;unlinkedCodeBlock()-&gt;isArrowFunction(), evalContextType, &amp;variablesUnderTDZ);
</ins><span class="cx">     if (UNLIKELY(catchScope.exception())) {
</span><span class="cx">         exception = catchScope.exception();
</span><span class="cx">         catchScope.clearException();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInjectedScriptManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InjectedScriptManager.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InjectedScriptManager.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/inspector/InjectedScriptManager.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">     JSLockHolder lock(vm);
</span><span class="cx">     auto scope = DECLARE_CATCH_SCOPE(vm);
</span><span class="cx"> 
</span><del>-    SourceCode sourceCode = makeSource(source);
</del><ins>+    SourceCode sourceCode = makeSource(source, { });
</ins><span class="cx">     JSGlobalObject* globalObject = scriptState-&gt;lexicalGlobalObject();
</span><span class="cx">     JSValue globalThisValue = scriptState-&gt;globalThisValue();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> 
</span><span class="cx">     NakedPtr&lt;Exception&gt; exception;
</span><span class="cx">     JSObject* scopeExtension = exec-&gt;argument(1).getObject();
</span><del>-    JSValue result = JSC::evaluateWithScopeExtension(exec, makeSource(program), scopeExtension, exception);
</del><ins>+    JSValue result = JSC::evaluateWithScopeExtension(exec, makeSource(program, exec-&gt;callerSourceOrigin()), scopeExtension, exception);
</ins><span class="cx">     if (exception)
</span><span class="cx">         throwException(exec, scope, exception);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorRuntimeAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx">     JSLockHolder lock(m_vm);
</span><span class="cx"> 
</span><span class="cx">     ParserError error;
</span><del>-    checkSyntax(m_vm, JSC::makeSource(expression), error);
</del><ins>+    checkSyntax(m_vm, JSC::makeSource(expression, { }), error);
</ins><span class="cx"> 
</span><span class="cx">     switch (error.syntaxErrorType()) {
</span><span class="cx">     case ParserError::SyntaxErrorNone:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -217,6 +217,48 @@
</span><span class="cx">     return static_cast&lt;CallFrame*&gt;(unsafeCallerFrameOrVMEntryFrame());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+SourceOrigin CallFrame::callerSourceOrigin()
+{
+    SourceOrigin sourceOrigin;
+    bool haveSkippedFirstFrame = false;
+    StackVisitor::visit(this, [&amp;](StackVisitor&amp; visitor) {
+        if (!std::exchange(haveSkippedFirstFrame, true))
+            return StackVisitor::Status::Continue;
+
+        switch (visitor-&gt;codeType()) {
+        case StackVisitor::Frame::CodeType::Function:
+            // Skip the builtin functions since they should not pass the source origin to the dynamic code generation calls.
+            // Consider the following code.
+            //
+            // [ &quot;42 + 44&quot; ].forEach(eval);
+            //
+            // In the above case, the eval function will be interpreted as the indirect call to eval inside forEach function.
+            // At that time, the generated eval code should have the source origin to the original caller of the forEach function
+            // instead of the source origin of the forEach function.
+            if (static_cast&lt;FunctionExecutable*&gt;(visitor-&gt;codeBlock()-&gt;ownerScriptExecutable())-&gt;isBuiltinFunction())
+                return StackVisitor::Status::Continue;
+            FALLTHROUGH;
+
+        case StackVisitor::Frame::CodeType::Eval:
+        case StackVisitor::Frame::CodeType::Module:
+        case StackVisitor::Frame::CodeType::Global:
+            sourceOrigin = visitor-&gt;codeBlock()-&gt;ownerScriptExecutable()-&gt;sourceOrigin();
+            return StackVisitor::Status::Done;
+
+        case StackVisitor::Frame::CodeType::Native:
+            return StackVisitor::Status::Continue;
+
+        case StackVisitor::Frame::CodeType::Wasm:
+            // FIXME: Should return the source origin for WASM.
+            return StackVisitor::Status::Done;
+        }
+
+        RELEASE_ASSERT_NOT_REACHED();
+        return StackVisitor::Status::Done;
+    });
+    return sourceOrigin;
+}
+
</ins><span class="cx"> String CallFrame::friendlyFunctionName()
</span><span class="cx"> {
</span><span class="cx">     CodeBlock* codeBlock = this-&gt;codeBlock();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFrameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrame.h (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -137,6 +137,8 @@
</span><span class="cx">         CallFrame* unsafeCallerFrame(VMEntryFrame*&amp;);
</span><span class="cx">         JS_EXPORT_PRIVATE CallFrame* callerFrame(VMEntryFrame*&amp;);
</span><span class="cx"> 
</span><ins>+        JS_EXPORT_PRIVATE SourceOrigin callerSourceOrigin();
+
</ins><span class="cx">         static ptrdiff_t callerFrameOffset() { return OBJECT_OFFSETOF(CallerFrameAndPC, callerFrame); }
</span><span class="cx"> 
</span><span class="cx">         ReturnAddressPtr returnPC() const { return ReturnAddressPtr(callerFrameAndPC().pc); }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterInterpretercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx"> 
</span><span class="cx">         VariableEnvironment variablesUnderTDZ;
</span><span class="cx">         JSScope::collectClosureVariablesUnderTDZ(callerScopeChain, variablesUnderTDZ);
</span><del>-        eval = DirectEvalExecutable::create(callFrame, makeSource(programSource), callerCodeBlock-&gt;isStrictMode(), derivedContextType, isArrowFunctionContext, evalContextType, &amp;variablesUnderTDZ);
</del><ins>+        eval = DirectEvalExecutable::create(callFrame, makeSource(programSource, callerCodeBlock-&gt;source()-&gt;sourceOrigin()), callerCodeBlock-&gt;isStrictMode(), derivedContextType, isArrowFunctionContext, evalContextType, &amp;variablesUnderTDZ);
</ins><span class="cx">         if (!eval)
</span><span class="cx">             return jsUndefined();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejsccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jsc.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jsc.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/jsc.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -1009,6 +1009,7 @@
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL functionGetRandomSeed(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL functionSetRandomSeed(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL functionIsRope(ExecState*);
</span><ins>+static EncodedJSValue JSC_HOST_CALL functionCallerSourceOrigin(ExecState*);
</ins><span class="cx"> 
</span><span class="cx"> struct Script {
</span><span class="cx">     enum class StrictMode {
</span><span class="lines">@@ -1103,7 +1104,7 @@
</span><span class="cx"> static inline SourceCode jscSource(const Vector&amp; utf8, const String&amp; filename)
</span><span class="cx"> {
</span><span class="cx">     String str = stringFromUTF(utf8);
</span><del>-    return makeSource(str, filename);
</del><ins>+    return makeSource(str, SourceOrigin { filename }, filename);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class GlobalObject : public JSGlobalObject {
</span><span class="lines">@@ -1232,6 +1233,7 @@
</span><span class="cx">         addFunction(vm, &quot;getRandomSeed&quot;, functionGetRandomSeed, 0);
</span><span class="cx">         addFunction(vm, &quot;setRandomSeed&quot;, functionSetRandomSeed, 1);
</span><span class="cx">         addFunction(vm, &quot;isRope&quot;, functionIsRope, 1);
</span><ins>+        addFunction(vm, &quot;callerSourceOrigin&quot;, functionCallerSourceOrigin, 0);
</ins><span class="cx"> 
</span><span class="cx">         addFunction(vm, &quot;is32BitPlatform&quot;, functionIs32BitPlatform, 0);
</span><span class="cx"> 
</span><span class="lines">@@ -1332,11 +1334,12 @@
</span><span class="cx">     moduleName.split('/', true, queries);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool extractDirectoryName(const String&amp; absolutePathToFile, DirectoryName&amp; directoryName)
</del><ins>+static std::optional&lt;DirectoryName&gt; extractDirectoryName(const String&amp; absolutePathToFile)
</ins><span class="cx"> {
</span><span class="cx">     size_t firstSeparatorPosition = absolutePathToFile.find(pathSeparator());
</span><span class="cx">     if (firstSeparatorPosition == notFound)
</span><del>-        return false;
</del><ins>+        return std::nullopt;
+    DirectoryName directoryName;
</ins><span class="cx">     directoryName.rootName = absolutePathToFile.substring(0, firstSeparatorPosition + 1); // Include the separator.
</span><span class="cx">     size_t lastSeparatorPosition = absolutePathToFile.reverseFind(pathSeparator());
</span><span class="cx">     ASSERT_WITH_MESSAGE(lastSeparatorPosition != notFound, &quot;If the separator is not found, this function already returns when performing the forward search.&quot;);
</span><span class="lines">@@ -1347,10 +1350,10 @@
</span><span class="cx">         size_t queryLength = lastSeparatorPosition - queryStartPosition; // Not include the last separator.
</span><span class="cx">         directoryName.queryName = absolutePathToFile.substring(queryStartPosition, queryLength);
</span><span class="cx">     }
</span><del>-    return true;
</del><ins>+    return directoryName;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool currentWorkingDirectory(DirectoryName&amp; directoryName)
</del><ins>+static std::optional&lt;DirectoryName&gt; currentWorkingDirectory()
</ins><span class="cx"> {
</span><span class="cx"> #if OS(WINDOWS)
</span><span class="cx">     // https://msdn.microsoft.com/en-us/library/windows/desktop/aa364934.aspx
</span><span class="lines">@@ -1364,7 +1367,7 @@
</span><span class="cx">     // In the path utility functions inside the JSC shell, we does not handle the UNC and UNCW including the network host name.
</span><span class="cx">     DWORD bufferLength = ::GetCurrentDirectoryW(0, nullptr);
</span><span class="cx">     if (!bufferLength)
</span><del>-        return false;
</del><ins>+        return std::nullopt;
</ins><span class="cx">     // In Windows, wchar_t is the UTF-16LE.
</span><span class="cx">     // https://msdn.microsoft.com/en-us/library/dd374081.aspx
</span><span class="cx">     // https://msdn.microsoft.com/en-us/library/windows/desktop/ff381407.aspx
</span><span class="lines">@@ -1374,20 +1377,20 @@
</span><span class="cx">     String directoryString = String(reinterpret_cast&lt;UChar*&gt;(buffer.get()));
</span><span class="cx">     // We don't support network path like \\host\share\&lt;path name&gt;.
</span><span class="cx">     if (directoryString.startsWith(&quot;\\\\&quot;))
</span><del>-        return false;
</del><ins>+        return std::nullopt;
</ins><span class="cx"> #else
</span><span class="cx">     auto buffer = std::make_unique&lt;char[]&gt;(PATH_MAX);
</span><span class="cx">     if (!getcwd(buffer.get(), PATH_MAX))
</span><del>-        return false;
</del><ins>+        return std::nullopt;
</ins><span class="cx">     String directoryString = String::fromUTF8(buffer.get());
</span><span class="cx"> #endif
</span><span class="cx">     if (directoryString.isEmpty())
</span><del>-        return false;
</del><ins>+        return std::nullopt;
</ins><span class="cx"> 
</span><span class="cx">     if (directoryString[directoryString.length() - 1] == pathSeparator())
</span><del>-        return extractDirectoryName(directoryString, directoryName);
</del><ins>+        return extractDirectoryName(directoryString);
</ins><span class="cx">     // Append the seperator to represents the file name. extractDirectoryName only accepts the absolute file name.
</span><del>-    return extractDirectoryName(makeString(directoryString, pathSeparator()), directoryName);
</del><ins>+    return extractDirectoryName(makeString(directoryString, pathSeparator()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static String resolvePath(const DirectoryName&amp; directoryName, const ModuleName&amp; moduleName)
</span><span class="lines">@@ -1433,28 +1436,32 @@
</span><span class="cx">     if (key.isSymbol())
</span><span class="cx">         return deferred-&gt;resolve(exec, keyValue);
</span><span class="cx"> 
</span><del>-    DirectoryName directoryName;
</del><span class="cx">     if (referrerValue.isUndefined()) {
</span><del>-        if (!currentWorkingDirectory(directoryName))
</del><ins>+        auto directoryName = currentWorkingDirectory();
+        if (!directoryName)
</ins><span class="cx">             return deferred-&gt;reject(exec, createError(exec, ASCIILiteral(&quot;Could not resolve the current working directory.&quot;)));
</span><del>-    } else {
-        const Identifier referrer = referrerValue.toPropertyKey(exec);
-        if (UNLIKELY(scope.exception())) {
-            JSValue exception = scope.exception();
-            scope.clearException();
-            return deferred-&gt;reject(exec, exception);
-        }
-        if (referrer.isSymbol()) {
-            if (!currentWorkingDirectory(directoryName))
-                return deferred-&gt;reject(exec, createError(exec, ASCIILiteral(&quot;Could not resolve the current working directory.&quot;)));
-        } else {
-            // If the referrer exists, we assume that the referrer is the correct absolute path.
-            if (!extractDirectoryName(referrer.impl(), directoryName))
-                return deferred-&gt;reject(exec, createError(exec, makeString(&quot;Could not resolve the referrer name '&quot;, String(referrer.impl()), &quot;'.&quot;)));
-        }
</del><ins>+        return deferred-&gt;resolve(exec, jsString(exec, resolvePath(directoryName.value(), ModuleName(key.impl()))));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return deferred-&gt;resolve(exec, jsString(exec, resolvePath(directoryName, ModuleName(key.impl()))));
</del><ins>+    const Identifier referrer = referrerValue.toPropertyKey(exec);
+    if (UNLIKELY(scope.exception())) {
+        JSValue exception = scope.exception();
+        scope.clearException();
+        return deferred-&gt;reject(exec, exception);
+    }
+
+    if (referrer.isSymbol()) {
+        auto directoryName = currentWorkingDirectory();
+        if (!directoryName)
+            return deferred-&gt;reject(exec, createError(exec, ASCIILiteral(&quot;Could not resolve the current working directory.&quot;)));
+        return deferred-&gt;resolve(exec, jsString(exec, resolvePath(directoryName.value(), ModuleName(key.impl()))));
+    }
+
+    // If the referrer exists, we assume that the referrer is the correct absolute path.
+    auto directoryName = extractDirectoryName(referrer.impl());
+    if (!directoryName)
+        return deferred-&gt;reject(exec, createError(exec, makeString(&quot;Could not resolve the referrer name '&quot;, String(referrer.impl()), &quot;'.&quot;)));
+    return deferred-&gt;resolve(exec, jsString(exec, resolvePath(directoryName.value(), ModuleName(key.impl()))));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void convertShebangToJSComment(Vector&lt;char&gt;&amp; buffer)
</span><span class="lines">@@ -1945,7 +1952,7 @@
</span><span class="cx">         vm, Identifier::fromString(globalObject-&gt;globalExec(), &quot;arguments&quot;), array);
</span><span class="cx"> 
</span><span class="cx">     NakedPtr&lt;Exception&gt; exception;
</span><del>-    evaluate(globalObject-&gt;globalExec(), makeSource(source), JSValue(), exception);
</del><ins>+    evaluate(globalObject-&gt;globalExec(), makeSource(source, exec-&gt;callerSourceOrigin()), JSValue(), exception);
</ins><span class="cx"> 
</span><span class="cx">     if (exception) {
</span><span class="cx">         scope.throwException(globalObject-&gt;globalExec(), exception);
</span><span class="lines">@@ -1985,7 +1992,7 @@
</span><span class="cx">     JSGlobalObject* globalObject = exec-&gt;lexicalGlobalObject();
</span><span class="cx"> 
</span><span class="cx">     NakedPtr&lt;Exception&gt; evaluationException;
</span><del>-    JSValue result = evaluate(globalObject-&gt;globalExec(), makeSource(sourceCode), JSValue(), evaluationException);
</del><ins>+    JSValue result = evaluate(globalObject-&gt;globalExec(), makeSource(sourceCode, exec-&gt;callerSourceOrigin()), JSValue(), evaluationException);
</ins><span class="cx">     if (evaluationException)
</span><span class="cx">         throwException(exec, scope, evaluationException);
</span><span class="cx">     return JSValue::encode(result);
</span><span class="lines">@@ -2106,6 +2113,14 @@
</span><span class="cx">     return JSValue::encode(jsBoolean(!impl));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+EncodedJSValue JSC_HOST_CALL functionCallerSourceOrigin(ExecState* state)
+{
+    SourceOrigin sourceOrigin = state-&gt;callerSourceOrigin();
+    if (sourceOrigin.isNull())
+        return JSValue::encode(jsNull());
+    return JSValue::encode(jsString(state, sourceOrigin.string()));
+}
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL functionReadline(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     Vector&lt;char, 256&gt; line;
</span><span class="lines">@@ -2404,7 +2419,7 @@
</span><span class="cx">     String functionText = asString(exec-&gt;argument(0))-&gt;value(exec);
</span><span class="cx">     RETURN_IF_EXCEPTION(scope, encodedJSValue());
</span><span class="cx"> 
</span><del>-    const SourceCode&amp; source = makeSource(functionText);
</del><ins>+    const SourceCode&amp; source = makeSource(functionText, { });
</ins><span class="cx">     JSFunction* func = JSFunction::createBuiltinFunction(vm, createBuiltinExecutable(vm, source, Identifier::fromString(&amp;vm, &quot;foo&quot;), ConstructorKind::None, ConstructAbility::CannotConstruct)-&gt;link(vm, source), exec-&gt;lexicalGlobalObject());
</span><span class="cx"> 
</span><span class="cx">     return JSValue::encode(func);
</span><span class="lines">@@ -2428,7 +2443,7 @@
</span><span class="cx">     stopWatch.start();
</span><span class="cx"> 
</span><span class="cx">     ParserError error;
</span><del>-    bool validSyntax = checkModuleSyntax(exec, makeSource(source, String(), TextPosition(), SourceProviderSourceType::Module), error);
</del><ins>+    bool validSyntax = checkModuleSyntax(exec, makeSource(source, { }, String(), TextPosition(), SourceProviderSourceType::Module), error);
</ins><span class="cx">     stopWatch.stop();
</span><span class="cx"> 
</span><span class="cx">     if (!validSyntax)
</span><span class="lines">@@ -2947,7 +2962,10 @@
</span><span class="cx">     VM&amp; vm = globalObject-&gt;vm();
</span><span class="cx">     auto scope = DECLARE_CATCH_SCOPE(vm);
</span><span class="cx"> 
</span><del>-    String interpreterName(ASCIILiteral(&quot;Interpreter&quot;));
</del><ins>+    std::optional&lt;DirectoryName&gt; directoryName = currentWorkingDirectory();
+    if (!directoryName)
+        return;
+    SourceOrigin sourceOrigin(resolvePath(directoryName.value(), ModuleName(&quot;interpreter&quot;)));
</ins><span class="cx">     
</span><span class="cx">     bool shouldQuit = false;
</span><span class="cx">     while (!shouldQuit) {
</span><span class="lines">@@ -2962,7 +2980,7 @@
</span><span class="cx">                 break;
</span><span class="cx">             source = source + line;
</span><span class="cx">             source = source + '\n';
</span><del>-            checkSyntax(globalObject-&gt;vm(), makeSource(source, interpreterName), error);
</del><ins>+            checkSyntax(globalObject-&gt;vm(), makeSource(source, sourceOrigin), error);
</ins><span class="cx">             if (!line[0]) {
</span><span class="cx">                 free(line);
</span><span class="cx">                 break;
</span><span class="lines">@@ -2978,7 +2996,7 @@
</span><span class="cx">         
</span><span class="cx">         
</span><span class="cx">         NakedPtr&lt;Exception&gt; evaluationException;
</span><del>-        JSValue returnValue = evaluate(globalObject-&gt;globalExec(), makeSource(source, interpreterName), JSValue(), evaluationException);
</del><ins>+        JSValue returnValue = evaluate(globalObject-&gt;globalExec(), makeSource(source, sourceOrigin), JSValue(), evaluationException);
</ins><span class="cx"> #else
</span><span class="cx">         printf(&quot;%s&quot;, interactivePrompt);
</span><span class="cx">         Vector&lt;char, 256&gt; line;
</span><span class="lines">@@ -2993,7 +3011,7 @@
</span><span class="cx">             break;
</span><span class="cx"> 
</span><span class="cx">         NakedPtr&lt;Exception&gt; evaluationException;
</span><del>-        JSValue returnValue = evaluate(globalObject-&gt;globalExec(), jscSource(line, interpreterName), JSValue(), evaluationException);
</del><ins>+        JSValue returnValue = evaluate(globalObject-&gt;globalExec(), jscSource(line, sourceOrigin.string()), JSValue(), evaluationException);
</ins><span class="cx"> #endif
</span><span class="cx">         if (evaluationException)
</span><span class="cx">             printf(&quot;Exception: %s\n&quot;, evaluationException-&gt;value().toWTFString(globalObject-&gt;globalExec()).utf8().data());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceCodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceCode.h (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceCode.h        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/parser/SourceCode.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -79,9 +79,9 @@
</span><span class="cx">         OrdinalNumber m_startColumn;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    inline SourceCode makeSource(const String&amp; source, const String&amp; url = String(), const TextPosition&amp; startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
</del><ins>+    inline SourceCode makeSource(const String&amp; source, const SourceOrigin&amp; sourceOrigin, const String&amp; url = String(), const TextPosition&amp; startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
</ins><span class="cx">     {
</span><del>-        return SourceCode(StringSourceProvider::create(source, url, startPosition, sourceType), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt());
</del><ins>+        return SourceCode(StringSourceProvider::create(source, sourceOrigin, url, startPosition, sourceType), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt());
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     inline SourceCode SourceCode::subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceProvidercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceProvider.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceProvider.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/parser/SourceProvider.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -31,8 +31,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-SourceProvider::SourceProvider(const String&amp; url, const TextPosition&amp; startPosition, SourceProviderSourceType sourceType)
-    : m_url(url)
</del><ins>+SourceProvider::SourceProvider(const SourceOrigin&amp; sourceOrigin, const String&amp; url, const TextPosition&amp; startPosition, SourceProviderSourceType sourceType)
+    : m_sourceOrigin(sourceOrigin)
+    , m_url(url)
</ins><span class="cx">     , m_startPosition(startPosition)
</span><span class="cx">     , m_sourceType(sourceType)
</span><span class="cx">     , m_validated(false)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceProviderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceProvider.h (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceProvider.h        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/parser/SourceProvider.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &quot;SourceOrigin.h&quot;
</ins><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/text/TextPosition.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="lines">@@ -44,7 +45,7 @@
</span><span class="cx">     public:
</span><span class="cx">         static const intptr_t nullID = 1;
</span><span class="cx">         
</span><del>-        JS_EXPORT_PRIVATE SourceProvider(const String&amp; url, const TextPosition&amp; startPosition, SourceProviderSourceType);
</del><ins>+        JS_EXPORT_PRIVATE SourceProvider(const SourceOrigin&amp;, const String&amp; url, const TextPosition&amp; startPosition, SourceProviderSourceType);
</ins><span class="cx"> 
</span><span class="cx">         JS_EXPORT_PRIVATE virtual ~SourceProvider();
</span><span class="cx"> 
</span><span class="lines">@@ -55,6 +56,7 @@
</span><span class="cx">             return source().substring(start, end - start);
</span><span class="cx">         }
</span><span class="cx"> 
</span><ins>+        const SourceOrigin&amp; sourceOrigin() const { return m_sourceOrigin; }
</ins><span class="cx">         const String&amp; url() const { return m_url; }
</span><span class="cx">         const String&amp; sourceURL() const { return m_sourceURLDirective; }
</span><span class="cx">         const String&amp; sourceMappingURL() const { return m_sourceMappingURLDirective; }
</span><span class="lines">@@ -78,6 +80,7 @@
</span><span class="cx">     private:
</span><span class="cx">         JS_EXPORT_PRIVATE void getID();
</span><span class="cx"> 
</span><ins>+        SourceOrigin m_sourceOrigin;
</ins><span class="cx">         String m_url;
</span><span class="cx">         String m_sourceURLDirective;
</span><span class="cx">         String m_sourceMappingURLDirective;
</span><span class="lines">@@ -89,9 +92,9 @@
</span><span class="cx"> 
</span><span class="cx">     class StringSourceProvider : public SourceProvider {
</span><span class="cx">     public:
</span><del>-        static Ref&lt;StringSourceProvider&gt; create(const String&amp; source, const String&amp; url, const TextPosition&amp; startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
</del><ins>+        static Ref&lt;StringSourceProvider&gt; create(const String&amp; source, const SourceOrigin&amp; sourceOrigin, const String&amp; url, const TextPosition&amp; startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
</ins><span class="cx">         {
</span><del>-            return adoptRef(*new StringSourceProvider(source, url, startPosition, sourceType));
</del><ins>+            return adoptRef(*new StringSourceProvider(source, sourceOrigin, url, startPosition, sourceType));
</ins><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         unsigned hash() const override
</span><span class="lines">@@ -105,8 +108,8 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        StringSourceProvider(const String&amp; source, const String&amp; url, const TextPosition&amp; startPosition, SourceProviderSourceType sourceType)
-            : SourceProvider(url, startPosition, sourceType)
</del><ins>+        StringSourceProvider(const String&amp; source, const SourceOrigin&amp; sourceOrigin, const String&amp; url, const TextPosition&amp; startPosition, SourceProviderSourceType sourceType)
+            : SourceProvider(sourceOrigin, url, startPosition, sourceType)
</ins><span class="cx">             , m_source(source.isNull() ? *StringImpl::empty() : *source.impl())
</span><span class="cx">         {
</span><span class="cx">         }
</span><span class="lines">@@ -117,9 +120,9 @@
</span><span class="cx"> #if ENABLE(WEBASSEMBLY)
</span><span class="cx">     class WebAssemblySourceProvider : public SourceProvider {
</span><span class="cx">     public:
</span><del>-        static Ref&lt;WebAssemblySourceProvider&gt; create(const Vector&lt;uint8_t&gt;&amp; data, const String&amp; url)
</del><ins>+        static Ref&lt;WebAssemblySourceProvider&gt; create(const Vector&lt;uint8_t&gt;&amp; data, const SourceOrigin&amp; sourceOrigin, const String&amp; url)
</ins><span class="cx">         {
</span><del>-            return adoptRef(*new WebAssemblySourceProvider(data, url));
</del><ins>+            return adoptRef(*new WebAssemblySourceProvider(data, sourceOrigin, url));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         unsigned hash() const override
</span><span class="lines">@@ -138,8 +141,8 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        WebAssemblySourceProvider(const Vector&lt;uint8_t&gt;&amp; data, const String&amp; url)
-            : SourceProvider(url, TextPosition(), SourceProviderSourceType::WebAssembly)
</del><ins>+        WebAssemblySourceProvider(const Vector&lt;uint8_t&gt;&amp; data, const SourceOrigin&amp; sourceOrigin, const String&amp; url)
+            : SourceProvider(sourceOrigin, url, TextPosition(), SourceProviderSourceType::WebAssembly)
</ins><span class="cx">             , m_source(&quot;[WebAssembly source]&quot;)
</span><span class="cx">             , m_data(data)
</span><span class="cx">         {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/runtime/FunctionConstructor.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ECMA 15.3.2 The Function Constructor
</span><del>-JSObject* constructFunction(ExecState* exec, JSGlobalObject* globalObject, const ArgList&amp; args, const Identifier&amp; functionName, const String&amp; sourceURL, const TextPosition&amp; position, FunctionConstructionMode functionConstructionMode, JSValue newTarget)
</del><ins>+JSObject* constructFunction(ExecState* exec, JSGlobalObject* globalObject, const ArgList&amp; args, const Identifier&amp; functionName, const SourceOrigin&amp; sourceOrigin, const String&amp; sourceURL, const TextPosition&amp; position, FunctionConstructionMode functionConstructionMode, JSValue newTarget)
</ins><span class="cx"> {
</span><span class="cx">     VM&amp; vm = exec-&gt;vm();
</span><span class="cx">     auto scope = DECLARE_THROW_SCOPE(vm);
</span><span class="lines">@@ -84,12 +84,12 @@
</span><span class="cx">     if (!globalObject-&gt;evalEnabled())
</span><span class="cx">         return throwException(exec, scope, createEvalError(exec, globalObject-&gt;evalDisabledErrorMessage()));
</span><span class="cx">     scope.release();
</span><del>-    return constructFunctionSkippingEvalEnabledCheck(exec, globalObject, args, functionName, sourceURL, position, -1, functionConstructionMode, newTarget);
</del><ins>+    return constructFunctionSkippingEvalEnabledCheck(exec, globalObject, args, functionName, sourceOrigin, sourceURL, position, -1, functionConstructionMode, newTarget);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSObject* constructFunctionSkippingEvalEnabledCheck(
</span><span class="cx">     ExecState* exec, JSGlobalObject* globalObject, const ArgList&amp; args, 
</span><del>-    const Identifier&amp; functionName, const String&amp; sourceURL, 
</del><ins>+    const Identifier&amp; functionName, const SourceOrigin&amp; sourceOrigin, const String&amp; sourceURL, 
</ins><span class="cx">     const TextPosition&amp; position, int overrideLineNumber, FunctionConstructionMode functionConstructionMode, JSValue newTarget)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = exec-&gt;vm();
</span><span class="lines">@@ -143,7 +143,7 @@
</span><span class="cx">         program = builder.toString();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SourceCode source = makeSource(program, sourceURL, position);
</del><ins>+    SourceCode source = makeSource(program, sourceOrigin, sourceURL, position);
</ins><span class="cx">     JSObject* exception = nullptr;
</span><span class="cx">     FunctionExecutable* function = FunctionExecutable::fromGlobalCode(functionName, *exec, source, exception, overrideLineNumber);
</span><span class="cx">     if (!function) {
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx"> // ECMA 15.3.2 The Function Constructor
</span><span class="cx"> JSObject* constructFunction(ExecState* exec, JSGlobalObject* globalObject, const ArgList&amp; args, FunctionConstructionMode functionConstructionMode, JSValue newTarget)
</span><span class="cx"> {
</span><del>-    return constructFunction(exec, globalObject, args, exec-&gt;propertyNames().anonymous, String(), TextPosition(), functionConstructionMode, newTarget);
</del><ins>+    return constructFunction(exec, globalObject, args, exec-&gt;propertyNames().anonymous, exec-&gt;callerSourceOrigin(), String(), TextPosition(), functionConstructionMode, newTarget);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/runtime/FunctionConstructor.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -61,11 +61,11 @@
</span><span class="cx">     Async,
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-JSObject* constructFunction(ExecState*, JSGlobalObject*, const ArgList&amp;, const Identifier&amp; functionName, const String&amp; sourceURL, const WTF::TextPosition&amp;, FunctionConstructionMode = FunctionConstructionMode::Function, JSValue newTarget = JSValue());
</del><ins>+JSObject* constructFunction(ExecState*, JSGlobalObject*, const ArgList&amp;, const Identifier&amp; functionName, const SourceOrigin&amp;, const String&amp; sourceURL, const WTF::TextPosition&amp;, FunctionConstructionMode = FunctionConstructionMode::Function, JSValue newTarget = JSValue());
</ins><span class="cx"> JSObject* constructFunction(ExecState*, JSGlobalObject*, const ArgList&amp;, FunctionConstructionMode = FunctionConstructionMode::Function, JSValue newTarget = JSValue());
</span><span class="cx"> 
</span><span class="cx"> JS_EXPORT_PRIVATE JSObject* constructFunctionSkippingEvalEnabledCheck(
</span><del>-    ExecState*, JSGlobalObject*, const ArgList&amp;, const Identifier&amp;, 
</del><ins>+    ExecState*, JSGlobalObject*, const ArgList&amp;, const Identifier&amp;, const SourceOrigin&amp;,
</ins><span class="cx">     const String&amp;, const WTF::TextPosition&amp;, int overrideLineNumber = -1,
</span><span class="cx">     FunctionConstructionMode = FunctionConstructionMode::Function, JSValue newTarget = JSValue());
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectFunctionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -679,8 +679,9 @@
</span><span class="cx">             return JSValue::encode(parsedObject);        
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    SourceOrigin sourceOrigin = exec-&gt;callerSourceOrigin();
</ins><span class="cx">     JSGlobalObject* calleeGlobalObject = exec-&gt;jsCallee()-&gt;globalObject();
</span><del>-    EvalExecutable* eval = IndirectEvalExecutable::create(exec, makeSource(s), false, DerivedContextType::None, false, EvalContextType::None);
</del><ins>+    EvalExecutable* eval = IndirectEvalExecutable::create(exec, makeSource(s, sourceOrigin), false, DerivedContextType::None, false, EvalContextType::None);
</ins><span class="cx">     if (!eval)
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeModuleLoaderPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ModuleLoaderPrototype.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ModuleLoaderPrototype.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/runtime/ModuleLoaderPrototype.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -111,7 +111,7 @@
</span><span class="cx">     String source = exec-&gt;argument(1).toWTFString(exec);
</span><span class="cx">     RETURN_IF_EXCEPTION(scope, encodedJSValue());
</span><span class="cx"> 
</span><del>-    SourceCode sourceCode = makeSource(source, moduleKey.impl(), TextPosition(), SourceProviderSourceType::Module);
</del><ins>+    SourceCode sourceCode = makeSource(source, SourceOrigin { moduleKey.impl() }, moduleKey.impl(), TextPosition(), SourceProviderSourceType::Module);
</ins><span class="cx"> 
</span><span class="cx">     CodeProfiling profile(sourceCode);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeScriptExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> 
</span><span class="cx">     const SourceCode&amp; source() const { return m_source; }
</span><span class="cx">     intptr_t sourceID() const { return m_source.providerID(); }
</span><ins>+    const SourceOrigin&amp; sourceOrigin() const { return m_source.provider()-&gt;sourceOrigin(); }
</ins><span class="cx">     const String&amp; sourceURL() const { return m_source.provider()-&gt;url(); }
</span><span class="cx">     int firstLine() const { return m_source.firstLine().oneBasedInt(); }
</span><span class="cx">     void setOverrideLineNumber(int overrideLineNumber) { m_overrideLineNumber = overrideLineNumber; }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSourceOriginh"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/runtime/SourceOrigin.h (0 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SourceOrigin.h                                (rev 0)
+++ trunk/Source/JavaScriptCore/runtime/SourceOrigin.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+/*
+ * Copyright (C) 2016 Yusuke Suzuki &lt;utatane.tea@gmail.com&gt;.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &lt;wtf/text/WTFString.h&gt;
+
+namespace JSC {
+
+class SourceOrigin {
+public:
+    explicit SourceOrigin(const String&amp; string)
+        : m_string(string)
+    {
+    }
+
+    SourceOrigin() = default;
+
+    const String&amp; string() const { return m_string; }
+    bool isNull() const { return m_string.isNull(); }
+
+private:
+    String m_string;
+};
+
+} // namespace JSC
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsFunctionOverridescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx">     newProviderStr.append(origHeader);
</span><span class="cx">     newProviderStr.append(newBody);
</span><span class="cx"> 
</span><del>-    auto newProvider = StringSourceProvider::create(newProviderStr, &quot;&lt;overridden&gt;&quot;);
</del><ins>+    auto newProvider = StringSourceProvider::create(newProviderStr, SourceOrigin { &quot;&lt;overridden&gt;&quot; }, &quot;&lt;overridden&gt;&quot;);
</ins><span class="cx"> 
</span><span class="cx">     info.firstLine = 1;
</span><span class="cx">     info.lineCount = 1; // Faking it. This doesn't really matter for now.
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebCore/ChangeLog        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2016-12-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Propagate the source origin as much as possible
+        https://bugs.webkit.org/show_bug.cgi?id=166348
+
+        Reviewed by Darin Adler.
+
+        * bindings/js/CachedScriptSourceProvider.h:
+        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
+        * bindings/js/JSLazyEventListener.cpp:
+        (WebCore::JSLazyEventListener::initializeJSFunction):
+        * bindings/js/ScriptSourceCode.h:
+        (WebCore::ScriptSourceCode::ScriptSourceCode):
+        * bridge/NP_jsobject.cpp:
+        (_NPN_Evaluate):
+        * bridge/objc/WebScriptObject.mm:
+        (-[WebScriptObject evaluateWebScript:]):
+
</ins><span class="cx"> 2016-12-24  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         [WebIDL] Remove (most) custom bindings for the IndexedDB code
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsCachedScriptSourceProviderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     CachedScriptSourceProvider(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType)
</span><del>-        : SourceProvider(cachedScript-&gt;response().url(), TextPosition(), sourceType)
</del><ins>+        : SourceProvider(JSC::SourceOrigin { cachedScript-&gt;response().url() }, cachedScript-&gt;response().url(), TextPosition(), sourceType)
</ins><span class="cx">         , m_cachedScript(cachedScript)
</span><span class="cx">     {
</span><span class="cx">         m_cachedScript-&gt;addClient(*this);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSLazyEventListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebCore/bindings/js/JSLazyEventListener.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx"> 
</span><span class="cx">     JSObject* jsFunction = constructFunctionSkippingEvalEnabledCheck(
</span><span class="cx">         exec, exec-&gt;lexicalGlobalObject(), args, Identifier::fromString(exec, m_functionName),
</span><del>-        m_sourceURL, m_sourcePosition, overrideLineNumber);
</del><ins>+        SourceOrigin { m_sourceURL }, m_sourceURL, m_sourcePosition, overrideLineNumber);
</ins><span class="cx"> 
</span><span class="cx">     if (UNLIKELY(scope.exception())) {
</span><span class="cx">         reportCurrentException(exec);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsScriptSourceCodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/ScriptSourceCode.h (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/ScriptSourceCode.h        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebCore/bindings/js/ScriptSourceCode.h        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> class ScriptSourceCode {
</span><span class="cx"> public:
</span><span class="cx">     ScriptSourceCode(const String&amp; source, const URL&amp; url = URL(), const TextPosition&amp; startPosition = TextPosition(), JSC::SourceProviderSourceType sourceType = JSC::SourceProviderSourceType::Program)
</span><del>-        : m_provider(JSC::StringSourceProvider::create(source, url.isNull() ? String() : url.string(), startPosition, sourceType))
</del><ins>+        : m_provider(JSC::StringSourceProvider::create(source, JSC::SourceOrigin { url.string() }, url.string(), startPosition, sourceType))
</ins><span class="cx">         , m_code(m_provider, startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt())
</span><span class="cx">         , m_url(url)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceWebCorebridgeNP_jsobjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bridge/NP_jsobject.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bridge/NP_jsobject.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebCore/bridge/NP_jsobject.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -277,7 +277,7 @@
</span><span class="cx">         ExecState* exec = globalObject-&gt;globalExec();
</span><span class="cx">         String scriptString = convertNPStringToUTF16(s);
</span><span class="cx">         
</span><del>-        JSValue returnValue = JSC::evaluate(exec, makeSource(scriptString), JSC::JSValue());
</del><ins>+        JSValue returnValue = JSC::evaluate(exec, JSC::makeSource(scriptString, { }), JSC::JSValue());
</ins><span class="cx"> 
</span><span class="cx">         convertValueToNPVariant(exec, returnValue, variant);
</span><span class="cx">         scope.clearException();
</span></span></pre></div>
<a id="trunkSourceWebCorebridgeobjcWebScriptObjectmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bridge/objc/WebScriptObject.mm (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bridge/objc/WebScriptObject.mm        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebCore/bridge/objc/WebScriptObject.mm        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -381,7 +381,7 @@
</span><span class="cx">     ExecState* exec = globalObject-&gt;globalExec();
</span><span class="cx">     UNUSED_PARAM(scope);
</span><span class="cx">     
</span><del>-    JSC::JSValue returnValue = JSMainThreadExecState::profiledEvaluate(exec, JSC::ProfilingReason::Other, makeSource(String(script)), JSC::JSValue());
</del><ins>+    JSC::JSValue returnValue = JSMainThreadExecState::profiledEvaluate(exec, JSC::ProfilingReason::Other, makeSource(String(script), { }), JSC::JSValue());
</ins><span class="cx"> 
</span><span class="cx">     id resultObj = [WebScriptObject _convertValueToObjcValue:returnValue originRootObject:[self _originRootObject] rootObject:[self _rootObject]];
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-12-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Propagate the source origin as much as possible
+        https://bugs.webkit.org/show_bug.cgi?id=166348
+
+        Reviewed by Darin Adler.
+
+        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+        (WebKit::NetscapePluginInstanceProxy::evaluate):
+
</ins><span class="cx"> 2016-12-23  Andy Estes  &lt;aestes@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] DumpRenderTree triggers an assertion failure when calling +[WebPreferences _switchNetworkLoaderToNewTestingSession]
</span></span></pre></div>
<a id="trunkSourceWebKitmacPluginsHostedNetscapePluginInstanceProxymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -891,7 +891,7 @@
</span><span class="cx"> 
</span><span class="cx">     UserGestureIndicator gestureIndicator(allowPopups ? std::optional&lt;ProcessingUserGestureState&gt;(ProcessingUserGesture) : std::nullopt);
</span><span class="cx">     
</span><del>-    JSValue result = JSC::evaluate(exec, makeSource(script));
</del><ins>+    JSValue result = JSC::evaluate(exec, JSC::makeSource(script, { }));
</ins><span class="cx">     
</span><span class="cx">     marshalValue(exec, result, resultData, resultLength);
</span><span class="cx">     scope.clearException();
</span></span></pre></div>
<a id="trunkSourceWebKitwinChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/ChangeLog (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/ChangeLog        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebKit/win/ChangeLog        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-12-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Propagate the source origin as much as possible
+        https://bugs.webkit.org/show_bug.cgi?id=166348
+
+        Reviewed by Darin Adler.
+
+        * Plugins/PluginPackage.cpp:
+        (WebCore::NPN_Evaluate):
+        (WebCore::makeSource): Deleted.
+
</ins><span class="cx"> 2016-12-22  Andy Estes  &lt;aestes@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Make WebCore::EditorInsertAction an enum class
</span></span></pre></div>
<a id="trunkSourceWebKitwinPluginsPluginPackagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/Plugins/PluginPackage.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/Plugins/PluginPackage.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebKit/win/Plugins/PluginPackage.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -192,11 +192,6 @@
</span><span class="cx">         aList.append(JSC::Bindings::convertNPVariantToValue(exec, &amp;args[i], rootObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline JSC::SourceCode makeSource(const String&amp; source, const String&amp; url = String(), const TextPosition&amp; startPosition = TextPosition())
-{
-    return JSC::SourceCode(JSC::StringSourceProvider::create(source, url, startPosition), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt());
-}
-
</del><span class="cx"> static bool NPN_Evaluate(NPP instance, NPObject* o, NPString* s, NPVariant* variant)
</span><span class="cx"> {
</span><span class="cx">     if (o-&gt;_class == NPScriptObjectClass) {
</span><span class="lines">@@ -218,7 +213,7 @@
</span><span class="cx">         JSC::ExecState* exec = globalObject-&gt;globalExec();
</span><span class="cx">         String scriptString = JSC::Bindings::convertNPStringToUTF16(s);
</span><span class="cx"> 
</span><del>-        JSC::JSValue returnValue = JSC::evaluate(exec, makeSource(scriptString), JSC::JSValue());
</del><ins>+        JSC::JSValue returnValue = JSC::evaluate(exec, JSC::makeSource(scriptString, { }), JSC::JSValue());
</ins><span class="cx"> 
</span><span class="cx">         JSC::Bindings::convertValueToNPVariant(exec, returnValue, variant);
</span><span class="cx">         scope.clearException();
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebKit2/ChangeLog        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-12-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        Propagate the source origin as much as possible
+        https://bugs.webkit.org/show_bug.cgi?id=166348
+
+        Reviewed by Darin Adler.
+
+        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
+        (WebKit::NPRuntimeObjectMap::evaluate):
+
</ins><span class="cx"> 2016-12-22  Andy Estes  &lt;aestes@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reduce QuickLook.h include overhead
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsNetscapeNPRuntimeObjectMapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp (210148 => 210149)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp        2016-12-26 01:33:33 UTC (rev 210148)
+++ trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp        2016-12-26 06:35:07 UTC (rev 210149)
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx">     JSLockHolder lock(exec);
</span><span class="cx">     JSValue thisValue = getOrCreateJSObject(globalObject.get(), npObject);
</span><span class="cx"> 
</span><del>-    JSValue resultValue = JSC::evaluate(exec, makeSource(scriptString), thisValue);
</del><ins>+    JSValue resultValue = JSC::evaluate(exec, makeSource(scriptString, { }), thisValue);
</ins><span class="cx"> 
</span><span class="cx">     convertJSValueToNPVariant(exec, resultValue, *result);
</span><span class="cx">     return true;
</span></span></pre>
</div>
</div>

</body>
</html>