@@ -38,7 +38,25 @@ var LibraryEmbind = {
3838#if EMBIND_AOT
3939 $InvokerFunctions : '<<< EMBIND_AOT_OUTPUT >>>' ,
4040#endif
41-
41+ // If register_type is used, emval will be registered multiple times for
42+ // different type id's, but only a single type object is needed on the JS side
43+ // for all of them. Store the type for reuse.
44+ $EmValType__deps : [ '_emval_decref' , '$Emval' , '$simpleReadValueFromPointer' , '$GenericWireTypeSize' ] ,
45+ $EmValType : `{
46+ name: 'emscripten::val',
47+ 'fromWireType': (handle) => {
48+ var rv = Emval.toValue(handle);
49+ __emval_decref(handle);
50+ return rv;
51+ },
52+ 'toWireType': (destructors, value) => Emval.toHandle(value),
53+ 'argPackAdvance': GenericWireTypeSize,
54+ 'readValueFromPointer': simpleReadValueFromPointer,
55+ destructorFunction: null, // This type does not need a destructor
56+
57+ // TODO: do we need a deleteObject here? write a test where
58+ // emval is passed into JS via an interface
59+ }` ,
4260 $init_embind__deps : [
4361 '$getInheritedInstanceCount' , '$getLiveInheritedInstances' ,
4462 '$flushPendingDeletes' , '$setDelayFunction' ] ,
@@ -668,32 +686,17 @@ var LibraryEmbind = {
668686 } ,
669687
670688 _embind_register_emval__deps : [
671- '_emval_decref' , '$Emval' ,
672- '$readLatin1String' , '$registerType' , '$simpleReadValueFromPointer' ] ,
673- _embind_register_emval : ( rawType , name ) => {
674- name = readLatin1String ( name ) ;
675- registerType ( rawType , {
676- name,
677- 'fromWireType' : ( handle ) => {
678- var rv = Emval . toValue ( handle ) ;
679- __emval_decref ( handle ) ;
680- return rv ;
681- } ,
682- 'toWireType' : ( destructors , value ) => Emval . toHandle ( value ) ,
683- 'argPackAdvance' : GenericWireTypeSize ,
684- 'readValueFromPointer' : simpleReadValueFromPointer ,
685- destructorFunction : null , // This type does not need a destructor
686- } ) ;
687- } ,
689+ '$registerType' , '$EmValType' ] ,
690+ _embind_register_emval : ( rawType ) => registerType ( rawType , EmValType ) ,
688691
689692 _embind_register_user_type__deps : [ '_embind_register_emval' ] ,
690693 _embind_register_user_type : ( rawType , name ) => {
691- __embind_register_emval ( rawType , name ) ;
694+ __embind_register_emval ( rawType ) ;
692695 } ,
693696
694697 _embind_register_optional__deps : [ '_embind_register_emval' ] ,
695698 _embind_register_optional : ( rawOptionalType , rawType ) => {
696- __embind_register_emval ( rawOptionalType , "" ) ;
699+ __embind_register_emval ( rawOptionalType ) ;
697700 } ,
698701
699702 _embind_register_memory_view__deps : [ '$readLatin1String' , '$registerType' ] ,
0 commit comments