15
15
// -- jshint doesn't understand library syntax, so we need to specifically tell it about the symbols we define
16
16
/*global typeDependencies, flushPendingDeletes, getTypeName, getBasestPointer, throwBindingError, UnboundTypeError, embindRepr, registeredInstances, registeredTypes*/
17
17
/*global ensureOverloadTable, embind__requireFunction, awaitingDependencies, makeLegalFunctionName, embind_charCodes:true, registerType, createNamedFunction, RegisteredPointer, throwInternalError*/
18
- /*global simpleReadValueFromPointer, floatReadValueFromPointer, integerReadValueFromPointer, enumReadValueFromPointer, replacePublicSymbol, craftInvokerFunction, tupleRegistrations*/
18
+ /*global floatReadValueFromPointer, integerReadValueFromPointer, enumReadValueFromPointer, replacePublicSymbol, craftInvokerFunction, tupleRegistrations*/
19
19
/*global finalizationRegistry, attachFinalizer, detachFinalizer, releaseClassHandle, runDestructor*/
20
20
/*global ClassHandle, makeClassHandle, structRegistrations, whenDependentTypesAreResolved, BindingError, deletionQueue, delayFunction:true, upcastPointer*/
21
21
/*global exposePublicSymbol, heap32VectorToArray, newFunc, char_0, char_9*/
@@ -41,7 +41,7 @@ var LibraryEmbind = {
41
41
// If register_type is used, emval will be registered multiple times for
42
42
// different type id's, but only a single type object is needed on the JS side
43
43
// for all of them. Store the type for reuse.
44
- $EmValType__deps : [ '_emval_decref' , '$Emval' , '$simpleReadValueFromPointer ' , '$GenericWireTypeSize' ] ,
44
+ $EmValType__deps : [ '_emval_decref' , '$Emval' , '$readPointer ' , '$GenericWireTypeSize' ] ,
45
45
$EmValType : `{
46
46
name: 'emscripten::val',
47
47
'fromWireType': (handle) => {
@@ -51,7 +51,7 @@ var LibraryEmbind = {
51
51
},
52
52
'toWireType': (destructors, value) => Emval.toHandle(value),
53
53
'argPackAdvance': GenericWireTypeSize,
54
- 'readValueFromPointer': simpleReadValueFromPointer ,
54
+ 'readValueFromPointer': readPointer ,
55
55
destructorFunction: null, // This type does not need a destructor
56
56
57
57
// TODO: do we need a deleteObject here? write a test where
@@ -494,12 +494,6 @@ var LibraryEmbind = {
494
494
} ) ;
495
495
} ,
496
496
497
- $simpleReadValueFromPointer__docs : '/ ** @suppress { globalThis } * / ' ,
498
- // For types whose wire types are 32-bit pointers.
499
- $simpleReadValueFromPointer : function ( pointer ) {
500
- return this [ 'fromWireType' ] ( { { { makeGetValue ( 'pointer' , '0' , 'i32' ) } } } ) ;
501
- } ,
502
-
503
497
$readPointer__docs : '/ ** @suppress { globalThis } * / ' ,
504
498
$readPointer : function ( pointer ) {
505
499
return this [ 'fromWireType' ] ( { { { makeGetValue ( 'pointer' , '0' , '*' ) } } } ) ;
@@ -617,33 +611,33 @@ var LibraryEmbind = {
617
611
] ,
618
612
_embind_register_std_wstring : ( rawType , charSize , name ) = > {
619
613
name = readLatin1String ( name ) ;
620
- var decodeString , encodeString, getHeap , lengthBytesUTF, shift ;
614
+ var decodeString , encodeString, getValue , lengthBytesUTF ;
621
615
if ( charSize = = = 2 ) {
622
616
decodeString = UTF16ToString ;
623
617
encodeString = stringToUTF16 ;
624
618
lengthBytesUTF = lengthBytesUTF16 ;
619
+ getValue = ( pointer ) => { { { makeGetValue ( 'pointer' , 0 , 'u16' ) } } } ;
625
620
getHeap = ( ) => HEAPU16 ;
626
- shift = 1 ;
627
621
} else if ( charSize === 4 ) {
628
622
decodeString = UTF32ToString ;
629
623
encodeString = stringToUTF32 ;
630
624
lengthBytesUTF = lengthBytesUTF32 ;
631
- getHeap = ( ) => HEAPU32 ;
632
- shift = 2 ;
625
+ getValue = ( pointer ) => { { { makeGetValue ( 'pointer' , 0 , 'u32' ) } } } ;
633
626
}
634
627
registerType ( rawType , {
635
628
name,
636
629
'fromWireType' : ( value ) => {
637
630
// Code mostly taken from _embind_register_std_string fromWireType
638
631
var length = { { { makeGetValue ( 'value' , 0 , '*' ) } } } ;
639
- var HEAP = getHeap ( ) ;
640
632
var str ;
641
633
642
634
var decodeStartPtr = value + { { { POINTER_SIZE } } } ;
643
635
// Looping here to support possible embedded '0' bytes
644
636
for ( var i = 0 ; i <= length ; ++ i ) {
645
637
var currentBytePtr = value + { { { POINTER_SIZE } } } + i * charSize ;
646
- if ( i == length || HEAP [ currentBytePtr >> shift ] == 0 ) {
638
+ // Use division instead of shift since the pointer may be greater than
639
+ // the i32 range.
640
+ if ( i == length || getValue ( currentBytePtr ) == 0 ) {
647
641
var maxReadBytes = currentBytePtr - decodeStartPtr ;
648
642
var stringSegment = decodeString ( decodeStartPtr , maxReadBytes ) ;
649
643
if ( str === undefined ) {
@@ -668,7 +662,7 @@ var LibraryEmbind = {
668
662
// assumes POINTER_SIZE alignment
669
663
var length = lengthBytesUTF ( value ) ;
670
664
var ptr = _malloc ( { { { POINTER_SIZE } } } + length + charSize ) ;
671
- { { { makeSetValue ( 'ptr' , '0' , 'length >> shift ' , SIZE_TYPE ) } } } ;
665
+ { { { makeSetValue ( 'ptr' , '0' , 'length / charSize ' , SIZE_TYPE ) } } } ;
672
666
673
667
encodeString ( value , ptr + { { { POINTER_SIZE } } } , length + charSize ) ;
674
668
@@ -678,7 +672,7 @@ var LibraryEmbind = {
678
672
return ptr ;
679
673
} ,
680
674
'argPackAdvance' : GenericWireTypeSize ,
681
- 'readValueFromPointer ': simpleReadValueFromPointer ,
675
+ 'readValueFromPointer' : readPointer ,
682
676
destructorFunction ( ptr ) {
683
677
_free ( ptr ) ;
684
678
}
@@ -1012,7 +1006,7 @@ var LibraryEmbind = {
1012
1006
1013
1007
_embind_finalize_value_array__deps : [
1014
1008
'$tupleRegistrations' , '$runDestructors' ,
1015
- '$simpleReadValueFromPointer ' , '$whenDependentTypesAreResolved' ] ,
1009
+ '$readPointer ' , '$whenDependentTypesAreResolved' ] ,
1016
1010
_embind_finalize_value_array : ( rawTupleType ) = > {
1017
1011
var reg = tupleRegistrations [ rawTupleType ] ;
1018
1012
delete tupleRegistrations [ rawTupleType ] ;
@@ -1064,7 +1058,7 @@ var LibraryEmbind = {
1064
1058
return ptr ;
1065
1059
} ,
1066
1060
'argPackAdvance' : GenericWireTypeSize ,
1067
- 'readValueFromPointer' : simpleReadValueFromPointer ,
1061
+ 'readValueFromPointer' : readPointer ,
1068
1062
destructorFunction : rawDestructor ,
1069
1063
} ] ;
1070
1064
} ) ;
@@ -1115,7 +1109,7 @@ var LibraryEmbind = {
1115
1109
1116
1110
_embind_finalize_value_object__deps : [
1117
1111
'$structRegistrations' , '$runDestructors' ,
1118
- '$simpleReadValueFromPointer ' , '$whenDependentTypesAreResolved' ] ,
1112
+ '$readPointer ' , '$whenDependentTypesAreResolved' ] ,
1119
1113
_embind_finalize_value_object : ( structType ) = > {
1120
1114
var reg = structRegistrations [ structType ] ;
1121
1115
delete structRegistrations [ structType ] ;
@@ -1173,7 +1167,7 @@ var LibraryEmbind = {
1173
1167
return ptr ;
1174
1168
} ,
1175
1169
'argPackAdvance' : GenericWireTypeSize ,
1176
- 'readValueFromPointer' : simpleReadValueFromPointer ,
1170
+ 'readValueFromPointer' : readPointer ,
1177
1171
destructorFunction : rawDestructor ,
1178
1172
} ] ;
1179
1173
} ) ;
0 commit comments