Skip to content

Commit 407e28c

Browse files
committed
[wasm64] fix dynamic call signatures for callbacks in html5 library
- update dynamic call signatures to `p` where the parameter type is a pointer. - proxied events needs additional work.
1 parent a01c286 commit 407e28c

File tree

1 file changed

+44
-32
lines changed

1 file changed

+44
-32
lines changed

src/library_html5.js

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ var LibraryHTML5 = {
209209
},
210210

211211
#if PTHREADS
212+
// TODO: Support proxied events for MEMORY64
212213
queueEventHandlerOnThread_iiii(targetThread, eventHandlerFunc, eventTypeId, eventData, userData) {
213214
withStackSave(() => {
214215
var varargs = stackAlloc(12);
@@ -307,7 +308,7 @@ var LibraryHTML5 = {
307308
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, keyEventData, userData);
308309
else
309310
#endif
310-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, keyEventData, userData)) e.preventDefault();
311+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, keyEventData, userData)) e.preventDefault();
311312
};
312313

313314
var eventHandler = {
@@ -461,19 +462,20 @@ var LibraryHTML5 = {
461462
assert(eventStruct % 4 == 0);
462463
#endif
463464
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.timestamp, 'e.timeStamp', 'double') }}};
465+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.screenX, 'e.screenX', '*') }}};
466+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.screenY, 'e.screenY', '*') }}};
467+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.clientX, 'e.clientX', '*') }}};
468+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.clientY, 'e.clientY', '*') }}};
469+
464470
var idx = eventStruct >> 2;
465-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.screenX / 4 }}}] = e.screenX;
466-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.screenY / 4 }}}] = e.screenY;
467-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.clientX / 4 }}}] = e.clientX;
468-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.clientY / 4 }}}] = e.clientY;
469471
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.ctrlKey / 4 }}}] = e.ctrlKey;
470472
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.shiftKey / 4 }}}] = e.shiftKey;
471473
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.altKey / 4 }}}] = e.altKey;
472474
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.metaKey / 4 }}}] = e.metaKey;
473475
HEAP16[idx*2 + {{{ C_STRUCTS.EmscriptenMouseEvent.button / 2 }}}] = e.button;
474476
HEAP16[idx*2 + {{{ C_STRUCTS.EmscriptenMouseEvent.buttons / 2 }}}] = e.buttons;
475477

476-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.movementX / 4 }}}] = e["movementX"]
478+
var movementXValue = e["movementX"]
477479
#if MIN_FIREFOX_VERSION <= 40
478480
// https://caniuse.com/#feat=mdn-api_mouseevent_movementx
479481
|| e["mozMovementX"]
@@ -486,7 +488,7 @@ var LibraryHTML5 = {
486488
#endif
487489
;
488490

489-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.movementY / 4 }}}] = e["movementY"]
491+
var movementYValue = e["movementY"]
490492
#if MIN_FIREFOX_VERSION <= 40
491493
|| e["mozMovementY"]
492494
#endif
@@ -497,7 +499,10 @@ var LibraryHTML5 = {
497499
|| (e.screenY-JSEvents.previousScreenY)
498500
#endif
499501
;
502+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.movementX, 'movementXValue', '*') }}};
503+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.movementY, 'movementYValue', '*') }}};
500504

505+
501506
#if !DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR
502507
if (Module['canvas']) {
503508
var rect = getBoundingClientRect(Module['canvas']);
@@ -509,8 +514,15 @@ var LibraryHTML5 = {
509514
}
510515
#endif
511516
var rect = getBoundingClientRect(target);
512-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.targetX / 4 }}}] = e.clientX - rect.left;
513-
HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.targetY / 4 }}}] = e.clientY - rect.top;
517+
#if MEMORY64
518+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.targetX, 'e.clientX - rect.left', 'i64') }}};
519+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.targetY, 'e.clientY - rect.top', 'i64') }}};
520+
#else
521+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.targetX, 'e.clientX - rect.left', 'i32') }}};
522+
{{{ makeSetValue('eventStruct', C_STRUCTS.EmscriptenMouseEvent.targetY, 'e.clientY - rect.top', 'i32') }}};
523+
#endif
524+
// HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.targetX / 4 }}}] = e.clientX - rect.left;
525+
// HEAP32[idx + {{{ C_STRUCTS.EmscriptenMouseEvent.targetY / 4 }}}] = e.clientY - rect.top;
514526

515527
#if MIN_IE_VERSION != TARGET_NOT_SUPPORTED || MIN_SAFARI_VERSION <= 80000 || MIN_EDGE_VERSION <= 12 || MIN_CHROME_VERSION <= 21 // https://caniuse.com/#search=movementX
516528
#if MIN_CHROME_VERSION <= 76
@@ -547,7 +559,7 @@ var LibraryHTML5 = {
547559
JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, mouseEventData, userData);
548560
} else
549561
#endif
550-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, JSEvents.mouseEvent, userData)) e.preventDefault();
562+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, JSEvents.mouseEvent, userData)) e.preventDefault();
551563
};
552564

