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 | }
|