OILS / devtools / clang-ast.sh View on Github | oilshell.org

96 lines, 36 significant
1#!/usr/bin/env bash
2#
3# Abandoned experiment. Might be useful later.
4#
5# Usage:
6# devtools/clang-ast.sh <function name>
7
8set -o nounset
9set -o pipefail
10set -o errexit
11
12REPO_ROOT=$(cd "$(dirname $0)/.."; pwd)
13source build/common.sh
14
15clang-action() {
16 local action=$1
17 shift
18
19 log "*** $action"
20
21 # Weird that -ast-list is an argument to -Xclang
22 $CLANG_DIR/bin/clang++ -Xclang $action -fsyntax-only "$@"
23}
24
25demo() {
26 # What's the difference with clang-query and clang-check?
27 # CXX=$CLANG_DIR/bin/clang-query
28
29 # These seem useful, but aren't really?
30 # -dump-tokens
31 # -dump-raw-tokens
32
33 # -fno-color-diagnostics
34
35 # Crashes?
36 #CXX="$CLANG_DIR/bin/clang-check -syntax-tree-dump"
37
38 local -a cxx_flags=(
39 -std=c++11 -Wall -Wno-invalid-offsetof -D MARK_SWEEP
40 -I $PWD # /home/andy/git/oilshell/oil
41 )
42
43 local out_dir=_tmp/clang-ast
44 mkdir -p $out_dir
45
46 local src=cpp/leaky_core.cc
47 local out_prefix=$out_dir/$(basename $src)
48
49
50 # List of function names
51 time clang-action -ast-list ${cxx_flags[@]} -c $src > $out_prefix.txt
52
53 # AST text
54 time clang-action -ast-dump ${cxx_flags[@]} -c $src > $out_prefix.ast
55
56 # AST json
57 time clang-action -ast-dump=json ${cxx_flags[@]} -c $src > $out_prefix.json
58
59 if false; then
60 # Tokens go to stderr for some reason
61 time clang-action -dump-tokens ${cxx_flags[@]} -c $src 2> $out_prefix.tokens.txt
62
63 time clang-action -dump-raw-tokens ${cxx_flags[@]} -c $src 2> $out_prefix.raw-tokens.txt
64 fi
65
66 # Other flags:
67 # -ast-dump-filter
68
69 # - 600 KB for list of names
70 # - 29M for AST text format
71 # - 200M for AST JSON format
72
73 ls -l --si $out_dir
74
75 # 4.3M lines
76 wc -l $out_prefix.json
77}
78
79filter() {
80 # 200 MB of JSON takes 7 seconds
81 #time jq '.' < _tmp/foo.json | wc -l
82
83 # hm doesn't show anything, but takes 3 seconds
84 time jq 'select(.kind == "FunctionDecl")' < _tmp/foo.json
85}
86
87help() {
88 #$CLANG_DIR/bin/clang-query --help
89 #$CLANG_DIR/bin/clang++ --help
90
91 $CLANG_DIR/bin/clang++ -cc1 --help
92
93 #$CLANG_DIR/bin/clang-check --help
94}
95
96"$@"