Overview of Oil Code

category total lines num files
OSH (and common libraries) 39,976 82
YSH (and Tea) 5,694 13
Code Borrowed from Python's stdlib 424 5
Spec Tests 40,494 153
Gold Tests 2,775 27
Python Unit Tests 9,845 61
Other Shell Tests 15,329 61
Test Automation 942 8
mycpp Translator 4,758 11
mycpp Test Data 3,312 41
Zephyr ASDL 3,176 12
pgen2 Parser Generator 1,860 8
Other Code Generators 2,252 9
Hand-written C++ Code 3,046 27
Garbage-Collected Runtime 4,250 18
Unit tests in C++ 6,180 23
Incremental C++ Build 3,017 17
Build Automation 6,666 34
Release Automation 2,348 7
Soil: Multi-cloud CI with containers 3,255 20
Benchmarks 8,141 42
Metrics 1,515 8
Generated Python Code 19,504 20
Tools 1,455 5
Doc Tools 2,396 11
Web 1,058 5

Related Documents

The README for oilshell/oil has another overview of the repository.

OSH (and common libraries)

This is the input to the translators, written in statically-typed Python. Note that bash is at least 140K lines of code, and OSH implements a large part of bash and more.

bin/oils_for_unix.py                            224
core/alloc.py                                   274
core/ansi.py                                     15
core/completion.py                            1,381
core/comp_ui.py                                 584
core/dev.py                                     597
core/error.py                                   250
core/executor.py                                663
core/main_loop.py                               383
core/NINJA_subgraph.py                           48
core/optview.py                                  54
core/process.py                               1,749
core/pyos.py                                    403
core/pyutil.py                                  216
core/runtime.asdl                               227
core/shell.py                                   933
core/state.py                                 2,473
core/ui.py                                      424
core/util.py                                     81
core/vm.py                                      328
data_lang/j8.py                                 292
data_lang/j8_str.py                             100
data_lang/qsn_native.py                          78
data_lang/qsn.py                                634
frontend/args.py                                673
frontend/builtin_def.py                         163
frontend/consts.py                              332
frontend/flag_def.py                            464
frontend/flag_spec.py                           399
frontend/id_kind_def.py                         779
frontend/lexer_def.py                           983
frontend/lexer.py                               405
frontend/location.py                            435
frontend/match.py                               274
frontend/NINJA_subgraph.py                      145
frontend/option_def.py                          395
frontend/parse_lib.py                           512
frontend/py_readline.py                          94
frontend/reader.py                              233
frontend/signal_def.py                           94
frontend/syntax_abbrev.py                       137
frontend/syntax.asdl                            620
frontend/typed_args.py                          100
frontend/types.asdl                              47
mycpp/mylib.pyi                                  89
osh/arith_parse.py                              194
osh/bool_parse.py                               280
osh/bool_stat.py                                135
osh/braces.py                                   526
osh/builtin_assign.py                           558
osh/builtin_bracket.py                          283
osh/builtin_comp.py                             482
osh/builtin_lib.py                              134
osh/builtin_meta.py                             443
osh/builtin_misc.py                             906
osh/builtin_printf.py                           500
osh/builtin_process.py                          343
osh/builtin_pure.py                             954
osh/builtin_trap.py                             274
osh/cmd_eval.py                               2,123
osh/cmd_parse.py                              2,614
osh/glob_.py                                    491
osh/history.py                                  192
osh/NINJA_subgraph.py                            31
osh/prompt.py                                   309
osh/sh_expr_eval.py                           1,070
osh/split.py                                    312
osh/string_ops.py                               461
osh/tdop.py                                     339
osh/word_compile.py                             269
osh/word_eval.py                              2,319
osh/word_parse.py                             1,898
osh/word_.py                                    698
pyext/fanos.c                                   119
pyext/fastlex.c                                 246
pyext/fastlex.pyi                                15
pyext/libc.c                                    414
pyext/libc.pyi                                   13
pyext/line_input.pyi                             32
pyext/posix_.pyi                                211
pyext/yajl.pyi                                    4

