@@ -8,6 +8,7 @@ function hbjs(Module) {
88 var heapf32 = Module . HEAPF32 ;
99 var utf8Decoder = new TextDecoder ( "utf8" ) ;
1010 let addFunction = Module . addFunction ;
11+ let removeFunction = Module . removeFunction ;
1112
1213 var freeFuncPtr = addFunction ( function ( ptr ) { exports . free ( ptr ) ; } , 'vi' ) ;
1314
@@ -177,6 +178,11 @@ function hbjs(Module) {
177178 function createFont ( face ) {
178179 var ptr = exports . hb_font_create ( face . ptr ) ;
179180 var drawFuncsPtr = null ;
181+ var moveToPtr = null ;
182+ var lineToPtr = null ;
183+ var cubicToPtr = null ;
184+ var quadToPtr = null ;
185+ var closePathPtr = null ;
180186
181187 /**
182188 * Return a glyph as an SVG path string.
@@ -200,11 +206,11 @@ function hbjs(Module) {
200206 pathBuffer += 'Z' ;
201207 }
202208
203- var moveToPtr = addFunction ( moveTo , 'viiiffi' ) ;
204- var lineToPtr = addFunction ( lineTo , 'viiiffi' ) ;
205- var cubicToPtr = addFunction ( cubicTo , 'viiiffffffi' ) ;
206- var quadToPtr = addFunction ( quadTo , 'viiiffffi' ) ;
207- var closePathPtr = addFunction ( closePath , 'viiii' ) ;
209+ moveToPtr = addFunction ( moveTo , 'viiiffi' ) ;
210+ lineToPtr = addFunction ( lineTo , 'viiiffi' ) ;
211+ cubicToPtr = addFunction ( cubicTo , 'viiiffffffi' ) ;
212+ quadToPtr = addFunction ( quadTo , 'viiiffffi' ) ;
213+ closePathPtr = addFunction ( closePath , 'viiii' ) ;
208214 drawFuncsPtr = exports . hb_draw_funcs_create ( ) ;
209215 exports . hb_draw_funcs_set_move_to_func ( drawFuncsPtr , moveToPtr , 0 , 0 ) ;
210216 exports . hb_draw_funcs_set_line_to_func ( drawFuncsPtr , lineToPtr , 0 , 0 ) ;
@@ -275,7 +281,18 @@ function hbjs(Module) {
275281 /**
276282 * Free the object.
277283 */
278- destroy : function ( ) { exports . hb_font_destroy ( ptr ) ; }
284+ destroy : function ( ) {
285+ exports . hb_font_destroy ( ptr ) ;
286+ if ( drawFuncsPtr ) {
287+ exports . hb_draw_funcs_destroy ( drawFuncsPtr ) ;
288+ drawFuncsPtr = null ;
289+ removeFunction ( moveToPtr ) ;
290+ removeFunction ( lineToPtr ) ;
291+ removeFunction ( cubicToPtr ) ;
292+ removeFunction ( quadToPtr ) ;
293+ removeFunction ( closePathPtr ) ;
294+ }
295+ }
279296 } ;
280297 }
281298
@@ -529,6 +546,7 @@ function hbjs(Module) {
529546 exports . hb_buffer_set_message_func ( buffer . ptr , traceFuncPtr , 0 , 0 ) ;
530547 shape ( font , buffer , features , 0 ) ;
531548 exports . free ( traceBufPtr ) ;
549+ removeFunction ( traceFuncPtr ) ;
532550
533551 return trace ;
534552 }
0 commit comments