(*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *)

module P = Printf

let rec visit_named_decls f decl =
  let () =
    match Clang_ast_proj.get_named_decl_tuple decl with Some (x, y) -> f x y | None -> ()
  in
  match Clang_ast_proj.get_decl_context_tuple decl with
  | Some (l, _) ->
      List.iter (visit_named_decls f) l
  | None ->
      ()


let print_named_decl_from_file fname =
  let ast = Atdgen_runtime.Util.Json.from_file Clang_ast_j.read_decl fname in
  let getname name_info = name_info.Clang_ast_t.ni_name in
  visit_named_decls
    (fun _ info ->
      print_string (getname info) ;
      print_newline () )
    ast


let main =
  try Array.iteri (fun i arg -> if i <> 0 then print_named_decl_from_file arg) Sys.argv
  with Yojson.Json_error s | Atdgen_runtime.Oj_run.Error s ->
    prerr_string s ;
    prerr_newline () ;
    exit 1