39,976 lines in 82 files  

YSH (and Tea)

tea/tea_eval.py                                 137
tea/tea_main.py                                  99
ysh/builtin_json.py                             136
ysh/builtin_oil.py                              233
ysh/cpython.py                                  175
ysh/expr_eval.py                              1,435
ysh/expr_parse.py                               371
ysh/expr_to_ast.py                            1,630
ysh/grammar.pgen2                               639
ysh/NINJA_subgraph.py                            38
ysh/regex_translate.py                          325
ysh/val_ops.py                                  476

5,694 lines in 13 files  

Code Borrowed from Python's stdlib

pylib/cgi.py                                     19
pylib/collections_.py                           209
pylib/os_path.py                                169
pylib/path_stat.py                               27

424 lines in 5 files  

Spec Tests

A comprehensive test suite that compares OSH against other shells. If OSH passes these tests in BOTH Python and C++, it means that the translation works.

spec/alias.test.sh                              552
spec/append.test.sh                             302
spec/arith-context.test.sh                       81
spec/arith.test.sh                              626
spec/array-compat.test.sh                       189
spec/array.test.sh                              627
spec/assign-deferred.test.sh                    105
spec/assign-dialects.test.sh                     59
spec/assign-extended.test.sh                    810
spec/assign.test.sh                             672
spec/assoc.test.sh                              642
spec/assoc-zsh.test.sh                           53
spec/background.test.sh                         182
spec/ble-features.test.sh                       644
spec/ble-idioms.test.sh                         157
spec/blog1.test.sh                               95
spec/blog2.test.sh                               49
spec/blog-other1.test.sh                         57
spec/brace-expansion.test.sh                    441
spec/bugs.test.sh                               342
spec/builtin-bash.test.sh                       346
spec/builtin-bracket.test.sh                    579
spec/builtin-completion.test.sh                 417
spec/builtin-dirs.test.sh                       205
spec/builtin-eval-source.test.sh                249
spec/builtin-getopts.test.sh                    347
spec/builtin-history.test.sh                    181
spec/builtin-io.test.sh                         755
spec/builtin-printf.test.sh                     898
spec/builtins2.test.sh                          211
spec/builtin-special.test.sh                    111
spec/builtins.test.sh                           434
spec/builtin-times.test.sh                       15
spec/builtin-trap-bash.test.sh                  473
spec/builtin-trap.test.sh                       337
spec/builtin-vars.test.sh                       699
spec/case_.test.sh                              178
spec/command-parsing.test.sh                     63
spec/command-sub.test.sh                        285
spec/command_.test.sh                           192
spec/comments.test.sh                            11
spec/dbracket.test.sh                           434
spec/dparen.test.sh                             204
spec/empty-bodies.test.sh                        24
spec/errexit-osh.test.sh                        758
spec/errexit.test.sh                            393
spec/exit-status.test.sh                        238
spec/explore-parsing.test.sh                     42
spec/extglob-files.test.sh                      391
spec/extglob-match.test.sh                      400
spec/fatal-errors.test.sh                       186
spec/for-expr.test.sh                           117
spec/func-parsing.test.sh                       105
spec/glob.test.sh                               397
spec/hay-isolation.test.sh                      169
spec/hay-meta.test.sh                           200
spec/hay.test.sh                                661
spec/here-doc.test.sh                           370
spec/if_.test.sh                                 56
spec/interactive-parse.test.sh                   37
spec/interactive.test.sh                        343
spec/introspect.test.sh                         232
spec/let.test.sh                                 23
spec/loop.test.sh                               473
spec/nameref.test.sh                            638
spec/nix-idioms.test.sh                         150
spec/nocasematch-match.test.sh                   69
spec/nul-bytes.test.sh                          157
spec/osh-only.test.sh                            87
spec/parse-errors.test.sh                       192
spec/pipeline.test.sh                           197
spec/posix.test.sh                              153
spec/process-sub.test.sh                        201
spec/prompt.test.sh                             255
spec/quote.test.sh                              230
spec/redirect.test.sh                           679
spec/regex.test.sh                              356
spec/serialize.test.sh                          229
spec/shell-grammar.test.sh                      206
spec/sh-func.test.sh                            161
spec/sh-options.test.sh                         697
spec/sh-usage.test.sh                            94
spec/smoke.test.sh                              126
spec/strict-options.test.sh                     249
spec/subshell.test.sh                            23
spec/tea-func.test.sh                           288
spec/tilde.test.sh                              172
spec/TODO-deprecate.test.sh                      29
spec/toysh-posix.test.sh                        347
spec/toysh.test.sh                              144
spec/type-compat.test.sh                        104
spec/var-num.test.sh                             43
spec/var-op-bash.test.sh                        307
spec/var-op-len.test.sh                         219
spec/var-op-patsub.test.sh                      399
spec/var-op-slice.test.sh                       315
spec/var-op-strip.test.sh                       357
spec/var-op-test.test.sh                        339
spec/var-ref.test.sh                            508
spec/vars-bash.test.sh                           27
spec/vars-special.test.sh                       597
spec/var-sub-quote.test.sh                      312
spec/var-sub.test.sh                             74
spec/word-eval.test.sh                           62
spec/word-split.test.sh                         421
spec/xtrace.test.sh                             344
spec/ysh-array.test.sh                           52
spec/ysh-assign.test.sh                         481
spec/ysh-bin.test.sh                             19
spec/ysh-blocks.test.sh                         386
spec/ysh-bugs.test.sh                            94
spec/ysh-builtin-argparse.test.sh                63
spec/ysh-builtin-describe.test.sh                38
spec/ysh-builtin-error.test.sh                  436
spec/ysh-builtin-pp.test.sh                      47
spec/ysh-builtin-process.test.sh                 85
spec/ysh-builtin-shopt.test.sh                  179
spec/ysh-builtins.test.sh                       572
spec/ysh-case.test.sh                           231
spec/ysh-command-sub.test.sh                    109
spec/ysh-demo.test.sh                            59
spec/ysh-expr-arith.test.sh                      97
spec/ysh-expr-bool.test.sh                      134
spec/ysh-expr-compare.test.sh                   298
spec/ysh-expr-sub.test.sh                        42
spec/ysh-expr.test.sh                           696
spec/ysh-for.test.sh                            153
spec/ysh-funcs-builtin.test.sh                  191
spec/ysh-funcs-external.test.sh                  87
spec/ysh-funcs.test.sh                          219
spec/ysh-interactive.test.sh                     37
spec/ysh-json.test.sh                           178
spec/ysh-keywords.test.sh                        37
spec/ysh-methods.test.sh                         66
spec/ysh-multiline.test.sh                      179
spec/ysh-options-assign.test.sh                 103
spec/ysh-options.test.sh                        815
spec/ysh-proc.test.sh                           306
spec/ysh-regex.test.sh                          961
spec/ysh-reserved.test.sh                        48
spec/ysh-scope.test.sh                          765
spec/ysh-slice-range.test.sh                    146
spec/ysh-special-vars.test.sh                    50
spec/ysh-string.test.sh                         347
spec/ysh-tuple.test.sh                           28
spec/ysh-unicode.test.sh                         20
spec/ysh-usage.test.sh                           22
spec/ysh-user-feedback.test.sh                  215
spec/ysh-var-sub.test.sh                         45
spec/ysh-with-sh.test.sh                        221
spec/ysh-word-eval.test.sh                      140
spec/ysh-xtrace.test.sh                         516

