File tree Expand file tree Collapse file tree 1 file changed +16
-3
lines changed
Expand file tree Collapse file tree 1 file changed +16
-3
lines changed Original file line number Diff line number Diff line change 11use std:: ffi:: OsStr ;
22use std:: fs:: File ;
3+ use std:: io:: BufRead ;
34use std:: io:: BufReader ;
45use std:: io:: BufWriter ;
56use std:: io:: Write ;
@@ -57,9 +58,21 @@ fn main() -> Result<()> {
5758 let clang_ast = args. value_from_os_str ( "--input" , |path_str| {
5859 let path = Path :: new ( path_str) ;
5960 let file = File :: open ( path) ?;
60- let serde = match path. extension ( ) . and_then ( OsStr :: to_str) {
61- Some ( "gz" ) => serde_json:: from_reader ( BufReader :: new ( GzDecoder :: new ( file) ) ) ,
62- _ => serde_json:: from_reader ( BufReader :: new ( file) ) ,
61+ let serde = {
62+ let reader: & mut dyn BufRead = {
63+ if Some ( "gz" ) == path. extension ( ) . and_then ( OsStr :: to_str) {
64+ & mut BufReader :: new ( GzDecoder :: new ( file) )
65+ } else {
66+ & mut BufReader :: new ( file)
67+ }
68+ } ;
69+
70+ let mut deserializer = serde_json:: Deserializer :: from_reader ( reader) ;
71+ // Note: serde_json doesn't support custom recursion limits, only disabling.
72+ // We disable the limit to handle deeply nested AST structures (default 128 is
73+ // insufficient for the clang AST dump, which can be deeply nested).
74+ deserializer. disable_recursion_limit ( ) ;
75+ ClangNode :: deserialize ( & mut deserializer)
6376 } ;
6477 serde. map_err ( anyhow:: Error :: from)
6578 } ) ?;
You can’t perform that action at this time.
0 commit comments