Skip to content

Commit 07eb137

Browse files
committed
Use int to represent webidl long type
The webidl `long` type is defined to be a 32-bit type: https://webidl.spec.whatwg.org/#idl-long https://webidl.spec.whatwg.org/#idl-unsigned-long Using `long` on the native side works find for wasm32 but breaks under wasm64 where `long` is 64-bit. Using `int` instead means the type is the same under wasm32 and wasm64 which more accurately represents the html5/webidl type. See #20276
1 parent 992d1e9 commit 07eb137

File tree

6 files changed

+102
-99
lines changed

6 files changed

+102
-99
lines changed

ChangeLog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ See docs/process.md for more on how version tagging works.
2020

2121
3.1.47 (in development)
2222
-----------------------
23+
- Value types in `emscripten/html5.h` that correspond the WebIDL `long` type are
24+
now represented as `int` rather than `long` types so that they are 32-bit wide
25+
on both wasm32 and wasm64. (#20290)
2326
- `EM_JS` and `EM_ASM` that are present in side module now have their syntax
2427
validated at build time. (#20258)
2528
- `MAIN_THREAD_EM_ASM_PTR` macro added for code that returns a pointer. This

src/generated_struct_info64.json

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -514,53 +514,53 @@
514514
"scaleMode": 0
515515
},
516516
"EmscriptenGamepadEvent": {
517-
"__size__": 1440,
517+
"__size__": 1432,
518518
"analogButton": 528,
519519
"axis": 16,
520520
"connected": 1296,
521521
"digitalButton": 1040,
522-
"id": 1312,
523-
"index": 1304,
524-
"mapping": 1376,
522+
"id": 1304,
523+
"index": 1300,
524+
"mapping": 1368,
525525
"numAxes": 8,
526526
"numButtons": 12,
527527
"timestamp": 0
528528
},
529529
"EmscriptenKeyboardEvent": {
530-
"__size__": 192,
531-
"altKey": 24,
532-
"charCode": 40,
533-
"charValue": 128,
534-
"code": 96,
535-
"ctrlKey": 16,
536-
"key": 64,
537-
"keyCode": 48,
538-
"locale": 160,
530+
"__size__": 176,
531+
"altKey": 20,
532+
"charCode": 32,
533+
"charValue": 108,
534+
"code": 76,
535+
"ctrlKey": 12,
536+
"key": 44,
537+
"keyCode": 36,
538+
"locale": 140,
539539
"location": 8,
540-
"metaKey": 28,
541-
"repeat": 32,
542-
"shiftKey": 20,
540+
"metaKey": 24,
541+
"repeat": 28,
542+
"shiftKey": 16,
543543
"timestamp": 0,
544-
"which": 56
544+
"which": 40
545545
},
546546
"EmscriptenMouseEvent": {
547-
"__size__": 120,
548-
"altKey": 48,
549-
"button": 56,
550-
"buttons": 58,
551-
"canvasX": 96,
552-
"canvasY": 104,
553-
"clientX": 24,
554-
"clientY": 32,
555-
"ctrlKey": 40,
556-
"metaKey": 52,
557-
"movementX": 64,
558-
"movementY": 72,
547+
"__size__": 72,
548+
"altKey": 32,
549+
"button": 40,
550+
"buttons": 42,
551+
"canvasX": 60,
552+
"canvasY": 64,
553+
"clientX": 16,
554+
"clientY": 20,
555+
"ctrlKey": 24,
556+
"metaKey": 36,
557+
"movementX": 44,
558+
"movementY": 48,
559559
"screenX": 8,
560-
"screenY": 16,
561-
"shiftKey": 44,
562-
"targetX": 80,
563-
"targetY": 88,
560+
"screenY": 12,
561+
"shiftKey": 28,
562+
"targetX": 52,
563+
"targetY": 56,
564564
"timestamp": 0
565565
},
566566
"EmscriptenOrientationChangeEvent": {
@@ -575,42 +575,42 @@
575575
"nodeName": 4
576576
},
577577
"EmscriptenTouchEvent": {
578-
"__size__": 3104,
578+
"__size__": 1696,
579579
"altKey": 20,
580580
"ctrlKey": 12,
581581
"metaKey": 24,
582582
"numTouches": 8,
583583
"shiftKey": 16,
584584
"timestamp": 0,
585-
"touches": 32
585+
"touches": 28
586586
},
587587
"EmscriptenTouchPoint": {
588-
"__size__": 96,
589-
"canvasX": 80,
590-
"canvasY": 88,
591-
"clientX": 24,
592-
"clientY": 32,
588+
"__size__": 52,
589+
"canvasX": 44,
590+
"canvasY": 48,
591+
"clientX": 12,
592+
"clientY": 16,
593593
"identifier": 0,
594-
"isChanged": 56,
595-
"onTarget": 60,
596-
"pageX": 40,
597-
"pageY": 48,
598-
"screenX": 8,
599-
"screenY": 16,
600-
"targetX": 64,
601-
"targetY": 72
594+
"isChanged": 28,
595+
"onTarget": 32,
596+
"pageX": 20,
597+
"pageY": 24,
598+
"screenX": 4,
599+
"screenY": 8,
600+
"targetX": 36,
601+
"targetY": 40
602602
},
603603
"EmscriptenUiEvent": {
604-
"__size__": 40,
604+
"__size__": 36,
605605
"detail": 0,
606-
"documentBodyClientHeight": 12,
607-
"documentBodyClientWidth": 8,
608-
"scrollLeft": 36,
609-
"scrollTop": 32,
610-
"windowInnerHeight": 20,
611-
"windowInnerWidth": 16,
612-
"windowOuterHeight": 28,
613-
"windowOuterWidth": 24
606+
"documentBodyClientHeight": 8,
607+
"documentBodyClientWidth": 4,
608+
"scrollLeft": 32,
609+
"scrollTop": 28,
610+
"windowInnerHeight": 16,
611+
"windowInnerWidth": 12,
612+
"windowOuterHeight": 24,
613+
"windowOuterWidth": 20
614614
},
615615
"EmscriptenVisibilityChangeEvent": {
616616
"__size__": 8,
@@ -635,11 +635,11 @@
635635
"stencil": 8
636636
},
637637
"EmscriptenWheelEvent": {
638-
"__size__": 152,
639-
"deltaMode": 144,
640-
"deltaX": 120,
641-
"deltaY": 128,
642-
"deltaZ": 136,
638+
"__size__": 104,
639+
"deltaMode": 96,
640+
"deltaX": 72,
641+
"deltaY": 80,
642+
"deltaZ": 88,
643643
"mouse": 0
644644
},
645645
"SDL_AudioSpec": {

system/include/emscripten/html5.h

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ extern "C" {
100100

101101
typedef struct EmscriptenKeyboardEvent {
102102
double timestamp;
103-
unsigned long location;
103+
unsigned int location;
104104
EM_BOOL ctrlKey;
105105
EM_BOOL shiftKey;
106106
EM_BOOL altKey;
107107
EM_BOOL metaKey;
108108
EM_BOOL repeat;
109-
unsigned long charCode;
110-
unsigned long keyCode;
111-
unsigned long which;
109+
unsigned int charCode;
110+
unsigned int keyCode;
111+
unsigned int which;
112112
EM_UTF8 key[EM_HTML5_SHORT_STRING_LEN_BYTES];
113113
EM_UTF8 code[EM_HTML5_SHORT_STRING_LEN_BYTES];
114114
EM_UTF8 charValue[EM_HTML5_SHORT_STRING_LEN_BYTES];
@@ -123,24 +123,24 @@ EMSCRIPTEN_RESULT emscripten_set_keyup_callback_on_thread(const char *target __a
123123

124124
typedef struct EmscriptenMouseEvent {
125125
double timestamp;
126-
long screenX;
127-
long screenY;
128-
long clientX;
129-
long clientY;
126+
int screenX;
127+
int screenY;
128+
int clientX;
129+
int clientY;
130130
EM_BOOL ctrlKey;
131131
EM_BOOL shiftKey;
132132
EM_BOOL altKey;
133133
EM_BOOL metaKey;
134134
unsigned short button;
135135
unsigned short buttons;
136-
long movementX;
137-
long movementY;
138-
long targetX;
139-
long targetY;
136+
int movementX;
137+
int movementY;
138+
int targetX;
139+
int targetY;
140140
// canvasX and canvasY are deprecated - there no longer exists a Module['canvas'] object, so canvasX/Y are no longer reported (register a listener on canvas directly to get canvas coordinates, or translate manually)
141-
long canvasX;
142-
long canvasY;
143-
long padding;
141+
int canvasX;
142+
int canvasY;
143+
int padding;
144144
} EmscriptenMouseEvent;
145145

146146

@@ -166,15 +166,15 @@ typedef struct EmscriptenWheelEvent {
166166
double deltaX;
167167
double deltaY;
168168
double deltaZ;
169-
unsigned long deltaMode;
169+
unsigned int deltaMode;
170170
} EmscriptenWheelEvent;
171171

172172

173173
typedef EM_BOOL (*em_wheel_callback_func)(int eventType, const EmscriptenWheelEvent *wheelEvent __attribute__((nonnull)), void *userData);
174174
EMSCRIPTEN_RESULT emscripten_set_wheel_callback_on_thread(const char *target __attribute__((nonnull)), void *userData, EM_BOOL useCapture, em_wheel_callback_func callback, pthread_t targetThread);
175175

176176
typedef struct EmscriptenUiEvent {
177-
long detail;
177+
int detail;
178178
int documentBodyClientWidth;
179179
int documentBodyClientHeight;
180180
int windowInnerWidth;
@@ -345,20 +345,20 @@ EMSCRIPTEN_RESULT emscripten_get_visibility_status(EmscriptenVisibilityChangeEve
345345

346346
typedef struct EmscriptenTouchPoint
347347
{
348-
long identifier;
349-
long screenX;
350-
long screenY;
351-
long clientX;
352-
long clientY;
353-
long pageX;
354-
long pageY;
348+
int identifier;
349+
int screenX;
350+
int screenY;
351+
int clientX;
352+
int clientY;
353+
int pageX;
354+
int pageY;
355355
EM_BOOL isChanged;
356356
EM_BOOL onTarget;
357-
long targetX;
358-
long targetY;
357+
int targetX;
358+
int targetY;
359359
// canvasX and canvasY are deprecated - there no longer exists a Module['canvas'] object, so canvasX/Y are no longer reported (register a listener on canvas directly to get canvas coordinates, or translate manually)
360-
long canvasX;
361-
long canvasY;
360+
int canvasX;
361+
int canvasY;
362362
} EmscriptenTouchPoint;
363363

364364
typedef struct EmscriptenTouchEvent {
@@ -387,7 +387,7 @@ typedef struct EmscriptenGamepadEvent {
387387
double analogButton[64];
388388
EM_BOOL digitalButton[64];
389389
EM_BOOL connected;
390-
long index;
390+
int index;
391391
EM_UTF8 id[EM_HTML5_MEDIUM_STRING_LEN_BYTES];
392392
EM_UTF8 mapping[EM_HTML5_MEDIUM_STRING_LEN_BYTES];
393393
} EmscriptenGamepadEvent;

test/test_gamepad.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const char *emscripten_result_to_string(EMSCRIPTEN_RESULT result) {
3838

3939
EM_BOOL gamepad_callback(int eventType, const EmscriptenGamepadEvent *e, void *userData)
4040
{
41-
printf("%s: timeStamp: %g, connected: %d, index: %ld, numAxes: %d, numButtons: %d, id: \"%s\", mapping: \"%s\"\n",
41+
printf("%s: timeStamp: %g, connected: %d, index: %d, numAxes: %d, numButtons: %d, id: \"%s\", mapping: \"%s\"\n",
4242
eventType != 0 ? emscripten_event_type_to_string(eventType) : "Gamepad state", e->timestamp, e->connected, e->index,
4343
e->numAxes, e->numButtons, e->id, e->mapping);
4444

test/test_html5_core.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const char *emscripten_result_to_string(EMSCRIPTEN_RESULT result) {
4040
// Returning 0 signals that the event was not consumed by the code, and will allow the event to pass on and bubble up normally.
4141
EM_BOOL key_callback(int eventType, const EmscriptenKeyboardEvent *e, void *userData)
4242
{
43-
printf("%s, key: \"%s\", code: \"%s\", location: %lu,%s%s%s%s repeat: %d, locale: \"%s\", char: \"%s\", charCode: %lu, keyCode: %lu, which: %lu, timestamp: %lf\n",
43+
printf("%s, key: \"%s\", code: \"%s\", location: %u,%s%s%s%s repeat: %d, locale: \"%s\", char: \"%s\", charCode: %u, keyCode: %u, which: %u, timestamp: %lf\n",
4444
emscripten_event_type_to_string(eventType), e->key, e->code, e->location,
4545
e->ctrlKey ? " CTRL" : "", e->shiftKey ? " SHIFT" : "", e->altKey ? " ALT" : "", e->metaKey ? " META" : "",
4646
e->repeat, e->locale, e->charValue, e->charCode, e->keyCode, e->which,
@@ -91,7 +91,7 @@ EM_BOOL key_callback(int eventType, const EmscriptenKeyboardEvent *e, void *user
9191

9292
EM_BOOL mouse_callback(int eventType, const EmscriptenMouseEvent *e, void *userData)
9393
{
94-
printf("%s, screen: (%ld,%ld), client: (%ld,%ld),%s%s%s%s button: %hu, buttons: %hu, movement: (%ld,%ld), canvas: (%ld,%ld), timestamp: %lf\n",
94+
printf("%s, screen: (%d,%d), client: (%d,%d),%s%s%s%s button: %hu, buttons: %hu, movement: (%d,%d), canvas: (%d,%d), timestamp: %lf\n",
9595
emscripten_event_type_to_string(eventType), e->screenX, e->screenY, e->clientX, e->clientY,
9696
e->ctrlKey ? " CTRL" : "", e->shiftKey ? " SHIFT" : "", e->altKey ? " ALT" : "", e->metaKey ? " META" : "",
9797
e->button, e->buttons, e->movementX, e->movementY, e->canvasX, e->canvasY,
@@ -102,7 +102,7 @@ EM_BOOL mouse_callback(int eventType, const EmscriptenMouseEvent *e, void *userD
102102

103103
EM_BOOL wheel_callback(int eventType, const EmscriptenWheelEvent *e, void *userData)
104104
{
105-
printf("%s, screen: (%ld,%ld), client: (%ld,%ld),%s%s%s%s button: %hu, buttons: %hu, canvas: (%ld,%ld), delta:(%g,%g,%g), deltaMode:%lu, timestamp: %lf\n",
105+
printf("%s, screen: (%d,%d), client: (%d,%d),%s%s%s%s button: %hu, buttons: %hu, canvas: (%d,%d), delta:(%g,%g,%g), deltaMode:%u, timestamp: %lf\n",
106106
emscripten_event_type_to_string(eventType), e->mouse.screenX, e->mouse.screenY, e->mouse.clientX, e->mouse.clientY,
107107
e->mouse.ctrlKey ? " CTRL" : "", e->mouse.shiftKey ? " SHIFT" : "", e->mouse.altKey ? " ALT" : "", e->mouse.metaKey ? " META" : "",
108108
e->mouse.button, e->mouse.buttons, e->mouse.canvasX, e->mouse.canvasY,
@@ -114,7 +114,7 @@ EM_BOOL wheel_callback(int eventType, const EmscriptenWheelEvent *e, void *userD
114114

115115
EM_BOOL uievent_callback(int eventType, const EmscriptenUiEvent *e, void *userData)
116116
{
117-
printf("%s, detail: %ld, document.body.client size: (%d,%d), window.inner size: (%d,%d), scrollPos: (%d, %d)\n",
117+
printf("%s, detail: %d, document.body.client size: (%d,%d), window.inner size: (%d,%d), scrollPos: (%d, %d)\n",
118118
emscripten_event_type_to_string(eventType), e->detail, e->documentBodyClientWidth, e->documentBodyClientHeight,
119119
e->windowInnerWidth, e->windowInnerHeight, e->scrollTop, e->scrollLeft);
120120

@@ -187,7 +187,7 @@ EM_BOOL touch_callback(int eventType, const EmscriptenTouchEvent *e, void *userD
187187
for(int i = 0; i < e->numTouches; ++i)
188188
{
189189
const EmscriptenTouchPoint *t = &e->touches[i];
190-
printf(" %ld: screen: (%ld,%ld), client: (%ld,%ld), page: (%ld,%ld), isChanged: %d, onTarget: %d, canvas: (%ld, %ld)\n",
190+
printf(" %d: screen: (%d,%d), client: (%d,%d), page: (%d,%d), isChanged: %d, onTarget: %d, canvas: (%d, %d)\n",
191191
t->identifier, t->screenX, t->screenY, t->clientX, t->clientY, t->pageX, t->pageY, t->isChanged, t->onTarget, t->canvasX, t->canvasY);
192192
}
193193

test/test_html5_mouse.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void instruction()
6969

7070
EM_BOOL mouse_callback(int eventType, const EmscriptenMouseEvent *e, void *userData)
7171
{
72-
printf("%s, screen: (%ld,%ld), client: (%ld,%ld),%s%s%s%s button: %hu, buttons: %hu, movement: (%ld,%ld), target: (%ld, %ld)\n",
72+
printf("%s, screen: (%d,%d), client: (%d,%d),%s%s%s%s button: %hu, buttons: %hu, movement: (%d,%d), target: (%d, %d)\n",
7373
emscripten_event_type_to_string(eventType), e->screenX, e->screenY, e->clientX, e->clientY,
7474
e->ctrlKey ? " CTRL" : "", e->shiftKey ? " SHIFT" : "", e->altKey ? " ALT" : "", e->metaKey ? " META" : "",
7575
e->button, e->buttons, e->movementX, e->movementY, e->targetX, e->targetY);
@@ -96,7 +96,7 @@ EM_BOOL mouse_callback(int eventType, const EmscriptenMouseEvent *e, void *userD
9696

9797
EM_BOOL wheel_callback(int eventType, const EmscriptenWheelEvent *e, void *userData)
9898
{
99-
printf("%s, screen: (%ld,%ld), client: (%ld,%ld),%s%s%s%s button: %hu, buttons: %hu, target: (%ld, %ld), delta:(%g,%g,%g), deltaMode:%lu\n",
99+
printf("%s, screen: (%d,%d), client: (%d,%d),%s%s%s%s button: %hu, buttons: %hu, target: (%d, %d), delta:(%g,%g,%g), deltaMode:%u\n",
100100
emscripten_event_type_to_string(eventType), e->mouse.screenX, e->mouse.screenY, e->mouse.clientX, e->mouse.clientY,
101101
e->mouse.ctrlKey ? " CTRL" : "", e->mouse.shiftKey ? " SHIFT" : "", e->mouse.altKey ? " ALT" : "", e->mouse.metaKey ? " META" : "",
102102
e->mouse.button, e->mouse.buttons, e->mouse.targetX, e->mouse.targetY,

0 commit comments

Comments
 (0)