Skip to content

Commit a2a8b78

Browse files
authored
Add auto-generated sigs for the fetch API. NFC (#19067)
Followup to #19028 which laid the groundwork for auto-generated sigs.
1 parent 79a7ca9 commit a2a8b78

File tree

8 files changed

+39
-18
lines changed

8 files changed

+39
-18
lines changed

src/library_fetch.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ var LibraryFetch = {
1313
$Fetch__postset: 'Fetch.staticInit();',
1414
#endif
1515
$Fetch: Fetch,
16-
_emscripten_fetch_get_response_headers_length__sig: 'pi',
1716
_emscripten_fetch_get_response_headers_length: fetchGetResponseHeadersLength,
18-
_emscripten_fetch_get_response_headers__sig: 'pipp',
1917
_emscripten_fetch_get_response_headers: fetchGetResponseHeaders,
2018
_emscripten_fetch_free: fetchFree,
2119

@@ -26,7 +24,6 @@ var LibraryFetch = {
2624
#endif
2725
$fetchXHR: fetchXHR,
2826

29-
emscripten_start_fetch__sig: 'vp',
3027
emscripten_start_fetch: startFetch,
3128
emscripten_start_fetch__deps: [
3229
'$Fetch',

src/library_sigs.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,9 @@ sigs = {
271271
_emscripten_dbg__sig: 'vp',
272272
_emscripten_dlopen_js__sig: 'vpppp',
273273
_emscripten_err__sig: 'vp',
274+
_emscripten_fetch_free__sig: 'vi',
275+
_emscripten_fetch_get_response_headers__sig: 'pipp',
276+
_emscripten_fetch_get_response_headers_length__sig: 'pi',
274277
_emscripten_fs_load_embedded_files__sig: 'vp',
275278
_emscripten_get_now_is_monotonic__sig: 'i',
276279
_emscripten_get_progname__sig: 'vpi',
@@ -601,6 +604,7 @@ sigs = {
601604
emscripten_sleep__sig: 'vi',
602605
emscripten_stack_snapshot__sig: 'p',
603606
emscripten_stack_unwind_buffer__sig: 'ippi',
607+
emscripten_start_fetch__sig: 'vp',
604608
emscripten_supports_offscreencanvas__sig: 'i',
605609
emscripten_throw_number__sig: 'vd',
606610
emscripten_throw_string__sig: 'vp',

src/utility.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,10 @@ function mergeInto(obj, other, options = null) {
145145
if (obj.hasOwnProperty(key)) {
146146
const oldsig = obj[key];
147147
const newsig = other[key];
148-
if (oldsig != newsig) {
149-
error(`Signature redefinition for: ${key}. (old=${oldsig} vs new=${newsig})`);
148+
if (oldsig == newsig) {
149+
warn(`signature redefinition for: ${key}. (old=${oldsig} vs new=${newsig})`);
150+
} else {
151+
error(`signature redefinition for: ${key}. (old=${oldsig} vs new=${newsig})`);
150152
}
151153
}
152154
}

system/lib/fetch/emscripten_fetch.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include <emscripten/threading.h>
1818
#include <emscripten/console.h>
1919

20+
#include "emscripten_internal.h"
21+
2022
// From https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState
2123
#define STATE_UNSENT 0 // Client has been created. open() not called yet.
2224
#define STATE_OPENED 1 // open() has been called.
@@ -31,12 +33,6 @@
3133

3234
static void fetch_free(emscripten_fetch_t* fetch);
3335

34-
// APIs defined in JS
35-
void emscripten_start_fetch(emscripten_fetch_t* fetch);
36-
size_t _emscripten_fetch_get_response_headers_length(int32_t fetchID);
37-
size_t _emscripten_fetch_get_response_headers(int32_t fetchID, char *dst, size_t dstSizeBytes);
38-
void _emscripten_fetch_free(unsigned int);
39-
4036
typedef struct emscripten_fetch_queue {
4137
emscripten_fetch_t** queuedOperations;
4238
int numQueuedItems;

system/lib/libc/emscripten_internal.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ void _emscripten_throw_longjmp(void);
107107

108108
void __handle_stack_overflow(void* addr);
109109

110+
// Internal fetch API
111+
struct emscripten_fetch_t;
112+
void emscripten_start_fetch(struct emscripten_fetch_t* fetch);
113+
size_t _emscripten_fetch_get_response_headers_length(int32_t fetchID);
114+
size_t _emscripten_fetch_get_response_headers(int32_t fetchID, char *dst, size_t dstSizeBytes);
115+
void _emscripten_fetch_free(unsigned int);
116+
110117
#ifdef __cplusplus
111118
}
112119
#endif

test/test_other.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3849,18 +3849,17 @@ def test_js_internal_deps(self):
38493849
err = self.run_process([EMCC, 'src.c', '--js-library', 'lib.js'], stderr=PIPE).stderr
38503850
self.assertContained("warning: user library symbol 'jslibfunc' depends on internal symbol '$callRuntimeCallbacks'", err)
38513851

3852-
def test_js_lib_sig_mismatch(self):
3852+
def test_js_lib_sig_redefinition(self):
38533853
create_file('lib.js', r'''
38543854
mergeInto(LibraryManager.library, {
38553855
jslibfunc__sig: 'ii',
38563856
jslibfunc: function(x) {},
38573857
});
38583858

38593859
mergeInto(LibraryManager.library, {
3860-
jslibfunc__sig: 'dd',
3860+
jslibfunc__sig: 'ii',
38613861
jslibfunc: function(x) {},
38623862
});
3863-
38643863
''')
38653864
create_file('src.c', r'''
38663865
#include <stdio.h>
@@ -3869,8 +3868,18 @@ def test_js_lib_sig_mismatch(self):
38693868
printf("c calling: %d\n", jslibfunc());
38703869
}
38713870
''')
3872-
err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js'])
3873-
self.assertContained('lib.js: Signature redefinition for: jslibfunc__sig. (old=ii vs new=dd)', err)
3871+
err = self.run_process([EMCC, 'src.c', '--js-library', 'lib.js'], stderr=PIPE).stderr
3872+
self.assertContained('lib.js: signature redefinition for: jslibfunc__sig. (old=ii vs new=ii)', err)
3873+
3874+
# Add another redefinition, this time not matching
3875+
create_file('lib2.js', r'''
3876+
mergeInto(LibraryManager.library, {
3877+
jslibfunc__sig: 'pp',
3878+
jslibfunc: function(x) {},
3879+
});
3880+
''')
3881+
err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js', '--js-library', 'lib2.js'])
3882+
self.assertContained('lib2.js: signature redefinition for: jslibfunc__sig. (old=ii vs new=pp)', err)
38743883

38753884
def test_js_lib_invalid_deps(self):
38763885
create_file('lib.js', r'''

tools/gen_sig_info.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <emscripten/html5.h>
3838
#include <emscripten/fiber.h>
3939
#include <emscripten/websocket.h>
40+
#include <emscripten/fetch.h>
4041
#include <emscripten/webaudio.h>
4142
#include <wasi/api.h>
4243
@@ -228,12 +229,16 @@ def extract_sig_info(sig_info, extra_settings=None, extra_cflags=None):
228229
'STACK_OVERFLOW_CHECK': 1,
229230
'FULL_ES3': 1,
230231
'USE_SDL': 1,
232+
'FETCH': 1,
231233
# Currently GLFW symbols have different sigs for the same symbol because the
232234
# signatures changed between v2 and v3, so for now we continue to maintain
233235
# them by hand.
234236
'USE_GLFW': 0,
235-
'JS_LIBRARIES': ['src/library_websocket.js',
236-
'src/library_webaudio.js'],
237+
'JS_LIBRARIES': [
238+
'src/library_websocket.js',
239+
'src/library_webaudio.js',
240+
'src/library_fetch.js'
241+
],
237242
'SUPPORT_LONGJMP': 'emscripten'
238243
}
239244
if extra_settings:

tools/system_libs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,6 +1743,7 @@ def get_default_variation(cls, **kwargs):
17431743
class libfetch(MTLibrary):
17441744
name = 'libfetch'
17451745
never_force = True
1746+
includes = ['system/lib/libc']
17461747

17471748
def get_files(self):
17481749
return [utils.path_from_root('system/lib/fetch/emscripten_fetch.c')]

0 commit comments

Comments
 (0)