40,494 lines in 153 files  

Gold Tests

Another suite that tests shells "from the outside". Instead of making explicit assertions, we verify that OSH behaves like bash.

test/gold/abuild.sh                               9
test/gold/and-or.sh                              27
test/gold/autoconf-backtick.sh                   50
test/gold/big-here-doc.sh                     1,531
test/gold/case-in-subshell.sh                    37
test/gold/char-class.sh                          33
test/gold/command-sub-2.sh                       12
test/gold/command-sub.sh                         39
test/gold/comments.sh                            22
test/gold/complex-here-docs.sh                  192
test/gold/configure-bug.sh                       13
test/gold/de1.sh                                 24
test/gold/declare.sh                             28
test/gold/dollar-sq.sh                           42
test/gold/echo-e.sh                              36
test/gold/errexit-confusion.sh                  139
test/gold/errexit.sh                            121
test/gold/export.sh                              65
test/gold/glob.sh                                26
test/gold/lineno.sh                              23
test/gold/nix.sh                                 32
test/gold/readlink.sh                            61
test/gold/readonly.sh                            24
test/gold/scope.sh                              126
test/gold/strip-op-char-class.sh                  6
test/gold/word-eval.sh                           57

2,775 lines in 27 files  

Python Unit Tests

asdl/format_test.py                              45
asdl/front_end_test.py                          179
asdl/gen_python_test.py                         168
asdl/examples/typed_arith_parse_test.py         227
build/dynamic_deps_test.py                       27
build/ninja_lib_test.py                         253
core/alloc_test.py                               52
core/completion_test.py                         803
core/comp_ui_test.py                            174
core/process_test.py                            208
core/pyutil_test.py                              16
core/state_test.py                              341
core/ui_test.py                                  32
core/util_test.py                                23
data_lang/qsn_test.py                           295
doctools/cmark_test.py                          211
doctools/make_help_test.py                       53
doctools/oil_doc_test.py                         70
doctools/spelling_test.py                        50
doctools/split_doc_test.py                      102
frontend/args_test.py                           237
frontend/id_kind_def_test.py                     95
frontend/lexer_def_test.py                      436
frontend/lexer_gen_test.py                       48
frontend/lexer_test.py                          171
frontend/match_test.py                           75
frontend/reader_test.py                          73
lazylex/html_test.py                             90
ysh/builtin_oil_test.py                         153
ysh/expr_parse_test.py                          142
ysh/val_ops_test.py                              45
osh/arith_parse_test.py                         182
osh/bool_parse_test.py                          121
osh/braces_test.py                              185
osh/builtin_bracket_test.py                      28
osh/builtin_comp_test.py                         18
osh/builtin_lib_test.py                          99
osh/builtin_misc_test.py                         49
osh/cmd_eval_test.py                             79
osh/cmd_parse_test.py                         1,371
osh/glob_test.py                                158
osh/history_test.py                             124
osh/prompt_test.py                               59
osh/split_test.py                               163
osh/string_ops_test.py                          129
osh/word_compile_test.py                         16
osh/word_eval_test.py                           133
osh/word_parse_test.py                          615
osh/word_test.py                                122
pyext/fanos_test.py                             274
pyext/fastlex_test.py                            83
pyext/libc_test.py                              332
pyext/line_input_test.py                         27
pyext/posix_test.py                             184
pylib/os_path_test.py                            59
pylib/path_stat_test.py                          24
soil/web_test.py                                 53
test/sh_spec_test.py                            157
test/wild_report_test.py                         29
tools/osh2oil_test.py                            78

