Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Move more time functions to native code. NFC - #16439

Merged
sbc100 merged 1 commit into
mainfrom
time_library_funcs
Mar 9, 2022
Merged

Move more time functions to native code. NFC#16439
sbc100 merged 1 commit into
mainfrom
time_library_funcs

Conversation

@sbc100

Copy link
Copy Markdown
Collaborator

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.

Inspired by #16401

@sbc100
sbc100force-pushed the time_library_funcs branch from 071e9be to d755dfeCompareMarch 7, 2022 19:56
@sbc100
sbc100 requested review from kleisauke and kripkenMarch 7, 2022 20:06
@sbc100
sbc100force-pushed the time_library_funcs branch 2 times, most recently from f6098a6 to cc94147CompareMarch 7, 2022 21:55
@sbc100
sbc100 changed the base branch from main to exportRuntimeMarch 8, 2022 00:37
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to natice code with #16439.
sbc100 added a commit that referenced this pull request Mar 8, 2022
…unction. NFC (#16442)
This test was under `core` instead of `other`.
Avoiding the use of `clock_gettime` since I'm about move that
to native code with #16439.
@sbc100
sbc100force-pushed the time_library_funcs branch from cc94147 to 01febf8CompareMarch 8, 2022 01:52
Base automatically changed from exportRuntime to mainMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from 01febf8 to e29e125CompareMarch 8, 2022 02:39
@sbc100
sbc100force-pushed the time_library_funcs branch from e29e125 to 61b3005CompareMarch 8, 2022 05:31
@sbc100
sbc100 requested a review from tlivelyMarch 9, 2022 07:04

@kleisaukekleisauke left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Left a possible further improvement as inline comment.

Comment threadsrc/library.js
// Represents whether emscripten_get_now is guaranteed monotonic; the Date.now
// implementation is not :(
$nowIsMonotonic__internal: true,
#if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! Feel free to propose a PR.. or open a bug to refactor that.

I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
@sbc100
sbc100force-pushed the time_library_funcs branch from 61b3005 to 6229f01CompareMarch 9, 2022 15:54
@sbc100
sbc100 enabled auto-merge (squash) March 9, 2022 15:54
@sbc100
sbc100 merged commit fa6afb8 into mainMar 9, 2022
@sbc100
sbc100 deleted the time_library_funcs branch March 9, 2022 18:21
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
@sbc100sbc100 mentioned this pull request Jul 8, 2022
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
sbc100 added a commit that referenced this pull request Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in #16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See #16606 and #16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: #17393
xbcnn pushed a commit to xbcnn/emscripten that referenced this pull request Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit
was only recently made in emscripten-core#16966. The reason we made this change was
made was because we had certain C library calls that were implemented in
JS that returned `time_t`. Since returning 64-bit values from JS
functions is not always easy (we don't always have WASM_BIGINT
available) that simplest solution was to define `time_t` to 32-bit which
doesn't have issues at the JS boundary.
However, in the intervening time many of the `time_t`-returning function
have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two
remaining: _mktime_js and _timegm_js. So this change redefines just
those two functions to return `int` while keeping `time_t` itself as
64-bit.
Fixes: emscripten-core#17393
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@sbc100@kleisauke