<!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>[209632] trunk/Source</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/209632">209632</a></dd>
<dt>Author</dt> <dd>ggaren@apple.com</dd>
<dt>Date</dt> <dd>2016-12-09 14:59:52 -0800 (Fri, 09 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Deploy OrdinalNumber in JSC::SourceCode
https://bugs.webkit.org/show_bug.cgi?id=165687

Reviewed by Michael Saboff.

Source/JavaScriptCore:

We have a lot of confusion between 1-based and 0-based counting in line
and column numbers. Let's use OrdinalNumber to clear up the confusion.

* bytecode/UnlinkedFunctionExecutable.cpp:
(JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
(JSC::UnlinkedFunctionExecutable::link):
* bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::emitExpressionInfo):
* inspector/JSInjectedScriptHost.cpp:
(Inspector::JSInjectedScriptHost::functionDetails):
* parser/Lexer.cpp:
(JSC::Lexer&lt;T&gt;::setCode):
* parser/Parser.cpp:
(JSC::Parser&lt;LexerType&gt;::Parser):
* parser/Parser.h:
(JSC::Parser&lt;LexerType&gt;::parse):
* parser/SourceCode.h:
(JSC::SourceCode::SourceCode):
(JSC::SourceCode::firstLine):
(JSC::SourceCode::startColumn):
* runtime/CodeCache.cpp:
(JSC::CodeCache::getUnlinkedGlobalCodeBlock):
* runtime/ScriptExecutable.h:
(JSC::ScriptExecutable::firstLine):
(JSC::ScriptExecutable::startColumn):
* tools/CodeProfile.h:
(JSC::CodeProfile::CodeProfile):

Source/WebCore:

Updated for interface changes.

* bindings/js/ScriptController.cpp:
(WebCore::ScriptController::evaluateModule):
* bindings/js/ScriptSourceCode.h:
(WebCore::ScriptSourceCode::startLine):

Source/WTF:

* wtf/text/OrdinalNumber.h:
(WTF::OrdinalNumber::operator&gt;): Added a &gt;.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutablecpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp">trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserLexercpp">trunk/Source/JavaScriptCore/parser/Lexer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParsercpp">trunk/Source/JavaScriptCore/parser/Parser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserParserh">trunk/Source/JavaScriptCore/parser/Parser.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserSourceCodeh">trunk/Source/JavaScriptCore/parser/SourceCode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCodeCachecpp">trunk/Source/JavaScriptCore/runtime/CodeCache.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeScriptExecutableh">trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsCodeProfileh">trunk/Source/JavaScriptCore/tools/CodeProfile.h</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtftextOrdinalNumberh">trunk/Source/WTF/wtf/text/OrdinalNumber.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsScriptControllercpp">trunk/Source/WebCore/bindings/js/ScriptController.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsScriptSourceCodeh">trunk/Source/WebCore/bindings/js/ScriptSourceCode.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -1,3 +1,38 @@
</span><ins>+2016-12-09  Geoffrey Garen  &lt;ggaren@apple.com&gt;
+
+        Deploy OrdinalNumber in JSC::SourceCode
+        https://bugs.webkit.org/show_bug.cgi?id=165687
+
+        Reviewed by Michael Saboff.
+
+        We have a lot of confusion between 1-based and 0-based counting in line
+        and column numbers. Let's use OrdinalNumber to clear up the confusion.
+
+        * bytecode/UnlinkedFunctionExecutable.cpp:
+        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
+        (JSC::UnlinkedFunctionExecutable::link):
+        * bytecompiler/BytecodeGenerator.h:
+        (JSC::BytecodeGenerator::emitExpressionInfo):
+        * inspector/JSInjectedScriptHost.cpp:
+        (Inspector::JSInjectedScriptHost::functionDetails):
+        * parser/Lexer.cpp:
+        (JSC::Lexer&lt;T&gt;::setCode):
+        * parser/Parser.cpp:
+        (JSC::Parser&lt;LexerType&gt;::Parser):
+        * parser/Parser.h:
+        (JSC::Parser&lt;LexerType&gt;::parse):
+        * parser/SourceCode.h:
+        (JSC::SourceCode::SourceCode):
+        (JSC::SourceCode::firstLine):
+        (JSC::SourceCode::startColumn):
+        * runtime/CodeCache.cpp:
+        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
+        * runtime/ScriptExecutable.h:
+        (JSC::ScriptExecutable::firstLine):
+        (JSC::ScriptExecutable::startColumn):
+        * tools/CodeProfile.h:
+        (JSC::CodeProfile::CodeProfile):
+
</ins><span class="cx"> 2016-12-09  Saam Barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebAssembly JS API: implement importing and defining Memory
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx"> 
</span><span class="cx"> UnlinkedFunctionExecutable::UnlinkedFunctionExecutable(VM* vm, Structure* structure, const SourceCode&amp; parentSource, SourceCode&amp;&amp; parentSourceOverride, FunctionMetadataNode* node, UnlinkedFunctionKind kind, ConstructAbility constructAbility, JSParserScriptMode scriptMode, VariableEnvironment&amp; parentScopeTDZVariables, DerivedContextType derivedContextType)
</span><span class="cx">     : Base(*vm, structure)
</span><del>-    , m_firstLineOffset(node-&gt;firstLine() - parentSource.firstLine())
</del><ins>+    , m_firstLineOffset(node-&gt;firstLine() - parentSource.firstLine().oneBasedInt())
</ins><span class="cx">     , m_lineCount(node-&gt;lastLine() - node-&gt;firstLine())
</span><span class="cx">     , m_unlinkedFunctionNameStart(node-&gt;functionNameStart() - parentSource.startOffset())
</span><span class="cx">     , m_unlinkedBodyStartColumn(node-&gt;startColumn())
</span><span class="lines">@@ -134,11 +134,11 @@
</span><span class="cx"> FunctionExecutable* UnlinkedFunctionExecutable::link(VM&amp; vm, const SourceCode&amp; passedParentSource, std::optional&lt;int&gt; overrideLineNumber, Intrinsic intrinsic)
</span><span class="cx"> {
</span><span class="cx">     const SourceCode&amp; parentSource = m_parentSourceOverride.isNull() ? passedParentSource : m_parentSourceOverride;
</span><del>-    unsigned firstLine = parentSource.firstLine() + m_firstLineOffset;
</del><ins>+    unsigned firstLine = parentSource.firstLine().oneBasedInt() + m_firstLineOffset;
</ins><span class="cx">     unsigned startOffset = parentSource.startOffset() + m_startOffset;
</span><span class="cx">     unsigned lineCount = m_lineCount;
</span><span class="cx"> 
</span><del>-    unsigned startColumn = linkedStartColumn(parentSource.startColumn());
</del><ins>+    unsigned startColumn = linkedStartColumn(parentSource.startColumn().oneBasedInt());
</ins><span class="cx">     unsigned endColumn = linkedEndColumn(startColumn);
</span><span class="cx"> 
</span><span class="cx">     SourceCode source(parentSource.provider(), startOffset, startOffset + m_sourceLength, firstLine, startColumn);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -445,7 +445,7 @@
</span><span class="cx">             ASSERT(divotEnd.offset &gt;= divot.offset);
</span><span class="cx"> 
</span><span class="cx">             int sourceOffset = m_scopeNode-&gt;source().startOffset();
</span><del>-            unsigned firstLine = m_scopeNode-&gt;source().firstLine();
</del><ins>+            unsigned firstLine = m_scopeNode-&gt;source().firstLine().oneBasedInt();
</ins><span class="cx"> 
</span><span class="cx">             int divotOffset = divot.offset - sourceOffset;
</span><span class="cx">             int startOffset = divot.offset - divotStart.offset;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -215,10 +215,10 @@
</span><span class="cx">         return jsUndefined();
</span><span class="cx"> 
</span><span class="cx">     // In the inspector protocol all positions are 0-based while in SourceCode they are 1-based
</span><del>-    int lineNumber = sourceCode-&gt;firstLine();
</del><ins>+    int lineNumber = sourceCode-&gt;firstLine().oneBasedInt();
</ins><span class="cx">     if (lineNumber)
</span><span class="cx">         lineNumber -= 1;
</span><del>-    int columnNumber = sourceCode-&gt;startColumn();
</del><ins>+    int columnNumber = sourceCode-&gt;startColumn().oneBasedInt();
</ins><span class="cx">     if (columnNumber)
</span><span class="cx">         columnNumber -= 1;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserLexercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Lexer.cpp (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Lexer.cpp        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/parser/Lexer.cpp        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -541,7 +541,7 @@
</span><span class="cx"> {
</span><span class="cx">     m_arena = &amp;arena-&gt;identifierArena();
</span><span class="cx">     
</span><del>-    m_lineNumber = source.firstLine();
</del><ins>+    m_lineNumber = source.firstLine().oneBasedInt();
</ins><span class="cx">     m_lastToken = -1;
</span><span class="cx">     
</span><span class="cx">     StringView sourceString = source.provider()-&gt;source();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.cpp (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.cpp        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/parser/Parser.cpp        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -207,7 +207,7 @@
</span><span class="cx"> {
</span><span class="cx">     m_lexer = std::make_unique&lt;LexerType&gt;(vm, builtinMode, scriptMode);
</span><span class="cx">     m_lexer-&gt;setCode(source, &amp;m_parserArena);
</span><del>-    m_token.m_location.line = source.firstLine();
</del><ins>+    m_token.m_location.line = source.firstLine().oneBasedInt();
</ins><span class="cx">     m_token.m_location.startOffset = source.startOffset();
</span><span class="cx">     m_token.m_location.endOffset = source.startOffset();
</span><span class="cx">     m_token.m_location.lineStartOffset = source.startOffset();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Parser.h (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Parser.h        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/parser/Parser.h        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -1790,8 +1790,8 @@
</span><span class="cx">     errMsg = String();
</span><span class="cx"> 
</span><span class="cx">     JSTokenLocation startLocation(tokenLocation());
</span><del>-    ASSERT(m_source-&gt;startColumn() &gt; 0);
-    unsigned startColumn = m_source-&gt;startColumn() - 1;
</del><ins>+    ASSERT(m_source-&gt;startColumn() &gt; OrdinalNumber::beforeFirst());
+    unsigned startColumn = m_source-&gt;startColumn().zeroBasedInt();
</ins><span class="cx"> 
</span><span class="cx">     String parseError = parseInner(calleeName, parseMode);
</span><span class="cx"> 
</span><span class="lines">@@ -1830,7 +1830,7 @@
</span><span class="cx">                                     currentScope()-&gt;innerArrowFunctionFeatures(),
</span><span class="cx">                                     m_numConstants,
</span><span class="cx">                                     WTFMove(m_moduleScopeData));
</span><del>-        result-&gt;setLoc(m_source-&gt;firstLine(), m_lexer-&gt;lineNumber(), m_lexer-&gt;currentOffset(), m_lexer-&gt;currentLineStartOffset());
</del><ins>+        result-&gt;setLoc(m_source-&gt;firstLine().oneBasedInt(), m_lexer-&gt;lineNumber(), m_lexer-&gt;currentOffset(), m_lexer-&gt;currentLineStartOffset());
</ins><span class="cx">         result-&gt;setEndOffset(m_lexer-&gt;currentOffset());
</span><span class="cx"> 
</span><span class="cx">         if (!isFunctionParseMode(parseMode)) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserSourceCodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/SourceCode.h (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/SourceCode.h        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/parser/SourceCode.h        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -36,34 +36,32 @@
</span><span class="cx">     public:
</span><span class="cx">         SourceCode()
</span><span class="cx">             : UnlinkedSourceCode()
</span><del>-            , m_firstLine(0)
-            , m_startColumn(0)
</del><ins>+            , m_firstLine(OrdinalNumber::beforeFirst())
+            , m_startColumn(OrdinalNumber::beforeFirst())
</ins><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         SourceCode(PassRefPtr&lt;SourceProvider&gt; provider)
</span><span class="cx">             : UnlinkedSourceCode(provider)
</span><del>-            , m_firstLine(1)
-            , m_startColumn(1)
</del><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         SourceCode(PassRefPtr&lt;SourceProvider&gt; provider, int firstLine, int startColumn)
</span><span class="cx">             : UnlinkedSourceCode(provider)
</span><del>-            , m_firstLine(std::max(firstLine, 1))
-            , m_startColumn(std::max(startColumn, 1))
</del><ins>+            , m_firstLine(OrdinalNumber::fromOneBasedInt(std::max(firstLine, 1)))
+            , m_startColumn(OrdinalNumber::fromOneBasedInt(std::max(startColumn, 1)))
</ins><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         SourceCode(PassRefPtr&lt;SourceProvider&gt; provider, int startOffset, int endOffset, int firstLine, int startColumn)
</span><span class="cx">             : UnlinkedSourceCode(provider, startOffset, endOffset)
</span><del>-            , m_firstLine(std::max(firstLine, 1))
-            , m_startColumn(std::max(startColumn, 1))
</del><ins>+            , m_firstLine(OrdinalNumber::fromOneBasedInt(std::max(firstLine, 1)))
+            , m_startColumn(OrdinalNumber::fromOneBasedInt(std::max(startColumn, 1)))
</ins><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        int firstLine() const { return m_firstLine; }
-        int startColumn() const { return m_startColumn; }
</del><ins>+        OrdinalNumber firstLine() const { return m_firstLine; }
+        OrdinalNumber startColumn() const { return m_startColumn; }
</ins><span class="cx"> 
</span><span class="cx">         intptr_t providerID() const
</span><span class="cx">         {
</span><span class="lines">@@ -77,8 +75,8 @@
</span><span class="cx">         SourceCode subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn);
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        int m_firstLine;
-        int m_startColumn;
</del><ins>+        OrdinalNumber m_firstLine;
+        OrdinalNumber m_startColumn;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     inline SourceCode makeSource(const String&amp; source, const String&amp; url = String(), const TextPosition&amp; startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCodeCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CodeCache.cpp (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/runtime/CodeCache.cpp        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -62,10 +62,10 @@
</span><span class="cx">     if (cache &amp;&amp; Options::useCodeCache()) {
</span><span class="cx">         UnlinkedCodeBlockType* unlinkedCodeBlock = jsCast&lt;UnlinkedCodeBlockType*&gt;(cache-&gt;cell.get());
</span><span class="cx">         unsigned lineCount = unlinkedCodeBlock-&gt;lineCount();
</span><del>-        unsigned startColumn = unlinkedCodeBlock-&gt;startColumn() + source.startColumn();
</del><ins>+        unsigned startColumn = unlinkedCodeBlock-&gt;startColumn() + source.startColumn().oneBasedInt();
</ins><span class="cx">         bool endColumnIsOnStartLine = !lineCount;
</span><span class="cx">         unsigned endColumn = unlinkedCodeBlock-&gt;endColumn() + (endColumnIsOnStartLine ? startColumn : 1);
</span><del>-        executable-&gt;recordParse(unlinkedCodeBlock-&gt;codeFeatures(), unlinkedCodeBlock-&gt;hasCapturedVariables(), source.firstLine() + lineCount, endColumn);
</del><ins>+        executable-&gt;recordParse(unlinkedCodeBlock-&gt;codeFeatures(), unlinkedCodeBlock-&gt;hasCapturedVariables(), source.firstLine().oneBasedInt() + lineCount, endColumn);
</ins><span class="cx">         source.provider()-&gt;setSourceURLDirective(unlinkedCodeBlock-&gt;sourceURLDirective());
</span><span class="cx">         source.provider()-&gt;setSourceMappingURLDirective(unlinkedCodeBlock-&gt;sourceMappingURLDirective());
</span><span class="cx">         return unlinkedCodeBlock;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeScriptExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/runtime/ScriptExecutable.h        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -41,12 +41,12 @@
</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><span class="cx">     const String&amp; sourceURL() const { return m_source.provider()-&gt;url(); }
</span><del>-    int firstLine() const { return m_source.firstLine(); }
</del><ins>+    int firstLine() const { return m_source.firstLine().oneBasedInt(); }
</ins><span class="cx">     void setOverrideLineNumber(int overrideLineNumber) { m_overrideLineNumber = overrideLineNumber; }
</span><span class="cx">     bool hasOverrideLineNumber() const { return m_overrideLineNumber != -1; }
</span><span class="cx">     int overrideLineNumber() const { return m_overrideLineNumber; }
</span><span class="cx">     int lastLine() const { return m_lastLine; }
</span><del>-    unsigned startColumn() const { return m_source.startColumn(); }
</del><ins>+    unsigned startColumn() const { return m_source.startColumn().oneBasedInt(); }
</ins><span class="cx">     unsigned endColumn() const { return m_endColumn; }
</span><span class="cx">     unsigned typeProfilingStartOffset() const { return m_typeProfilingStartOffset; }
</span><span class="cx">     unsigned typeProfilingEndOffset() const { return m_typeProfilingEndOffset; }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsCodeProfileh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/CodeProfile.h (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/CodeProfile.h        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/JavaScriptCore/tools/CodeProfile.h        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> public:
</span><span class="cx">     CodeProfile(const SourceCode&amp; source, CodeProfile* parent)
</span><span class="cx">         : m_file(source.provider()-&gt;url().utf8())
</span><del>-        , m_lineNumber(source.firstLine())
</del><ins>+        , m_lineNumber(source.firstLine().oneBasedInt())
</ins><span class="cx">         , m_parent(parent)
</span><span class="cx">     {
</span><span class="cx">         if (parent)
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/WTF/ChangeLog        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -1,5 +1,15 @@
</span><span class="cx"> 2016-12-09  Geoffrey Garen  &lt;ggaren@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Deploy OrdinalNumber in JSC::SourceCode
+        https://bugs.webkit.org/show_bug.cgi?id=165687
+
+        Reviewed by Michael Saboff.
+
+        * wtf/text/OrdinalNumber.h:
+        (WTF::OrdinalNumber::operator&gt;): Added a &gt;.
+
+2016-12-09  Geoffrey Garen  &lt;ggaren@apple.com&gt;
+
</ins><span class="cx">         TextPosition and OrdinalNumber should be more like idiomatic numbers
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=165678
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWTFwtftextOrdinalNumberh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/OrdinalNumber.h (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/OrdinalNumber.h        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/WTF/wtf/text/OrdinalNumber.h        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> // call a first element '0' or '1' which makes integer type ambiguous.
</span><span class="cx"> class OrdinalNumber {
</span><span class="cx"> public:
</span><ins>+    static OrdinalNumber beforeFirst() { return OrdinalNumber(-1); }
</ins><span class="cx">     static OrdinalNumber fromZeroBasedInt(int zeroBasedInt) { return OrdinalNumber(zeroBasedInt); }
</span><span class="cx">     static OrdinalNumber fromOneBasedInt(int oneBasedInt) { return OrdinalNumber(oneBasedInt - 1); }
</span><span class="cx"> 
</span><span class="lines">@@ -41,9 +42,8 @@
</span><span class="cx"> 
</span><span class="cx">     bool operator==(OrdinalNumber other) { return m_zeroBasedValue == other.m_zeroBasedValue; }
</span><span class="cx">     bool operator!=(OrdinalNumber other) { return !((*this) == other); }
</span><ins>+    bool operator&gt;(OrdinalNumber other) { return m_zeroBasedValue &gt; other.m_zeroBasedValue; }
</ins><span class="cx"> 
</span><del>-    static OrdinalNumber beforeFirst() { return OrdinalNumber(-1); }
-
</del><span class="cx"> private:
</span><span class="cx">     OrdinalNumber(int zeroBasedInt) : m_zeroBasedValue(zeroBasedInt) { }
</span><span class="cx">     int m_zeroBasedValue;
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/WebCore/ChangeLog        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-12-09  Geoffrey Garen  &lt;ggaren@apple.com&gt;
+
+        Deploy OrdinalNumber in JSC::SourceCode
+        https://bugs.webkit.org/show_bug.cgi?id=165687
+
+        Reviewed by Michael Saboff.
+
+        Updated for interface changes.
+
+        * bindings/js/ScriptController.cpp:
+        (WebCore::ScriptController::evaluateModule):
+        * bindings/js/ScriptSourceCode.h:
+        (WebCore::ScriptSourceCode::startLine):
+
</ins><span class="cx"> 2016-12-09  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Some resources fetched via Fetch API do not have data
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsScriptControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/ScriptController.cpp (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/ScriptController.cpp        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/WebCore/bindings/js/ScriptController.cpp        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;Frame&gt; protector(m_frame);
</span><span class="cx"> 
</span><del>-    auto cookie = InspectorInstrumentation::willEvaluateScript(m_frame, sourceURL, jsSourceCode.firstLine());
</del><ins>+    auto cookie = InspectorInstrumentation::willEvaluateScript(m_frame, sourceURL, jsSourceCode.firstLine().oneBasedInt());
</ins><span class="cx"> 
</span><span class="cx">     auto returnValue = moduleRecord.evaluate(&amp;state);
</span><span class="cx">     InspectorInstrumentation::didEvaluateScript(cookie, m_frame);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsScriptSourceCodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/ScriptSourceCode.h (209631 => 209632)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/ScriptSourceCode.h        2016-12-09 22:43:54 UTC (rev 209631)
+++ trunk/Source/WebCore/bindings/js/ScriptSourceCode.h        2016-12-09 22:59:52 UTC (rev 209632)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> 
</span><span class="cx">     StringView source() const { return m_provider-&gt;source(); }
</span><span class="cx"> 
</span><del>-    int startLine() const { return m_code.firstLine(); }
</del><ins>+    int startLine() const { return m_code.firstLine().oneBasedInt(); }
</ins><span class="cx"> 
</span><span class="cx">     CachedScript* cachedScript() const { return m_cachedScript.get(); }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>