9,845 lines in 61 files  

Other Shell Tests

test/all.sh                                      92
test/alpine.sh                                  307
test/arena.sh                                    60
test/asan.sh                                     21
test/baseline.spec-cpp.sh                        60
test/ble.sh                                     118
test/common.sh                                  239
test/common-test.sh                              22
test/coverage.sh                                181
test/cpp-unit.sh                                 46
test/format.sh                                   33
test/gentoo.sh                                   83
test/gold.sh                                    168
test/lint.sh                                    389
test/ltrace.sh                                   50
test/nix.sh                                      24
test/nohup.sh                                    89
test/opyc.sh                                    118
test/oshc-deps.sh                               104
test/osh-usage.sh                               213
test/other.sh                                    34
test/parse-err-compare.sh                       138
test/parse-errors.sh                          1,793
test/process-table-portable.sh                  164
test/process_table.py                           223
test/process-table.sh                           171
test/py2_lint.py                                102
test/py3_lint.py                                 19
test/py_stdlib.sh                                32
test/report.R                                    54
test/runtime-errors.sh                        1,130
test/shebang.sh                                  26
test/shell-vs-shell.sh                          314
test/sh_spec.py                               1,424
test/signal-state.sh                             96
test/smoosh_import.py                            31
test/smoosh.sh                                  220
test/spec-alpine.sh                             154
test/spec-bin.sh                                270
test/spec-common.sh                              83
test/spec-cpp.sh                                361
test/spec_lib.py                                226
test/spec-py.sh                                 148
test/spec-runner.sh                             432
test/spec.sh                                    941
test/spec-util.sh                                41
test/spec-version.sh                            128
test/stateful.sh                                232
test/syscall.py                                 219
test/syscall.sh                                 411
test/tsv-lib.sh                                  78
test/tsv-lib-test.sh                             59
test/unit.sh                                    289
test/vagrant.sh                                  54
test/wild_report.py                             802
test/wild-runner.sh                             200
test/wild.sh                                    724
test/ysh-parse-errors.sh                         98
test/ysh-prettify.sh                            634
test/ysh-runtime-errors.sh                      357

