@@ -13,23 +13,25 @@ extern lol_html_rewriter_directive_t callback_doc_end(lol_html_doc_end_t *doc_en
1313import "C"
1414import (
1515 "unsafe"
16-
17- "github.com/mattn/go-pointer"
1816)
1917
2018// rewriterBuilder is used to build a rewriter.
2119type rewriterBuilder struct {
2220 rb * C.lol_html_rewriter_builder_t
2321 pointers []unsafe.Pointer
22+ built bool // this builder has built at least one writer
2423}
2524
2625func newRewriterBuilder () * rewriterBuilder {
27- return & rewriterBuilder {rb : C .lol_html_rewriter_builder_new (), pointers : nil }
26+ return & rewriterBuilder {rb : C .lol_html_rewriter_builder_new (), pointers : nil , built : false }
2827}
2928
3029func (rb * rewriterBuilder ) Free () {
3130 if rb != nil {
3231 C .lol_html_rewriter_builder_free (rb .rb )
32+ if ! rb .built {
33+ unrefPointers (rb .pointers )
34+ }
3335 }
3436}
3537
@@ -52,10 +54,10 @@ func (rb *rewriterBuilder) AddDocumentContentHandlers(
5254 if documentEndHandler != nil {
5355 cCallbackDocumentEndPointer = (* [0 ]byte )(C .callback_doc_end )
5456 }
55- doctypeHandlerPointer := pointer . Save (doctypeHandler )
56- commentHandlerPointer := pointer . Save (commentHandler )
57- textChunkHandlerPointer := pointer . Save (textChunkHandler )
58- documentEndHandlerPointer := pointer . Save (documentEndHandler )
57+ doctypeHandlerPointer := savePointer (doctypeHandler )
58+ commentHandlerPointer := savePointer (commentHandler )
59+ textChunkHandlerPointer := savePointer (textChunkHandler )
60+ documentEndHandlerPointer := savePointer (documentEndHandler )
5961 C .lol_html_rewriter_builder_add_document_content_handlers (
6062 rb .rb ,
6163 cCallbackDoctypePointer ,
@@ -92,9 +94,9 @@ func (rb *rewriterBuilder) AddElementContentHandlers(
9294 if textChunkHandler != nil {
9395 cCallbackTextChunkPointer = (* [0 ]byte )(C .callback_text_chunk )
9496 }
95- elementHandlerPointer := pointer . Save (elementHandler )
96- commentHandlerPointer := pointer . Save (commentHandler )
97- textChunkHandlerPointer := pointer . Save (textChunkHandler )
97+ elementHandlerPointer := savePointer (elementHandler )
98+ commentHandlerPointer := savePointer (commentHandler )
99+ textChunkHandlerPointer := savePointer (textChunkHandler )
98100 C .lol_html_rewriter_builder_add_element_content_handlers (
99101 rb .rb ,
100102 (* C .lol_html_selector_t )(selector ),
@@ -116,7 +118,7 @@ func (rb *rewriterBuilder) Build(sink OutputSink, config Config) (*rewriter, err
116118 preallocated_parsing_buffer_size : C .size_t (config .Memory .PreallocatedParsingBufferSize ),
117119 max_allowed_memory_usage : C .size_t (config .Memory .MaxAllowedMemoryUsage ),
118120 }
119- p := pointer . Save (sink )
121+ p := savePointer (sink )
120122 r := C .lol_html_rewriter_build (
121123 rb .rb ,
122124 encodingC ,
@@ -127,6 +129,7 @@ func (rb *rewriterBuilder) Build(sink OutputSink, config Config) (*rewriter, err
127129 C .bool (config .Strict ),
128130 )
129131 if r != nil {
132+ rb .built = true
130133 return & rewriter {rw : r , pointers : rb .pointers }, nil
131134 }
132135 return nil , getError ()
0 commit comments