@@ -57,6 +57,8 @@ var LibraryEmbind = {
5757 // TODO: do we need a deleteObject here? write a test where
5858 // emval is passed into JS via an interface
5959 }` ,
60+ $EmValOptionalType__deps : [ '$EmValType' ] ,
61+ $EmValOptionalType : '=Object.assign({optional: true}, EmValType);' ,
6062 $init_embind__deps : [
6163 '$getInheritedInstanceCount' , '$getLiveInheritedInstances' ,
6264 '$flushPendingDeletes' , '$setDelayFunction' ] ,
@@ -687,9 +689,9 @@ var LibraryEmbind = {
687689 __embind_register_emval ( rawType ) ;
688690 } ,
689691
690- _embind_register_optional__deps : [ '_embind_register_emval ' ] ,
692+ _embind_register_optional__deps : [ '$registerType' , '$EmValOptionalType '] ,
691693 _embind_register_optional : ( rawOptionalType , rawType ) => {
692- __embind_register_emval ( rawOptionalType ) ;
694+ registerType ( rawOptionalType , EmValOptionalType ) ;
693695 } ,
694696
695697 _embind_register_memory_view__deps : [ '$readLatin1String' , '$registerType' ] ,
@@ -778,6 +780,10 @@ var LibraryEmbind = {
778780#endif
779781#if ASYNCIFY
780782 '$Asyncify' ,
783+ #endif
784+ #if ASSERTIONS
785+ '$getRequiredArgCount' ,
786+ '$checkArgCount' ,
781787#endif
782788 ] ,
783789 $craftInvokerFunction : function ( humanName , argTypes , classType , cppInvokerFunc , cppTargetFunc , /** boolean= */ isAsync ) {
@@ -821,15 +827,18 @@ var LibraryEmbind = {
821827
822828 var returns = ( argTypes [ 0 ] . name !== "void" ) ;
823829
824- #if DYNAMIC_EXECUTION == 0 && ! EMBIND_AOT
825830 var expectedArgCount = argCount - 2 ;
831+ #if ASSERTIONS
832+ var minArgs = getRequiredArgCount ( argTypes ) ;
833+ #endif
834+ #if DYNAMIC_EXECUTION == 0 && ! EMBIND_AOT
826835 var argsWired = new Array ( expectedArgCount ) ;
827836 var invokerFuncArgs = [ ] ;
828837 var destructors = [ ] ;
829838 var invokerFn = function ( ...args ) {
830- if ( args . length !== expectedArgCount ) {
831- throwBindingError ( `function ${ humanName } called with ${ args . length } arguments, expected ${ expectedArgCount } ` ) ;
832- }
839+ # if ASSERTIONS
840+ checkArgCount ( args . length , minArgs , expectedArgCount , humanName , throwBindingError ) ;
841+ #endif
833842#if EMSCRIPTEN_TRACING
834843 Module . emscripten_trace_enter_context ( `embind::${ humanName } ` ) ;
835844#endif
@@ -901,6 +910,9 @@ var LibraryEmbind = {
901910 }
902911 }
903912 }
913+ #if ASSERTIONS
914+ closureArgs . push ( checkArgCount , minArgs , expectedArgCount ) ;
915+ #endif
904916
905917#if EMBIND_AOT
906918 var signature = createJsInvokerSignature ( argTypes , isClassMethodFunc , returns , isAsync ) ;
0 commit comments