15,329 lines in 61 files  

Test Automation

asdl/TEST.sh                                     90
core/TEST.sh                                     22
cpp/TEST.sh                                     118
frontend/TEST.sh                                 21
mycpp/TEST.sh                                   338
opy/TEST.sh                                     270
pea/TEST.sh                                      83

942 lines in 8 files  

mycpp Translator

This prototype uses the MyPy frontend to translate statically-typed Python to C++. The generated code calls a small runtime which implements things like List[T], Dict[K, V], and Python's len().

mycpp/compare_pairs.py                           60
mycpp/const_pass.py                             528
mycpp/cppgen_pass.py                          2,789
mycpp/crash.py                                   38
mycpp/debug_pass.py                             465
mycpp/format_strings.py                         114
mycpp/mycpp_main.py                             361
mycpp/mylib.py                                  296
mycpp/pass_state.py                              93
mycpp/util.py                                    14

4,758 lines in 11 files  

mycpp Test Data

Small Python examples that translate to C++, compile, and run.

mycpp/examples/arith_ops.py                      45
mycpp/examples/asdl_generated.py                 64
mycpp/examples/cartesian.py                      78
mycpp/examples/cgi.py                            62
mycpp/examples/classes_gc.py                    209
mycpp/examples/classes.py                       283
mycpp/examples/containers.py                    173
mycpp/examples/control_flow.py                  113
mycpp/examples/escape.py                         70
mycpp/examples/fib_iter.py                       54
mycpp/examples/fib_recursive.py                  49
mycpp/examples/files.py                          64
mycpp/examples/__init__.py                        0
mycpp/examples/invalid_condition.py              34
mycpp/examples/invalid_default_args.py           44
mycpp/examples/invalid_except.py                 32
mycpp/examples/invalid_format_args.py            15
mycpp/examples/invalid_format_strings.py         20
mycpp/examples/invalid_print.py                  13
mycpp/examples/invalid_try_else.py               37
mycpp/examples/invalid_types_2.py                32
mycpp/examples/invalid_types.py                  32
mycpp/examples/iterators.py                     101
mycpp/examples/length.py                        110
mycpp/examples/lexer_main.py                     47
mycpp/examples/loops.py                         177
mycpp/examples/modules.py                        80
mycpp/examples/parse.py                         264
mycpp/examples/pgen2_demo.py                    106
mycpp/examples/scoped_resource.py               196
mycpp/examples/strings.py                        93
mycpp/examples/test_cast.py                      59
mycpp/examples/test_conditional.py               67
mycpp/examples/test_default_args.py              75
mycpp/examples/test_globals.py                   77
mycpp/examples/test_hoist.py                     61
mycpp/examples/test_io_os_error.py              131
mycpp/examples/test_switch.py                    42
mycpp/examples/tuple_return_value.py             55
mycpp/examples/varargs.py                        48

