@@ -25,8 +25,7 @@ local function create_start_document_callback(user_callback)
2525 user_callback ()
2626 end
2727 local c_callback = ffi .cast (" startDocumentSAXFunc" , callback )
28- ffi .gc (c_callback , function () c_callback :free () end )
29- return c_callback
28+ return ffi .gc (c_callback , c_callback .free )
3029end
3130
3231local ELEMENT_TYPES = {
@@ -48,8 +47,7 @@ local function create_element_declaration_callback(user_callback)
4847 content )
4948 end
5049 local c_callback = ffi .cast (" elementDeclSAXFunc" , callback )
51- ffi .gc (c_callback , function () c_callback :free () end )
52- return c_callback
50+ return ffi .gc (c_callback , c_callback .free )
5351end
5452
5553local function create_attribute_declaration_callback (user_callback )
@@ -75,8 +73,7 @@ local function create_attribute_declaration_callback(user_callback)
7573 enumerated_value )
7674 end
7775 local c_callback = ffi .cast (" attributeDeclSAXFunc" , callback )
78- ffi .gc (c_callback , function () c_callback :free () end )
79- return c_callback
76+ return ffi .gc (c_callback , c_callback .free )
8077end
8178
8279local function create_unparsed_entity_declaration_callback (user_callback )
@@ -91,8 +88,7 @@ local function create_unparsed_entity_declaration_callback(user_callback)
9188 to_string (raw_notation_name ))
9289 end
9390 local c_callback = ffi .cast (" unparsedEntityDeclSAXFunc" , callback )
94- ffi .gc (c_callback , function () c_callback :free () end )
95- return c_callback
91+ return ffi .gc (c_callback , c_callback .free )
9692end
9793
9894local function create_notation_declaration_callback (user_callback )
@@ -105,8 +101,7 @@ local function create_notation_declaration_callback(user_callback)
105101 to_string (raw_system_id ))
106102 end
107103 local c_callback = ffi .cast (" notationDeclSAXFunc" , callback )
108- ffi .gc (c_callback , function () c_callback :free () end )
109- return c_callback
104+ return ffi .gc (c_callback , c_callback .free )
110105end
111106
112107local function create_entity_declaration_callback (user_callback )
@@ -123,8 +118,7 @@ local function create_entity_declaration_callback(user_callback)
123118 to_string (raw_content ))
124119 end
125120 local c_callback = ffi .cast (" entityDeclSAXFunc" , callback )
126- ffi .gc (c_callback , function () c_callback :free () end )
127- return c_callback
121+ return ffi .gc (c_callback , c_callback .free )
128122end
129123
130124local function create_internal_subset_callback (user_callback )
@@ -138,8 +132,7 @@ local function create_internal_subset_callback(user_callback)
138132 user_callback (name , external_id , system_id )
139133 end
140134 local c_callback = ffi .cast (" internalSubsetSAXFunc" , callback )
141- ffi .gc (c_callback , function () c_callback :free () end )
142- return c_callback
135+ return ffi .gc (c_callback , c_callback .free )
143136end
144137
145138local function create_external_subset_callback (user_callback )
@@ -153,8 +146,7 @@ local function create_external_subset_callback(user_callback)
153146 user_callback (name , external_id , system_id )
154147 end
155148 local c_callback = ffi .cast (" externalSubsetSAXFunc" , callback )
156- ffi .gc (c_callback , function () c_callback :free () end )
157- return c_callback
149+ return ffi .gc (c_callback , c_callback .free )
158150end
159151
160152local function create_cdata_block_callback (user_callback )
@@ -163,17 +155,15 @@ local function create_cdata_block_callback(user_callback)
163155 user_callback (cdata_block )
164156 end
165157 local c_callback = ffi .cast (" cdataBlockSAXFunc" , callback )
166- ffi .gc (c_callback , function () c_callback :free () end )
167- return c_callback
158+ return ffi .gc (c_callback , c_callback .free )
168159end
169160
170161local function create_comment_callback (user_callback )
171162 local callback = function (user_data , raw_comment )
172163 user_callback (to_string (raw_comment ))
173164 end
174165 local c_callback = ffi .cast (" commentSAXFunc" , callback )
175- ffi .gc (c_callback , function () c_callback :free () end )
176- return c_callback
166+ return ffi .gc (c_callback , c_callback .free )
177167end
178168
179169local function create_processing_instruction_callback (user_callback )
@@ -183,8 +173,7 @@ local function create_processing_instruction_callback(user_callback)
183173 user_callback (target , data )
184174 end
185175 local c_callback = ffi .cast (" processingInstructionSAXFunc" , callback )
186- ffi .gc (c_callback , function () c_callback :free () end )
187- return c_callback
176+ return ffi .gc (c_callback , c_callback .free )
188177end
189178
190179local function create_ignorable_whitespace_callback (user_callback )
@@ -196,26 +185,23 @@ local function create_ignorable_whitespace_callback(user_callback)
196185 user_callback (ignorable_whitespaces )
197186 end
198187 local c_callback = ffi .cast (" ignorableWhitespaceSAXFunc" , callback )
199- ffi .gc (c_callback , function () c_callback :free () end )
200- return c_callback
188+ return ffi .gc (c_callback , c_callback .free )
201189end
202190
203191local function create_text_callback (user_callback )
204192 local callback = function (user_data , raw_text , raw_length )
205193 user_callback (to_string (raw_text , raw_length ))
206194 end
207195 local c_callback = ffi .cast (" charactersSAXFunc" , callback )
208- ffi .gc (c_callback , function () c_callback :free () end )
209- return c_callback
196+ return ffi .gc (c_callback , c_callback .free )
210197end
211198
212199local function create_reference_callback (user_callback )
213200 local callback = function (user_data , raw_entity_name )
214201 user_callback (to_string (raw_entity_name ))
215202 end
216203 local c_callback = ffi .cast (" referenceSAXFunc" , callback )
217- ffi .gc (c_callback , function () c_callback :free () end )
218- return c_callback
204+ return ffi .gc (c_callback , c_callback .free )
219205end
220206
221207local function create_start_element_callback (user_callback )
@@ -264,8 +250,7 @@ local function create_start_element_callback(user_callback)
264250 attributes )
265251 end
266252 local c_callback = ffi .cast (" startElementNsSAX2Func" , callback )
267- ffi .gc (c_callback , function () c_callback :free () end )
268- return c_callback
253+ return ffi .gc (c_callback , c_callback .free )
269254end
270255
271256local function create_end_element_callback (user_callback )
@@ -278,8 +263,7 @@ local function create_end_element_callback(user_callback)
278263 to_string (raw_uri ))
279264 end
280265 local c_callback = ffi .cast (" endElementNsSAX2Func" , callback )
281- ffi .gc (c_callback , function () c_callback :free () end )
282- return c_callback
266+ return ffi .gc (c_callback , c_callback .free )
283267end
284268
285269local function create_warning_callback (user_callback )
@@ -292,26 +276,23 @@ local function create_warning_callback(user_callback)
292276 user_callback (xml_warning )
293277 end
294278 local c_callback = ffi .cast (" warningSAXFunc" , callback )
295- ffi .gc (c_callback , function () c_callback :free () end )
296- return c_callback
279+ return ffi .gc (c_callback , c_callback .free )
297280end
298281
299282local function create_xml_structured_error_callback (user_callback )
300283 local callback = function (user_data , raw_xml_error )
301284 user_callback (converter .convert_xml_error (raw_xml_error ))
302285 end
303286 local c_callback = ffi .cast (" xmlStructuredErrorFunc" , callback )
304- ffi .gc (c_callback , function () c_callback :free () end )
305- return c_callback
287+ return ffi .gc (c_callback , c_callback .free )
306288end
307289
308290local function create_end_document_callback (user_callback )
309291 local callback = function (user_data )
310292 user_callback ()
311293 end
312294 local c_callback = ffi .cast (" endDocumentSAXFunc" , callback )
313- ffi .gc (c_callback , function () c_callback :free () end )
314- return c_callback
295+ return ffi .gc (c_callback , c_callback .free )
315296end
316297
317298function metatable .__newindex (parser , key , value )
0 commit comments