| 1 | # Types that don't depend on Id. (To break dependency)
|
| 2 |
|
| 3 | module types {
|
| 4 | bool_arg_type = Undefined | Path | Int | Str | Other
|
| 5 | redir_arg_type = Path | Desc | Here
|
| 6 |
|
| 7 | opt_group = StrictAll | YshUpgrade | YshAll
|
| 8 | generate [integers]
|
| 9 |
|
| 10 | # Fifteen lexer modes for OSH
|
| 11 |
|
| 12 | lex_mode =
|
| 13 | Undefined
|
| 14 | | Comment
|
| 15 |
|
| 16 | # ShCommandFakeBrack (no regex list) is for lazy arg list []
|
| 17 | | ShCommand | ShCommandFakeBrack
|
| 18 |
|
| 19 | | Backtick # preprocessing before Outer
|
| 20 | | DBracket
|
| 21 |
|
| 22 | | SQ_Raw | DQ | SQ_C | J8_Str
|
| 23 |
|
| 24 | | Arith
|
| 25 | | ExtGlob
|
| 26 | | VSub_1 | VSub_2 | VSub_ArgUnquoted | VSub_ArgDQ | VSub_Zsh
|
| 27 |
|
| 28 | # BashRegexFakeInner (no regex list) is for parens in patterns
|
| 29 | # [[ s =~ (< >) ]]
|
| 30 | # the WordParser does a translation from BashRegex
|
| 31 | | BashRegex | BashRegexFakeInner
|
| 32 |
|
| 33 | | FuncParens # for Id.LookAhead_FuncParens
|
| 34 |
|
| 35 | # Two for printf builtin
|
| 36 | | PrintfOuter | PrintfPercent
|
| 37 |
|
| 38 | # YSH/eggex both use Expr
|
| 39 | | Expr # var x = 1 + 2 * 3; echo $f(a, b + 1)
|
| 40 |
|
| 41 | # Unused. TODO: consider this representation
|
| 42 | word_mode =
|
| 43 | ShCommand # These three correspond to lex_mode
|
| 44 | | ShCommandBrack # for lazy arg list assert [42 === x]
|
| 45 |
|
| 46 | | DBracket
|
| 47 | | BashRegex
|
| 48 |
|
| 49 |
|
| 50 | # More possibilities
|
| 51 | # - printf formatting ${x %05d}. I think that is mostly in expression mode
|
| 52 | # like ${x|html} or ${x|title}
|
| 53 |
|
| 54 | # CommandParser context
|
| 55 | # Note: cmd_mode_e.Hay is better done with CommandParser.hay_attrs_stack,
|
| 56 | # which is nested
|
| 57 | cmd_mode =
|
| 58 | Shell # Top level, and inside shell-style functions
|
| 59 | | Func # Inside a func, return (x) is required
|
| 60 | | Proc # Inside proc { } -- shell assignments are disallowed
|
| 61 | }
|