553565
var eventHandler = {
@@ -646,7 +658,7 @@ var LibraryHTML5 = {
646658
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, wheelEvent, userData);
647659
else
648660
#endif
649-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, wheelEvent, userData)) e.preventDefault();
661+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, wheelEvent, userData)) e.preventDefault();
650662
};
651663
#if MIN_IE_VERSION <= 8 || MIN_SAFARI_VERSION < 60100 // Browsers that do not support https://caniuse.com/#feat=mdn-api_wheelevent
652664
// The 'mousewheel' event as implemented in Safari 6.0.5
@@ -658,7 +670,7 @@ var LibraryHTML5 = {
658670
{{{ makeSetValue('JSEvents.wheelEvent', C_STRUCTS.EmscriptenWheelEvent.deltaY, 'wheelDeltaY', 'double') }}};
659671
{{{ makeSetValue('JSEvents.wheelEvent', C_STRUCTS.EmscriptenWheelEvent.deltaZ, '0 /* Not available */', 'double') }}};
660672
{{{ makeSetValue('JSEvents.wheelEvent', C_STRUCTS.EmscriptenWheelEvent.deltaMode, '0 /* DOM_DELTA_PIXEL */', 'i32') }}};
661-
var shouldCancel = {{{ makeDynCall('iiii', 'callbackfunc') }}}( eventTypeId, JSEvents.wheelEvent, userData);
673+
var shouldCancel = {{{ makeDynCall('iipp', 'callbackfunc') }}}( eventTypeId, JSEvents.wheelEvent, userData);
662674
if (shouldCancel) {
663675
e.preventDefault();
664676
}
@@ -747,7 +759,7 @@ var LibraryHTML5 = {
747759
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, uiEvent, userData);
748760
else
749761
#endif
750-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, uiEvent, userData)) e.preventDefault();
762+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, uiEvent, userData)) e.preventDefault();
751763
};
752764

753765
var eventHandler = {
@@ -793,7 +805,7 @@ var LibraryHTML5 = {
793805
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, focusEvent, userData);
794806
else
795807
#endif
796-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, focusEvent, userData)) e.preventDefault();
808+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, focusEvent, userData)) e.preventDefault();
797809
};
798810

799811
var eventHandler = {
@@ -855,7 +867,7 @@ var LibraryHTML5 = {
855867
JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, deviceOrientationEvent, userData);
856868
} else
857869
#endif
858-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, JSEvents.deviceOrientationEvent, userData)) e.preventDefault();
870+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, JSEvents.deviceOrientationEvent, userData)) e.preventDefault();
859871
};
860872

861873
var eventHandler = {
@@ -925,7 +937,7 @@ var LibraryHTML5 = {
925937
JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, deviceMotionEvent, userData);
926938
} else
927939
#endif
928-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, JSEvents.deviceMotionEvent, userData)) e.preventDefault();
940+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, JSEvents.deviceMotionEvent, userData)) e.preventDefault();
929941
};
930942

931943
var eventHandler = {
@@ -995,7 +1007,7 @@ var LibraryHTML5 = {
9951007
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, orientationChangeEvent, userData);
9961008
else
9971009
#endif
998-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, orientationChangeEvent, userData)) e.preventDefault();
1010+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, orientationChangeEvent, userData)) e.preventDefault();
9991011
};
10001012

10011013
if (eventTypeString == "orientationchange" && screen.mozOrientation !== undefined) {
@@ -1114,7 +1126,7 @@ var LibraryHTML5 = {
11141126
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, fullscreenChangeEvent, userData);
11151127
else
11161128
#endif
1117-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, fullscreenChangeEvent, userData)) e.preventDefault();
1129+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, fullscreenChangeEvent, userData)) e.preventDefault();
11181130
};
11191131