3,312 lines in 41 files  

Zephyr ASDL

A DSL for algebraic data types, borrowed from Python. Oil is the most strongly typed Bourne shell implementation!

asdl/asdl_main.py                               299
asdl/ast.py                                     231
asdl/format.py                                  497
asdl/front_end.py                               510
asdl/gen_cpp.py                                 764
asdl/gen_python.py                              570
asdl/NINJA_subgraph.py                           58
asdl/pybase.py                                   60
asdl/runtime.py                                  40
asdl/util.py                                     11
asdl/visitor.py                                 136

3,176 lines in 12 files  

pgen2 Parser Generator

An LL(1) parser generator used to parse Oil expressions. Also borrowed from CPython.

pgen2/driver.py                                 101
pgen2/grammar.py                                303
pgen2/parse.py                                  220
pgen2/pgen.py                                   428
pgen2/pnode.py                                   80
pgen2/tokenize.py                               579
pgen2/token.py                                  149

1,860 lines in 8 files  

Other Code Generators

In order to make Oil statically typed, we had to abandon Python reflection and use C++ source code generation instead. The lexer, flag definitions, and constants can be easily compiled to C++.

core/optview_gen.py                              94
frontend/consts_gen.py                          608
frontend/flag_gen.py                            525
frontend/lexer_gen.py                           487
frontend/option_gen.py                           94
frontend/signal_gen.py                          105
osh/arith_parse_gen.py                          100
ysh/grammar_gen.py                              239

2,252 lines in 9 files  

Hand-written C++ Code

Includes OS bindings. Small C++ files like cpp/osh_arith_parse.{cc,h} correspond to larger Python files like osh/arith_parse.py.

cpp/core.cc                                     383
cpp/core.h                                      273
cpp/fanos.cc                                     57
cpp/fanos.h                                      18
cpp/fanos_shared.h                               49
cpp/frontend_flag_spec.cc                       267
cpp/frontend_flag_spec.h                        161
cpp/frontend_match.cc                           110
cpp/frontend_match.h                             77
cpp/frontend_pyreadline.cc                      304
cpp/frontend_pyreadline.h                        74
cpp/libc.cc                                     219
cpp/libc.h                                       36
cpp/osh.cc                                      161
cpp/osh.h                                        50
cpp/osh_tdop.cc                                  16
cpp/osh_tdop.h                                   52
cpp/pgen2.cc                                     48
cpp/pgen2.h                                      87
cpp/preamble.h                                   37
cpp/pylib.cc                                     58
cpp/pylib.h                                      22
cpp/qsn.h                                        56
cpp/stdlib.cc                                   228
cpp/stdlib.h                                    165
cpp/translation_stubs.h                          38

3,046 lines in 27 files  

Garbage-Collected Runtime

Uses a simple Cheney / semi-space collector.

mycpp/common.h                                   66
mycpp/comparators.h                              65
mycpp/gc_alloc.h                                234
mycpp/gc_builtins.cc                            406
mycpp/gc_builtins.h                             166
mycpp/gc_dict.h                                 378
mycpp/gc_list.h                                 505
mycpp/gc_mylib.cc                               249
mycpp/gc_mylib.h                                281
mycpp/gc_obj.h                                  185
mycpp/gc_slab.h                                  58
mycpp/gc_str.cc                                 651
mycpp/gc_str.h                                  169
mycpp/gc_tuple.h                                104
mycpp/mark_sweep_heap.cc                        423
mycpp/mark_sweep_heap.h                         290
mycpp/runtime.h                                  20

4,250 lines in 18 files  

Unit tests in C++

The goal is to make the spec tests pass, but unit tests are helpful too.

