@@ -67,9 +67,9 @@ impl DemanglerConfig {
6767 Self :: from_api_object ( & config)
6868 }
6969
70- pub fn from_api_object ( config : & BNDemanglerConfig ) -> Self {
70+ pub ( crate ) fn from_api_object ( config : & BNDemanglerConfig ) -> Self {
7171 let platform = match config. platform . is_null ( ) {
72- true => Self :: default ( ) . platform ,
72+ true => None ,
7373 false => {
7474 Some ( unsafe { Platform :: ref_from_raw ( BNNewPlatformReference ( config. platform ) ) } )
7575 }
@@ -92,7 +92,7 @@ impl DemanglerConfig {
9292 . expect ( "default demangler config has no platform" )
9393 }
9494
95- pub fn to_api_object ( & self ) -> BNDemanglerConfig {
95+ pub ( crate ) fn to_api_object ( & self ) -> BNDemanglerConfig {
9696 let platform = self . get_platform ( ) ;
9797 BNDemanglerConfig {
9898 platform : platform. handle ,
@@ -124,9 +124,10 @@ impl DemanglerResult {
124124 }
125125 }
126126
127- pub fn from_api_object ( result : & BNDemanglerResult ) -> Self {
127+ pub ( crate ) fn from_api_object ( result : & BNDemanglerResult ) -> Self {
128128 let ty = match result. type_ . is_null ( ) {
129129 true => None ,
130+ // The source result remains independently owned and is freed by the caller.
130131 false => Some ( unsafe { Type :: ref_from_raw ( BNNewTypeReference ( result. type_ ) ) } ) ,
131132 } ;
132133 Self {
@@ -135,13 +136,13 @@ impl DemanglerResult {
135136 }
136137 }
137138
138- pub fn from_api_object_and_free ( result : & mut BNDemanglerResult ) -> Self {
139+ pub ( crate ) fn from_api_object_and_free ( result : & mut BNDemanglerResult ) -> Self {
139140 let demangler_result = Self :: from_api_object ( result) ;
140141 unsafe { BNFreeDemanglerResult ( result) } ;
141142 demangler_result
142143 }
143144
144- pub fn to_api_object ( & self ) -> BNDemanglerResult {
145+ pub ( crate ) fn to_api_object ( & self ) -> BNDemanglerResult {
145146 BNDemanglerResult {
146147 name : QualifiedName :: into_raw ( self . name . clone ( ) ) ,
147148 type_ : self
@@ -223,9 +224,18 @@ pub fn demangle_generic(
223224}
224225
225226pub fn demangle_llvm ( mangled_name : & str , simplify : bool ) -> Option < DemanglerResult > {
226- let mut config = DemanglerConfig :: default ( ) ;
227- config. simplify_templates = simplify;
228- demangle_with_demangler ( llvm_demangler ( ) , mangled_name, & config)
227+ let config = DemanglerConfig {
228+ simplify_templates : simplify,
229+ ..DemanglerConfig :: default ( )
230+ } ;
231+ demangle_llvm_with_config ( mangled_name, & config)
232+ }
233+
234+ pub fn demangle_llvm_with_config (
235+ mangled_name : & str ,
236+ config : & DemanglerConfig ,
237+ ) -> Option < DemanglerResult > {
238+ demangle_with_demangler ( llvm_demangler ( ) , mangled_name, config)
229239}
230240
231241pub fn demangle_gnu3 (
@@ -238,7 +248,14 @@ pub fn demangle_gnu3(
238248 . map ( |platform| DemanglerConfig :: for_platform ( & platform, simplify) )
239249 . unwrap_or_default ( ) ;
240250 config. simplify_templates = simplify;
241- demangle_with_demangler ( gnu3_demangler ( ) , mangled_name, & config)
251+ demangle_gnu3_with_config ( mangled_name, & config)
252+ }
253+
254+ pub fn demangle_gnu3_with_config (
255+ mangled_name : & str ,
256+ config : & DemanglerConfig ,
257+ ) -> Option < DemanglerResult > {
258+ demangle_with_demangler ( gnu3_demangler ( ) , mangled_name, config)
242259}
243260
244261pub fn demangle_ms (
@@ -251,7 +268,14 @@ pub fn demangle_ms(
251268 . map ( |platform| DemanglerConfig :: for_platform ( & platform, simplify) )
252269 . unwrap_or_default ( ) ;
253270 config. simplify_templates = simplify;
254- demangle_with_demangler ( msvc_demangler ( ) , mangled_name, & config)
271+ demangle_ms_with_config ( mangled_name, & config)
272+ }
273+
274+ pub fn demangle_ms_with_config (
275+ mangled_name : & str ,
276+ config : & DemanglerConfig ,
277+ ) -> Option < DemanglerResult > {
278+ demangle_with_demangler ( msvc_demangler ( ) , mangled_name, config)
255279}
256280
257281pub fn simplify_demangled_template_name ( name : impl Into < QualifiedName > ) -> QualifiedName {
@@ -366,7 +390,6 @@ impl Demangler {
366390 let ctxt = Box :: into_raw ( Box :: new ( demangler) ) ;
367391
368392 let callbacks = Box :: into_raw ( Box :: new ( BNDemanglerCallbacks {
369- size : std:: mem:: size_of :: < BNDemanglerCallbacks > ( ) ,
370393 context : ctxt as * mut c_void ,
371394 isMangledString : Some ( cb_is_mangled_string :: < C > ) ,
372395 demangle : Some ( cb_demangle :: < C > ) ,
0 commit comments