66 ObjectDefineProperty,
77 ReflectApply,
88 StringPrototypeIncludes,
9- Symbol,
109 TypeError,
1110} = primordials ;
1211
@@ -24,11 +23,8 @@ const {
2423 getRawPointer,
2524 kFastArguments,
2625 kFastBufferInvoke,
27- kSbSharedBuffer,
2826} = internalBinding ( 'ffi' ) ;
2927
30- const kFastBuffer = Symbol ( 'kFastBuffer' ) ;
31-
3228const U64_MAX = 0xFFFFFFFFFFFFFFFFn ;
3329const I64_MAX = 0x7FFFFFFFFFFFFFFFn ;
3430const I64_MIN = - 0x8000000000000000n ;
@@ -79,16 +75,13 @@ function validateFastIntegerArg(type, value, index) {
7975 }
8076}
8177
82- function needsRawPointerConversion ( type , rawFn ) {
83- if ( rawFn !== undefined && rawFn [ kFastBuffer ] === true &&
84- ( type === 'buffer' || type === 'arraybuffer' ) ) {
85- return false ;
86- }
78+ function needsRawPointerConversion ( type ) {
8779 return type === 'buffer' || type === 'arraybuffer' ;
8880}
8981
9082function needsPointerLikeConversion ( type ) {
91- return type === 'pointer' || type === 'ptr' || type === 'function' ;
83+ return type === 'pointer' || type === 'ptr' || type === 'function' ||
84+ type === 'buffer' || type === 'arraybuffer' ;
9285}
9386
9487function needsStringPointerConversion ( type ) {
@@ -100,12 +93,8 @@ function needsNullPointerConversion(type) {
10093 needsRawPointerConversion ( type ) ;
10194}
10295
103- function needsPointerConversion ( type , rawFn ) {
104- if ( rawFn !== undefined && rawFn [ kFastBuffer ] === true &&
105- ( type === 'buffer' || type === 'arraybuffer' ) ) {
106- return false ;
107- }
108- return needsRawPointerConversion ( type , rawFn ) ||
96+ function needsPointerConversion ( type ) {
97+ return needsRawPointerConversion ( type ) ||
10998 needsNullPointerConversion ( type ) || needsStringPointerConversion ( type ) ;
11099}
111100
@@ -174,11 +163,11 @@ function convertPointerArg(type, value, stringState, index) {
174163 return value ;
175164}
176165
177- function getFastArgumentIndexes ( argumentsTypes , rawFn ) {
166+ function getFastArgumentIndexes ( argumentsTypes ) {
178167 let indexes = null ;
179168 for ( let i = 0 ; i < argumentsTypes . length ; i ++ ) {
180169 if ( fastIntegerTypeInfo [ argumentsTypes [ i ] ] === undefined &&
181- ! needsPointerConversion ( argumentsTypes [ i ] , rawFn ) ) {
170+ ! needsPointerConversion ( argumentsTypes [ i ] ) ) {
182171 continue ;
183172 }
184173 if ( indexes === null ) {
@@ -189,31 +178,12 @@ function getFastArgumentIndexes(argumentsTypes, rawFn) {
189178 return indexes ;
190179}
191180
192- function convertFastArg ( type , value , rawFn , stringState , index ) {
181+ function convertFastArg ( type , value , stringState , index ) {
193182 validateFastIntegerArg ( type , value , index ) ;
194- return needsPointerConversion ( type , rawFn ) ?
183+ return needsPointerConversion ( type ) ?
195184 convertPointerArg ( type , value , stringState , index ) : value ;
196185}
197186
198- function initializeFastBufferMetadata ( rawFn , argumentTypes ) {
199- if ( rawFn === undefined || rawFn === null || argumentTypes === undefined ) {
200- return ;
201- }
202- if ( rawFn [ kSbSharedBuffer ] !== undefined ) {
203- return ;
204- }
205-
206- if ( rawFn [ kFastArguments ] !== undefined ) {
207- for ( let i = 0 ; i < argumentTypes . length ; i ++ ) {
208- const type = argumentTypes [ i ] ;
209- if ( type === 'buffer' || type === 'arraybuffer' ) {
210- rawFn [ kFastBuffer ] = true ;
211- break ;
212- }
213- }
214- }
215- }
216-
217187function inheritMetadata ( wrapper , rawFn , nargs ) {
218188 ObjectDefineProperty ( wrapper , 'name' , {
219189 __proto__ : null , value : rawFn . name , configurable : true ,
@@ -239,7 +209,7 @@ function wrapWithRawPointerConversions(rawFn, argumentTypes, _owner) {
239209 return rawFn ;
240210 }
241211
242- const indexes = getFastArgumentIndexes ( argumentTypes , rawFn ) ;
212+ const indexes = getFastArgumentIndexes ( argumentTypes ) ;
243213 if ( indexes === null ) {
244214 return rawFn ;
245215 }
@@ -295,9 +265,8 @@ function wrapWithRawPointerConversions(rawFn, argumentTypes, _owner) {
295265 ( c1 && hasStringPointerArg ( t1 , a1 ) ) ;
296266 if ( stringCall ) enterStringConversion ( stringState ) ;
297267 try {
298- return rawFn ( c0 ?
299- convertFastArg ( t0 , a0 , rawFn , stringState , 0 ) : a0 ,
300- c1 ? convertFastArg ( t1 , a1 , rawFn , stringState , 1 ) : a1 ) ;
268+ return rawFn ( c0 ? convertFastArg ( t0 , a0 , stringState , 0 ) : a0 ,
269+ c1 ? convertFastArg ( t1 , a1 , stringState , 1 ) : a1 ) ;
301270 } finally {
302271 if ( stringCall ) exitStringConversion ( stringState ) ;
303272 }
@@ -318,10 +287,9 @@ function wrapWithRawPointerConversions(rawFn, argumentTypes, _owner) {
318287 ( c2 && hasStringPointerArg ( t2 , a2 ) ) ;
319288 if ( stringCall ) enterStringConversion ( stringState ) ;
320289 try {
321- return rawFn ( c0 ?
322- convertFastArg ( t0 , a0 , rawFn , stringState , 0 ) : a0 ,
323- c1 ? convertFastArg ( t1 , a1 , rawFn , stringState , 1 ) : a1 ,
324- c2 ? convertFastArg ( t2 , a2 , rawFn , stringState , 2 ) : a2 ) ;
290+ return rawFn ( c0 ? convertFastArg ( t0 , a0 , stringState , 0 ) : a0 ,
291+ c1 ? convertFastArg ( t1 , a1 , stringState , 1 ) : a1 ,
292+ c2 ? convertFastArg ( t2 , a2 , stringState , 2 ) : a2 ) ;
325293 } finally {
326294 if ( stringCall ) exitStringConversion ( stringState ) ;
327295 }
@@ -344,7 +312,7 @@ function wrapWithRawPointerConversions(rawFn, argumentTypes, _owner) {
344312 for ( let i = 0 ; i < indexes . length ; i ++ ) {
345313 const index = indexes [ i ] ;
346314 args [ index ] = convertFastArg (
347- argumentTypes [ index ] , args [ index ] , rawFn , stringState , index ) ;
315+ argumentTypes [ index ] , args [ index ] , stringState , index ) ;
348316 }
349317 return ReflectApply ( rawFn , undefined , args ) ;
350318 } finally {
@@ -360,6 +328,5 @@ module.exports = {
360328 convertPointerArg,
361329 hasPointerMemoryArg,
362330 hasStringPointerArg,
363- initializeFastBufferMetadata,
364331 wrapWithRawPointerConversions,
365332} ;
0 commit comments