cpp/core_test.cc                                382
cpp/data_race_test.cc                           206
cpp/frontend_flag_spec_test.cc                  154
cpp/frontend_match_test.cc                       87
cpp/libc_test.cc                                135
cpp/obj_layout_test.cc                          178
cpp/osh_test.cc                                  50
cpp/pylib_test.cc                                52
cpp/qsn_test.cc                                  44
cpp/stdlib_test.cc                              152
mycpp/bump_leak_heap_test.cc                     62
mycpp/cheney_heap_test.cc                        30
mycpp/gc_builtins_test.cc                       342
mycpp/gc_dict_test.cc                           490
mycpp/gc_heap_test.cc                           396
mycpp/gc_list_test.cc                           493
mycpp/gc_mylib_test.cc                          301
mycpp/gc_stress_test.cc                         222
mycpp/gc_str_test.cc                          1,475
mycpp/gc_tuple_test.cc                          138
mycpp/mark_sweep_heap_test.cc                   289
mycpp/small_str_test.cc                         502

6,180 lines in 23 files  

Incremental C++ Build

asdl/NINJA_subgraph.py                           58
bin/NINJA_subgraph.py                            76
build/ninja_lib.py                              480
build/ninja_lib_test.py                         253
build/ninja_main.py                             407
build/ninja-rules-cpp.sh                        359
build/ninja-rules-py.sh                         336
core/NINJA_subgraph.py                           48
cpp/NINJA_subgraph.py                           199
frontend/NINJA_subgraph.py                      145
mycpp/NINJA_subgraph.py                         417
NINJA-config.sh                                 105
osh/NINJA_subgraph.py                            31
pea/NINJA_subgraph.py                            20
prebuilt/NINJA_subgraph.py                       45
ysh/NINJA_subgraph.py                            38

3,017 lines in 17 files  

Build Automation

build/clean.sh                                   65
build/c_module_srcs.py                           94
build/c_module_toc.py                            51
build/common.sh                                  75
build/cpp.sh                                     40
build/cpython_defs.py                           515
build/cpython-defs.sh                           354
build/deps.sh                                   407
build/detect-cc.c                                 4
build/detect-readline.c                          19
build/dev.sh                                      5
build/dev-shell.sh                              103
build/dev-shell-test.sh                          95
build/doc.sh                                    599
build/dynamic_deps.py                           155
build/dynamic-deps.sh                           229
build/hello.mk                                   51
build/make_zip.py                                53
build/native.sh                                 105
build/ninja_lib.py                              480
build/ninja_main.py                             407
build/ninja-rules-cpp.sh                        359
build/ninja-rules-py.sh                         336
build/oil.mk                                     60
build/old-ovm-test.sh                            42
build/ovm-actions.sh                            191
build/ovm-compile.sh                            434
build/portable-rules.mk                          96
build/py2.sh                                     14
build/py.sh                                     482
configure                                       438
install                                         113
Makefile                                        195

6,666 lines in 34 files  

Release Automation

devtools/release-history.sh                     207
devtools/release-native.sh                       86
devtools/release-note.sh                        243
devtools/release-patch.sh                        26
devtools/release.sh                             797
devtools/release-version.sh                     989

2,348 lines in 7 files  

Soil: Multi-cloud CI with containers

soil/collect_json.py                             35
soil/common.sh                                   72
soil/diagnose.sh                                125
soil/github-actions.sh                          119
soil/github-tool.sh                              43
soil/host-shim.sh                               381
soil/__init__.py                                  0
soil/maybe-merge.sh                             151
soil/sourcehut.sh                                81
soil/tests.sh                                    20
soil/timeout-test.sh                             50
soil/travis.sh                                  125
soil/web-init.sh                                165
soil/web.py                                     794
soil/web-remote-test.sh                          43
soil/web.sh                                     178
soil/web_test.py                                 53
soil/web-worker.sh                              293
soil/worker.sh                                  527