11201132
var eventHandler = {
@@ -1197,7 +1209,7 @@ var LibraryHTML5 = {
11971209
if (strategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
11981210
else
11991211
#endif
1200-
{{{ makeDynCall('iiii', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
1212+
{{{ makeDynCall('iipp', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
12011213
}
12021214

12031215
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
@@ -1349,7 +1361,7 @@ var LibraryHTML5 = {
13491361
if (currentFullscreenStrategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(currentFullscreenStrategy.canvasResizedCallbackTargetThread, currentFullscreenStrategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
13501362
else
13511363
#endif
1352-
{{{ makeDynCall('iiii', 'currentFullscreenStrategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
1364+
{{{ makeDynCall('iipp', 'currentFullscreenStrategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
13531365
}
13541366
}
13551367
}
@@ -1477,7 +1489,7 @@ var LibraryHTML5 = {
14771489
if (currentFullscreenStrategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(currentFullscreenStrategy.canvasResizedCallbackTargetThread, currentFullscreenStrategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
14781490
else
14791491
#endif
1480-
{{{ makeDynCall('iiii', 'currentFullscreenStrategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
1492+
{{{ makeDynCall('iipp', 'currentFullscreenStrategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
14811493
}
14821494
},
14831495

@@ -1597,7 +1609,7 @@ var LibraryHTML5 = {
15971609
if (strategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
15981610
else
15991611
#endif
1600-
{{{ makeDynCall('iiii', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
1612+
{{{ makeDynCall('iipp', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
16011613
}
16021614
currentFullscreenStrategy = 0;
16031615
}
@@ -1611,7 +1623,7 @@ var LibraryHTML5 = {
16111623
if (strategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
16121624
else
16131625
#endif
1614-
{{{ makeDynCall('iiii', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
1626+
{{{ makeDynCall('iipp', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
16151627
}
16161628

16171629
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
@@ -1691,7 +1703,7 @@ var LibraryHTML5 = {
16911703
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, pointerlockChangeEvent, userData);
16921704
else
16931705
#endif
1694-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, pointerlockChangeEvent, userData)) e.preventDefault();
1706+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, pointerlockChangeEvent, userData)) e.preventDefault();
16951707
};
16961708

16971709
var eventHandler = {
@@ -1736,7 +1748,7 @@ var LibraryHTML5 = {
17361748
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, 0, userData);
17371749
else
17381750
#endif
1739-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, 0, userData)) e.preventDefault();
1751+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, 0, userData)) e.preventDefault();
17401752
};
17411753

17421754
var eventHandler = {
@@ -1936,7 +1948,7 @@ var LibraryHTML5 = {
19361948
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, visibilityChangeEvent, userData);
19371949
else
19381950
#endif
1939-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, visibilityChangeEvent, userData)) e.preventDefault();
1951+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, visibilityChangeEvent, userData)) e.preventDefault();
19401952
};
19411953

19421954
var eventHandler = {
@@ -2053,7 +2065,7 @@ var LibraryHTML5 = {
20532065
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, touchEvent, userData);
20542066
else
20552067
#endif
2056-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, touchEvent, userData)) e.preventDefault();
2068+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, touchEvent, userData)) e.preventDefault();
20572069
};
20582070

20592071
var eventHandler = {
@@ -2140,7 +2152,7 @@ var LibraryHTML5 = {
21402152
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, gamepadEvent, userData);
21412153
else
21422154
#endif
2143-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, gamepadEvent, userData)) e.preventDefault();
2155+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, gamepadEvent, userData)) e.preventDefault();
21442156
};
21452157

21462158
var eventHandler = {
@@ -2212,7 +2224,7 @@ var LibraryHTML5 = {
22122224
$registerBeforeUnloadEventCallback: (target, userData, useCapture, callbackfunc, eventTypeId, eventTypeString) => {
22132225
var beforeUnloadEventHandlerFunc = (e = event) => {
22142226
// Note: This is always called on the main browser thread, since it needs synchronously return a value!
2215-
var confirmationMessage = {{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, 0, userData);
2227+
var confirmationMessage = {{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, 0, userData);
22162228

22172229
if (confirmationMessage) {
22182230
confirmationMessage = UTF8ToString(confirmationMessage);
@@ -2272,7 +2284,7 @@ var LibraryHTML5 = {
22722284
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, batteryEvent, userData);
22732285
else
22742286
#endif
2275-
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, batteryEvent, userData)) e.preventDefault();
2287+
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, batteryEvent, userData)) e.preventDefault();
22762288
};
22772289

22782290
var eventHandler = {
@@ -2564,13 +2576,13 @@ var LibraryHTML5 = {
25642576
emscripten_html5_remove_all_event_listeners: () => JSEvents.removeAllEventListeners(),
25652577

25662578
emscripten_request_animation_frame: (cb, userData) =>
2567-
requestAnimationFrame((timeStamp) => {{{ makeDynCall('idi', 'cb') }}}(timeStamp, userData)),
2579+
requestAnimationFrame((timeStamp) => {{{ makeDynCall('idp', 'cb') }}}(timeStamp, userData)),
25682580

25692581
emscripten_cancel_animation_frame: (id) => cancelAnimationFrame(id),
25702582

25712583
emscripten_request_animation_frame_loop: (cb, userData) => {
25722584
function tick(timeStamp) {
2573-
if ({{{ makeDynCall('idi', 'cb') }}}(timeStamp, userData)) {
2585+
if ({{{ makeDynCall('idp', 'cb') }}}(timeStamp, userData)) {
25742586
requestAnimationFrame(tick);
25752587
}
25762588
}

0 commit comments

Comments
 (0)