3,255 lines in 20 files  

Benchmarks

benchmarks/auto.sh                              109
benchmarks/awk-python.sh                         97
benchmarks/builtin-io.sh                         60
benchmarks/cachegrind.sh                         30
benchmarks/cachegrind_to_tsv.py                  54
benchmarks/callgrind.sh                          25
benchmarks/common.R                              98
benchmarks/common.sh                             98
benchmarks/compute.sh                           592
benchmarks/fake_libc.py                          13
benchmarks/gc-cachegrind.sh                      89
benchmarks/gc.sh                                715
benchmarks/gc_stats_to_tsv.py                    51
benchmarks/gperftools.sh                         60
benchmarks/id.sh                                442
benchmarks/id-test.sh                            41
benchmarks/__init__.py                            0
benchmarks/micro.sh                              45
benchmarks/mimalloc.sh                          107
benchmarks/mycpp.sh                             125
benchmarks/osh-parser.sh                        518
benchmarks/osh-runtime.sh                       419
benchmarks/ovm-build.sh                         479
benchmarks/parse-help.sh                         65
benchmarks/perf.sh                              429
benchmarks/pypy.sh                               42
benchmarks/pytrace.py                            92
benchmarks/pytrace.sh                           184
benchmarks/report.R                           1,309
benchmarks/report.sh                            112
benchmarks/report_test.R                         32
benchmarks/startup.sh                           165
benchmarks/systemtap.sh                          75
benchmarks/time_.py                             207
benchmarks/time-test.sh                         295
benchmarks/uftrace_allocs.py                    179
benchmarks/uftrace_allocs_test.py                20
benchmarks/uftrace_plugin.py                     97
benchmarks/uftrace.sh                           345
benchmarks/virtual_memory.py                     50
benchmarks/vm-baseline.sh                       176

8,141 lines in 42 files  

Metrics

metrics/bytecode.R                              388
metrics/bytecode.sh                             143
metrics/cpython-defs.R                           72
metrics/native-code.R                            88
metrics/native-code.sh                          199
metrics/source-code.sh                          493
metrics/tarball.sh                              132

1,515 lines in 8 files  

Generated Python Code

For the Python App Bundle.

_devbuild/gen/arg_types.py                      326
_devbuild/gen/arith_nt.py                         4
_devbuild/gen/demo_lib_asdl.py                  222
_devbuild/gen/expr_asdl.py                      184
_devbuild/gen/find_asdl.py                    1,001
_devbuild/gen/find_nt.py                         10
_devbuild/gen/grammar_nt.py                      96
_devbuild/gen/help_.py                          226
_devbuild/gen/hnode_asdl.py                     117
_devbuild/gen/id_kind_asdl.py                   866
_devbuild/gen/id_kind.py                        493
_devbuild/gen/__init__.py                         0
_devbuild/gen/option_asdl.py                    374
_devbuild/gen/runtime_asdl.py                 2,744
_devbuild/gen/shared_variant_asdl.py            517
_devbuild/gen/syntax_asdl.py                 10,501
_devbuild/gen/typed_arith_asdl.py               556
_devbuild/gen/typed_demo_asdl.py              1,130
_devbuild/gen/types_asdl.py                     137

19,504 lines in 20 files  

Tools

tools/deps.py                                   151
tools/osh2oil.py                              1,106
tools/readlink.py                                31
tools/tools_main.py                             167

1,455 lines in 5 files  

Doc Tools

doctools/cmark.py                               388
doctools/doc_html.py                            107
doctools/html_head.py                            85
doctools/html_lib.py                             20
doctools/make_help.py                           460
doctools/oil_doc.py                             618
doctools/spelling.py                            138
doctools/split_doc.py                           151
doctools/util.py                                 13
lazylex/html.py                                 416

2,396 lines in 11 files  

Web

web/ajax.js                                     149
web/osh-to-oil.js                                79
web/table/csv2html.py                           397
web/table/table-sort.js                         433

1,058 lines in 5 files