summaryrefslogtreecommitdiff
path: root/pkgtools
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2018-11-07 21:04:53 +0000
committerrillig <rillig@pkgsrc.org>2018-11-07 21:04:53 +0000
commit513f71ab15a7c12d2fe904ca604d53807936021f (patch)
tree8ca5fcf966a24aed9bfbefe8e13cb816ab38a920 /pkgtools
parente64012e5a66b591ff9e40b958990d9e842e9fd75 (diff)
downloadpkgsrc-513f71ab15a7c12d2fe904ca604d53807936021f.tar.gz
pkgtools/pkglint: remove unnecessary files
Diffstat (limited to 'pkgtools')
-rwxr-xr-xpkgtools/pkglint/files/codewalk.md287
-rw-r--r--pkgtools/pkglint/files/licenses/licensesyacc.go471
-rw-r--r--pkgtools/pkglint/files/plist-clash/main.go50
-rw-r--r--pkgtools/pkglint/files/shellyacc.go1250
4 files changed, 0 insertions, 2058 deletions
diff --git a/pkgtools/pkglint/files/codewalk.md b/pkgtools/pkglint/files/codewalk.md
deleted file mode 100755
index baf446309a0..00000000000
--- a/pkgtools/pkglint/files/codewalk.md
+++ /dev/null
@@ -1,287 +0,0 @@
-# The pkglint tour
-
-> Note: I wish there were a tool for nicely rendering the below codewalk blocks.
-> If you know of such a tool, please tell me.
-> `godoc` codewalks don't count since [they are only supported for the Go distribution
-> itself](https://github.com/golang/go/issues/14369).
->
-> See also:
->
-> * [github/markup/#172](https://github.com/github/markup/issues/172#issuecomment-33241601) (closed)
-> * [MarkdownHelper](https://github.com/BurdetteLamar/MarkdownHelper)
-
-## The entry points
-
-### Running pkglint
-
-```codewalk
-file pkglint.go
-start ^func main
-end ^\}
-```
-
-When running pkglint, the `G` variable is set up first.
-It contains the whole global state of pkglint.
-(Except for some of the subpackages, which have to be initialized separately.)
-All the interesting code is in the `Pkglint` type.
-Having only a single global variable makes it easy to reset the global state during testing.
-
-### Testing pkglint
-
-Very similar code is used to set up the test and tear it down again:
-
-```codewalk
-file check_test.go
-start ^func .* SetUpTest
-end ^\}
-```
-
-```codewalk
-file check_test.go
-start ^func .* TearDownTest
-end ^\}
-```
-
-## First contact: checking a single DESCR file
-
-To learn how pkglint works internally, it is a good idea to start with
-a very simple example.
-Since the `DESCR` files have a very simple structure (they only contain
-text for human consumption), they are the ideal target.
-Let's trace an invocation of the command `pkglint DESCR` down to where
-the actual checks happen.
-
-```codewalk
-file pkglint.go
-start func main
-```
-
-```codewalk
-file pkglint.go
-start ^[\t]if exitcode
-end ^\t\}$
-```
-
-Since there are no command line options starting with a hyphen, we can
-skip the command line parsing for this example.
-
-```codewalk
-file pkglint.go
-start ^[\t]for _, arg
-end ^\}
-```
-
-The argument `DESCR` is saved in the `TODO` list, and then the pkgsrc
-infrastructure data is loaded by `Initialize`.
-This must happen in this order because pkglint needs to determine the
-pkgsrc root directory, just in case there are two or more pkgsrc trees
-in the local system.
-The path of the pkgsrc directory is determined from the first command
-line argument, which in this file is `DESCR`. From there, the pkgsrc
-root is usually reachable via `../../`, and this is what pkglint tries.
-
-After initializing the pkgsrc metadata,
-all items from the TODO list are worked off and handed over to `CheckDirent`,
-one after another.
-
-```codewalk
-file pkglint.go
-start func CheckDirent
-```
-
-Since `DESCR` is a regular file, the next method to call is `Checkfile`.
-
-```codewalk
-file pkglint.go
-start func Checkfile
-```
-
-```codewalk
-file pkglint.go
-start /basename, "DESCR"/
-end ^$
-```
-
-When compared to the code blocks around this one, it looks strange that
-this one uses `hasPrefix` and the others use a direct string comparison.
-But indeed, there are a few packages that actually have `DESCR.common`
-files. So everything's fine here.
-
-At this point, the file is loaded and converted to lines.
-For DESCR files, this is very simple, so there's no need to dive into that.
-The actual checks usually work on `Line` objects instead of files
-because the lines offer nice methods for logging the diagnostics
-and for automatically fixing the text (in pkglint's `--autofix` mode).
-
-```codewalk
-file pkglint.go
-start func ChecklinesDescr
-end ^\}
-```
-
-Now we are where the actual action takes place.
-The code looks straight-forward here.
-First, each line is checked on its own,
-and the final check is for too long files.
-Pkglint takes great care to output all diagnostics in a logical order,
-that is file by file, and top to bottom within each file.
-Therefore the checks for individual lines happen before the other check.
-
-The call to `SaveAutofixChanges` at the end looks a bit strange
-since none of the visible checks fixes anything.
-The autofix feature must be hidden in one of the line checks,
-and indeed, the code for `CheckLineTrailingWhitespace` says:
-
-```codewalk
-file linechecker.go
-start ^func CheckLineTrailingWhitespace
-end ^\}
-```
-
-This code is a typical example for using the autofix feature.
-Some more details are described at the `Autofix` type itself
-and at its typical call site `Line.Autofix()`:
-
-```codewalk
-file linechecker.go
-start /^type Autofix/ upwhile /^\/\//
-end /^type Autofix/
-```
-
-```codewalk
-file line.go
-start /^func .* Autofix/ upwhile /^\/\//
-end /^func .* Autofix/
-```
-
-The journey ends here, and it hasn't been that difficult.
-If that was too easy, have a look at the complex cases here:
-
-```codewalk
-file mkline.go
-start /^func .* VariableNeedsQuoting
-```
-
-## Basic ingredients
-
-Pkglint checks packages, and a package consists of several different files.
-All pkgsrc files are text files, which are organized in lines.
-Most pkglint diagnostics refer to a specific line,
-therefore the `Line` type is responsible for producing the diagnostics.
-
-### Line
-
-Most checks in pkgsrc only need to look at a single line.
-Lines that are independent of the file type are implemented in the `Line` type.
-This type contains the methods `Errorf`, `Warnf` and `Notef` to produce diagnostics
-of the following form:
-
-```text
-WARN: Makefile:3: COMMENT should not start with "A" or "An".
-```
-
-The definition for the `Line` type is:
-
-```codewalk
-file line.go
-start ^type Line =
-```
-
-```codewalk
-file line.go
-start ^type LineImpl struct
-end ^\}
-```
-
-### MkLine
-
-Most of the pkgsrc infrastructure is written in Makefiles.
-In these, there may be line continuations (the ones ending in backslash).
-Plus, they may contain Make variables of the form `${VARNAME}` or `${VARNAME:Modifiers}`,
-and these are handled specially.
-
-```codewalk
-file mkline.go
-start ^type MkLine =
-```
-
-```codewalk
-file mkline.go
-start ^type MkLineImpl struct
-end ^\}
-```
-
-### ShellLine
-
-The instructions for building and installing packages are written in shell commands,
-which are embedded in Makefile fragments.
-The `ShellLine` type provides methods for checking shell commands and their individual parts.
-
-```codewalk
-file shell.go
-start ^type ShellLine struct
-end ^\}
-```
-
-## Testing pkglint
-
-### Standard shape of a test
-
-```go
-func (s *Suite) Test_Type_Method__description(c *check.C) {
- t := s.Init(c) // Every test needs this.
-
- t.Setup…(…) // Set up the testing environment.
-
- lines := t.New…(…) // Set up the test data.
-
- CodeToBeTested() // The code to be tested.
-
- t.Check…(…) // Check the result (typically diagnostics).
-}
-```
-
-The `t` variable is the center of most tests.
-It is of type `Tester` and provides a high-level interface
-for setting up tests and checking the results.
-
-```codewalk
-file check_test.go
-start /^type Tester/ upwhile /^\/\//
-end ^\}
-```
-
-The `s` variable is not used in tests.
-The only purpose of its type `Suite` is to group the tests so they are all run together.
-
-The `c` variable comes from [gocheck](https://godoc.org/gopkg.in/check.v1),
-which is the underlying testing framework.
-Most pkglint tests don't need this variable.
-Low-level tests call `c.Check` to compare their results to the expected values.
-
-```codewalk
-file util_test.go
-start ^func .* Test_tabLength
-end ^\}
-```
-
-### Logging detailed information during tests
-
-When testing complicated code, it sometimes helps to have a detailed trace
-of the code that is run. This is done via these two methods:
-
-```go
-t.EnableTracing()
-t.DisableTracing()
-```
-
-### Setting up a realistic pkgsrc environment
-
-To see how to setup complicated tests, have a look at the following test,
-which sets up a realistic environment to run the tests in.
-
-```codewalk
-file pkglint_test.go
-start ^func .* Test_Pkglint_Main__complete_package
-end ^\}
-```
diff --git a/pkgtools/pkglint/files/licenses/licensesyacc.go b/pkgtools/pkglint/files/licenses/licensesyacc.go
deleted file mode 100644
index e3cf30e8aee..00000000000
--- a/pkgtools/pkglint/files/licenses/licensesyacc.go
+++ /dev/null
@@ -1,471 +0,0 @@
-//line licenses.y:2
-package licenses
-
-import __yyfmt__ "fmt"
-
-//line licenses.y:2
-//line licenses.y:8
-type liyySymType struct {
- yys int
- Node *Condition
-}
-
-const ltNAME = 57346
-const ltAND = 57347
-const ltOR = 57348
-const ltOPEN = 57349
-const ltCLOSE = 57350
-
-var liyyToknames = [...]string{
- "$end",
- "error",
- "$unk",
- "ltNAME",
- "ltAND",
- "ltOR",
- "ltOPEN",
- "ltCLOSE",
-}
-var liyyStatenames = [...]string{}
-
-const liyyEofCode = 1
-const liyyErrCode = 2
-const liyyInitialStackSize = 16
-
-//line yacctab:1
-var liyyExca = [...]int{
- -1, 1,
- 1, -1,
- -2, 0,
-}
-
-const liyyNprod = 7
-const liyyPrivate = 57344
-
-var liyyTokenNames []string
-var liyyStates []string
-
-const liyyLast = 15
-
-var liyyAct = [...]int{
-
- 6, 7, 3, 11, 4, 1, 0, 5, 2, 9,
- 10, 6, 7, 0, 8,
-}
-var liyyPact = [...]int{
-
- 0, -1000, 6, -1000, -1000, 0, 0, 0, -5, -1000,
- -1000, -1000,
-}
-var liyyPgo = [...]int{
-
- 0, 5, 8, 2,
-}
-var liyyR1 = [...]int{
-
- 0, 1, 2, 2, 2, 3, 3,
-}
-var liyyR2 = [...]int{
-
- 0, 1, 1, 3, 3, 1, 3,
-}
-var liyyChk = [...]int{
-
- -1000, -1, -2, -3, 4, 7, 5, 6, -2, -3,
- -3, 8,
-}
-var liyyDef = [...]int{
-
- 0, -2, 1, 2, 5, 0, 0, 0, 0, 3,
- 4, 6,
-}
-var liyyTok1 = [...]int{
-
- 1,
-}
-var liyyTok2 = [...]int{
-
- 2, 3, 4, 5, 6, 7, 8,
-}
-var liyyTok3 = [...]int{
- 0,
-}
-
-var liyyErrorMessages = [...]struct {
- state int
- token int
- msg string
-}{}
-
-//line yaccpar:1
-
-/* parser for yacc output */
-
-var (
- liyyDebug = 0
- liyyErrorVerbose = false
-)
-
-type liyyLexer interface {
- Lex(lval *liyySymType) int
- Error(s string)
-}
-
-type liyyParser interface {
- Parse(liyyLexer) int
- Lookahead() int
-}
-
-type liyyParserImpl struct {
- lval liyySymType
- stack [liyyInitialStackSize]liyySymType
- char int
-}
-
-func (p *liyyParserImpl) Lookahead() int {
- return p.char
-}
-
-func liyyNewParser() liyyParser {
- return &liyyParserImpl{}
-}
-
-const liyyFlag = -1000
-
-func liyyTokname(c int) string {
- if c >= 1 && c-1 < len(liyyToknames) {
- if liyyToknames[c-1] != "" {
- return liyyToknames[c-1]
- }
- }
- return __yyfmt__.Sprintf("tok-%v", c)
-}
-
-func liyyStatname(s int) string {
- if s >= 0 && s < len(liyyStatenames) {
- if liyyStatenames[s] != "" {
- return liyyStatenames[s]
- }
- }
- return __yyfmt__.Sprintf("state-%v", s)
-}
-
-func liyyErrorMessage(state, lookAhead int) string {
- const TOKSTART = 4
-
- if !liyyErrorVerbose {
- return "syntax error"
- }
-
- for _, e := range liyyErrorMessages {
- if e.state == state && e.token == lookAhead {
- return "syntax error: " + e.msg
- }
- }
-
- res := "syntax error: unexpected " + liyyTokname(lookAhead)
-
- // To match Bison, suggest at most four expected tokens.
- expected := make([]int, 0, 4)
-
- // Look for shiftable tokens.
- base := liyyPact[state]
- for tok := TOKSTART; tok-1 < len(liyyToknames); tok++ {
- if n := base + tok; n >= 0 && n < liyyLast && liyyChk[liyyAct[n]] == tok {
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
- }
-
- if liyyDef[state] == -2 {
- i := 0
- for liyyExca[i] != -1 || liyyExca[i+1] != state {
- i += 2
- }
-
- // Look for tokens that we accept or reduce.
- for i += 2; liyyExca[i] >= 0; i += 2 {
- tok := liyyExca[i]
- if tok < TOKSTART || liyyExca[i+1] == 0 {
- continue
- }
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
-
- // If the default action is to accept or reduce, give up.
- if liyyExca[i+1] != 0 {
- return res
- }
- }
-
- for i, tok := range expected {
- if i == 0 {
- res += ", expecting "
- } else {
- res += " or "
- }
- res += liyyTokname(tok)
- }
- return res
-}
-
-func liyylex1(lex liyyLexer, lval *liyySymType) (char, token int) {
- token = 0
- char = lex.Lex(lval)
- if char <= 0 {
- token = liyyTok1[0]
- goto out
- }
- if char < len(liyyTok1) {
- token = liyyTok1[char]
- goto out
- }
- if char >= liyyPrivate {
- if char < liyyPrivate+len(liyyTok2) {
- token = liyyTok2[char-liyyPrivate]
- goto out
- }
- }
- for i := 0; i < len(liyyTok3); i += 2 {
- token = liyyTok3[i+0]
- if token == char {
- token = liyyTok3[i+1]
- goto out
- }
- }
-
-out:
- if token == 0 {
- token = liyyTok2[1] /* unknown char */
- }
- if liyyDebug >= 3 {
- __yyfmt__.Printf("lex %s(%d)\n", liyyTokname(token), uint(char))
- }
- return char, token
-}
-
-func liyyParse(liyylex liyyLexer) int {
- return liyyNewParser().Parse(liyylex)
-}
-
-func (liyyrcvr *liyyParserImpl) Parse(liyylex liyyLexer) int {
- var liyyn int
- var liyyVAL liyySymType
- var liyyDollar []liyySymType
- _ = liyyDollar // silence set and not used
- liyyS := liyyrcvr.stack[:]
-
- Nerrs := 0 /* number of errors */
- Errflag := 0 /* error recovery flag */
- liyystate := 0
- liyyrcvr.char = -1
- liyytoken := -1 // liyyrcvr.char translated into internal numbering
- defer func() {
- // Make sure we report no lookahead when not parsing.
- liyystate = -1
- liyyrcvr.char = -1
- liyytoken = -1
- }()
- liyyp := -1
- goto liyystack
-
-ret0:
- return 0
-
-ret1:
- return 1
-
-liyystack:
- /* put a state and value onto the stack */
- if liyyDebug >= 4 {
- __yyfmt__.Printf("char %v in %v\n", liyyTokname(liyytoken), liyyStatname(liyystate))
- }
-
- liyyp++
- if liyyp >= len(liyyS) {
- nyys := make([]liyySymType, len(liyyS)*2)
- copy(nyys, liyyS)
- liyyS = nyys
- }
- liyyS[liyyp] = liyyVAL
- liyyS[liyyp].yys = liyystate
-
-liyynewstate:
- liyyn = liyyPact[liyystate]
- if liyyn <= liyyFlag {
- goto liyydefault /* simple state */
- }
- if liyyrcvr.char < 0 {
- liyyrcvr.char, liyytoken = liyylex1(liyylex, &liyyrcvr.lval)
- }
- liyyn += liyytoken
- if liyyn < 0 || liyyn >= liyyLast {
- goto liyydefault
- }
- liyyn = liyyAct[liyyn]
- if liyyChk[liyyn] == liyytoken { /* valid shift */
- liyyrcvr.char = -1
- liyytoken = -1
- liyyVAL = liyyrcvr.lval
- liyystate = liyyn
- if Errflag > 0 {
- Errflag--
- }
- goto liyystack
- }
-
-liyydefault:
- /* default state action */
- liyyn = liyyDef[liyystate]
- if liyyn == -2 {
- if liyyrcvr.char < 0 {
- liyyrcvr.char, liyytoken = liyylex1(liyylex, &liyyrcvr.lval)
- }
-
- /* look through exception table */
- xi := 0
- for {
- if liyyExca[xi+0] == -1 && liyyExca[xi+1] == liyystate {
- break
- }
- xi += 2
- }
- for xi += 2; ; xi += 2 {
- liyyn = liyyExca[xi+0]
- if liyyn < 0 || liyyn == liyytoken {
- break
- }
- }
- liyyn = liyyExca[xi+1]
- if liyyn < 0 {
- goto ret0
- }
- }
- if liyyn == 0 {
- /* error ... attempt to resume parsing */
- switch Errflag {
- case 0: /* brand new error */
- liyylex.Error(liyyErrorMessage(liyystate, liyytoken))
- Nerrs++
- if liyyDebug >= 1 {
- __yyfmt__.Printf("%s", liyyStatname(liyystate))
- __yyfmt__.Printf(" saw %s\n", liyyTokname(liyytoken))
- }
- fallthrough
-
- case 1, 2: /* incompletely recovered error ... try again */
- Errflag = 3
-
- /* find a state where "error" is a legal shift action */
- for liyyp >= 0 {
- liyyn = liyyPact[liyyS[liyyp].yys] + liyyErrCode
- if liyyn >= 0 && liyyn < liyyLast {
- liyystate = liyyAct[liyyn] /* simulate a shift of "error" */
- if liyyChk[liyystate] == liyyErrCode {
- goto liyystack
- }
- }
-
- /* the current p has no shift on "error", pop stack */
- if liyyDebug >= 2 {
- __yyfmt__.Printf("error recovery pops state %d\n", liyyS[liyyp].yys)
- }
- liyyp--
- }
- /* there is no state on the stack with an error shift ... abort */
- goto ret1
-
- case 3: /* no shift yet; clobber input char */
- if liyyDebug >= 2 {
- __yyfmt__.Printf("error recovery discards %s\n", liyyTokname(liyytoken))
- }
- if liyytoken == liyyEofCode {
- goto ret1
- }
- liyyrcvr.char = -1
- liyytoken = -1
- goto liyynewstate /* try again in the same state */
- }
- }
-
- /* reduction by production liyyn */
- if liyyDebug >= 2 {
- __yyfmt__.Printf("reduce %v in:\n\t%v\n", liyyn, liyyStatname(liyystate))
- }
-
- liyynt := liyyn
- liyypt := liyyp
- _ = liyypt // guard against "declared and not used"
-
- liyyp -= liyyR2[liyyn]
- // liyyp is now the index of $0. Perform the default action. Iff the
- // reduced production is ε, $1 is possibly out of range.
- if liyyp+1 >= len(liyyS) {
- nyys := make([]liyySymType, len(liyyS)*2)
- copy(nyys, liyyS)
- liyyS = nyys
- }
- liyyVAL = liyyS[liyyp+1]
-
- /* consult goto table to find next state */
- liyyn = liyyR1[liyyn]
- liyyg := liyyPgo[liyyn]
- liyyj := liyyg + liyyS[liyyp].yys + 1
-
- if liyyj >= liyyLast {
- liyystate = liyyAct[liyyg]
- } else {
- liyystate = liyyAct[liyyj]
- if liyyChk[liyystate] != -liyyn {
- liyystate = liyyAct[liyyg]
- }
- }
- // dummy call; replaced with literal code
- switch liyynt {
-
- case 1:
- liyyDollar = liyyS[liyypt-1 : liyypt+1]
- //line licenses.y:16
- {
- liyylex.(*licenseLexer).result = liyyVAL.Node
- }
- case 2:
- liyyDollar = liyyS[liyypt-1 : liyypt+1]
- //line licenses.y:20
- {
- liyyVAL.Node = &Condition{Children: []*Condition{liyyDollar[1].Node}}
- }
- case 3:
- liyyDollar = liyyS[liyypt-3 : liyypt+1]
- //line licenses.y:23
- {
- liyyVAL.Node.Children = append(liyyVAL.Node.Children, liyyDollar[3].Node)
- liyyVAL.Node.And = true
- }
- case 4:
- liyyDollar = liyyS[liyypt-3 : liyypt+1]
- //line licenses.y:27
- {
- liyyVAL.Node.Children = append(liyyVAL.Node.Children, liyyDollar[3].Node)
- liyyVAL.Node.Or = true
- }
- case 5:
- liyyDollar = liyyS[liyypt-1 : liyypt+1]
- //line licenses.y:32
- {
- liyyVAL.Node = liyyDollar[1].Node
- }
- case 6:
- liyyDollar = liyyS[liyypt-3 : liyypt+1]
- //line licenses.y:35
- {
- liyyVAL.Node = &Condition{Paren: liyyDollar[2].Node}
- }
- }
- goto liyystack /* stack new state and value */
-}
diff --git a/pkgtools/pkglint/files/plist-clash/main.go b/pkgtools/pkglint/files/plist-clash/main.go
deleted file mode 100644
index 49b4f15d7bc..00000000000
--- a/pkgtools/pkglint/files/plist-clash/main.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package main
-
-import (
- "fmt"
- "io/ioutil"
- "os"
- "sort"
- "strings"
-)
-
-var files map[string][]string
-var filenames []string
-
-func readPlist(fname string) {
- lines, err := ioutil.ReadFile(fname)
- if err != nil {
- fmt.Fprintf(os.Stderr, "warning: %s\n", err)
- return
- }
-
- for lineno, line := range strings.Split(string(lines), "\n") {
- if !strings.HasPrefix(line, "@") {
- if files[line] == nil {
- filenames = append(filenames, line)
- }
- files[line] = append(files[line], fmt.Sprintf("%s:%d", fname, lineno+1))
- }
- }
-}
-
-func main() {
- if len(os.Args) == 1 {
- fmt.Fprintf(os.Stderr, "usage: %s <plist>...", os.Args[0])
- }
-
- for _, plist := range os.Args[1:] {
- readPlist(plist)
- }
-
- sort.Strings(filenames)
-
- for _, filename := range filenames {
- sources := files[filename]
- if len(sources) != 1 {
- for _, source := range sources {
- fmt.Printf("%s: %s\n", source, filename)
- }
- }
- }
-}
diff --git a/pkgtools/pkglint/files/shellyacc.go b/pkgtools/pkglint/files/shellyacc.go
deleted file mode 100644
index 4820462cd40..00000000000
--- a/pkgtools/pkglint/files/shellyacc.go
+++ /dev/null
@@ -1,1250 +0,0 @@
-//line shell.y:2
-package main
-
-import __yyfmt__ "fmt"
-
-//line shell.y:2
-//line shell.y:18
-type shyySymType struct {
- yys int
- IONum int
- List *MkShList
- AndOr *MkShAndOr
- Pipeline *MkShPipeline
- Command *MkShCommand
- CompoundCommand *MkShCompoundCommand
- Separator MkShSeparator
- Simple *MkShSimpleCommand
- FuncDef *MkShFunctionDefinition
- For *MkShForClause
- If *MkShIfClause
- Case *MkShCaseClause
- CaseItem *MkShCaseItem
- Loop *MkShLoopClause
- Words []*ShToken
- Word *ShToken
- Redirections []*MkShRedirection
- Redirection *MkShRedirection
-}
-
-const tkWORD = 57346
-const tkASSIGNMENT_WORD = 57347
-const tkNEWLINE = 57348
-const tkIO_NUMBER = 57349
-const tkBACKGROUND = 57350
-const tkPIPE = 57351
-const tkSEMI = 57352
-const tkAND = 57353
-const tkOR = 57354
-const tkSEMISEMI = 57355
-const tkLT = 57356
-const tkGT = 57357
-const tkLTLT = 57358
-const tkGTGT = 57359
-const tkLTAND = 57360
-const tkGTAND = 57361
-const tkLTGT = 57362
-const tkLTLTDASH = 57363
-const tkGTPIPE = 57364
-const tkIF = 57365
-const tkTHEN = 57366
-const tkELSE = 57367
-const tkELIF = 57368
-const tkFI = 57369
-const tkDO = 57370
-const tkDONE = 57371
-const tkCASE = 57372
-const tkESAC = 57373
-const tkWHILE = 57374
-const tkUNTIL = 57375
-const tkFOR = 57376
-const tkLPAREN = 57377
-const tkRPAREN = 57378
-const tkLBRACE = 57379
-const tkRBRACE = 57380
-const tkEXCLAM = 57381
-const tkIN = 57382
-
-var shyyToknames = [...]string{
- "$end",
- "error",
- "$unk",
- "tkWORD",
- "tkASSIGNMENT_WORD",
- "tkNEWLINE",
- "tkIO_NUMBER",
- "tkBACKGROUND",
- "tkPIPE",
- "tkSEMI",
- "tkAND",
- "tkOR",
- "tkSEMISEMI",
- "tkLT",
- "tkGT",
- "tkLTLT",
- "tkGTGT",
- "tkLTAND",
- "tkGTAND",
- "tkLTGT",
- "tkLTLTDASH",
- "tkGTPIPE",
- "tkIF",
- "tkTHEN",
- "tkELSE",
- "tkELIF",
- "tkFI",
- "tkDO",
- "tkDONE",
- "tkCASE",
- "tkESAC",
- "tkWHILE",
- "tkUNTIL",
- "tkFOR",
- "tkLPAREN",
- "tkRPAREN",
- "tkLBRACE",
- "tkRBRACE",
- "tkEXCLAM",
- "tkIN",
-}
-var shyyStatenames = [...]string{}
-
-const shyyEofCode = 1
-const shyyErrCode = 2
-const shyyInitialStackSize = 16
-
-//line yacctab:1
-var shyyExca = [...]int{
- -1, 0,
- 1, 3,
- -2, 93,
- -1, 1,
- 1, -1,
- -2, 0,
- -1, 154,
- 31, 93,
- -2, 24,
- -1, 162,
- 31, 92,
- -2, 97,
- -1, 166,
- 31, 44,
- -2, 96,
-}
-
-const shyyNprod = 100
-const shyyPrivate = 57344
-
-var shyyTokenNames []string
-var shyyStates []string
-
-const shyyLast = 342
-
-var shyyAct = [...]int{
-
- 4, 121, 7, 135, 3, 5, 138, 134, 48, 25,
- 102, 14, 12, 49, 115, 64, 8, 76, 103, 84,
- 111, 97, 98, 9, 57, 57, 60, 65, 94, 147,
- 110, 125, 67, 68, 31, 152, 71, 72, 73, 140,
- 152, 30, 103, 32, 33, 29, 28, 36, 27, 88,
- 139, 139, 153, 89, 90, 91, 78, 79, 80, 81,
- 82, 83, 157, 34, 87, 86, 92, 151, 92, 65,
- 99, 100, 101, 156, 95, 93, 66, 144, 133, 35,
- 46, 137, 137, 75, 104, 54, 37, 39, 44, 41,
- 38, 40, 42, 45, 43, 108, 124, 123, 122, 74,
- 124, 123, 6, 95, 107, 56, 112, 63, 113, 158,
- 109, 139, 120, 105, 106, 52, 53, 85, 129, 130,
- 114, 58, 10, 6, 77, 50, 126, 51, 141, 142,
- 128, 127, 118, 70, 55, 145, 117, 148, 143, 146,
- 119, 149, 118, 69, 150, 59, 117, 136, 116, 24,
- 23, 154, 132, 131, 21, 160, 163, 164, 159, 22,
- 162, 165, 166, 161, 17, 26, 20, 35, 15, 16,
- 13, 47, 19, 155, 37, 39, 44, 41, 38, 40,
- 42, 45, 43, 31, 18, 2, 1, 0, 0, 0,
- 30, 0, 32, 33, 29, 28, 0, 27, 0, 11,
- 17, 26, 0, 35, 0, 0, 0, 0, 0, 0,
- 37, 39, 44, 41, 38, 40, 42, 45, 43, 31,
- 0, 0, 0, 0, 0, 0, 30, 0, 32, 33,
- 29, 28, 0, 27, 0, 11, 17, 26, 0, 35,
- 0, 0, 0, 0, 0, 0, 37, 39, 44, 41,
- 38, 40, 42, 45, 43, 31, 0, 0, 0, 0,
- 62, 61, 30, 35, 32, 33, 29, 28, 0, 27,
- 37, 39, 44, 41, 38, 40, 42, 45, 43, 96,
- 0, 0, 35, 0, 0, 0, 0, 0, 0, 37,
- 39, 44, 41, 38, 40, 42, 45, 43, 66, 0,
- 0, 35, 0, 0, 0, 0, 0, 0, 37, 39,
- 44, 41, 38, 40, 42, 45, 43, 35, 0, 0,
- 0, 0, 0, 0, 37, 39, 44, 41, 38, 40,
- 42, 45, 43, 37, 39, 44, 41, 38, 40, 42,
- 45, 43,
-}
-var shyyPact = [...]int{
-
- 96, -1000, -1000, -1000, 196, 74, -1000, 117, 104, -1000,
- 76, 232, -1000, -1000, 310, 310, 256, 72, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, 96, 96, 139,
- 129, 96, 96, 96, -1000, 319, -1000, 120, 120, 120,
- 120, 120, 120, 120, 113, 113, -1000, 196, 96, 74,
- -1000, -1000, 96, 96, 96, 76, 310, -1000, 310, 294,
- -1000, -1000, -1000, -8, 275, -1000, -1000, -17, -14, 96,
- 96, 48, 14, 14, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, 104, -1000, 196,
- 196, 232, -1000, 275, 96, -1000, -1000, -1000, -1000, -10,
- -20, 96, -1000, 96, -1000, -1000, -1000, -1000, 11, -1000,
- 136, 96, 71, 2, -1000, 14, 126, 96, 96, -1000,
- 47, 12, -1000, 96, 96, -1000, -1000, 14, -1000, -1000,
- -1000, 46, -2, -1000, -1000, -1000, 96, 107, 31, -1000,
- -1000, 28, -1000, -1000, -1000, -1000, -1000, -1000, 160, 60,
- 26, -1000, 105, 96, 117, 96, 96, -1000, -1000, 75,
- -1000, 96, 74, -1000, -1000, -1000, -1000,
-}
-var shyyPgo = [...]int{
-
- 0, 186, 185, 4, 184, 172, 2, 10, 16, 23,
- 122, 12, 11, 171, 8, 14, 170, 169, 15, 168,
- 166, 159, 1, 154, 153, 152, 7, 3, 150, 149,
- 148, 147, 6, 17, 145, 19, 105, 9, 63, 47,
- 0, 5,
-}
-var shyyR1 = [...]int{
-
- 0, 1, 2, 2, 8, 8, 8, 9, 9, 10,
- 10, 11, 11, 11, 11, 11, 12, 12, 12, 12,
- 12, 12, 12, 5, 3, 3, 6, 6, 20, 20,
- 20, 30, 30, 23, 23, 23, 25, 25, 24, 24,
- 31, 31, 27, 27, 27, 26, 26, 32, 32, 21,
- 21, 22, 22, 22, 28, 29, 19, 4, 7, 16,
- 16, 16, 16, 16, 34, 17, 17, 17, 17, 18,
- 18, 18, 18, 36, 36, 37, 37, 37, 37, 38,
- 38, 38, 38, 38, 38, 38, 33, 39, 39, 35,
- 41, 41, 40, 40, 14, 14, 13, 13, 15, 15,
-}
-var shyyR2 = [...]int{
-
- 0, 1, 1, 0, 1, 4, 4, 1, 2, 1,
- 4, 1, 1, 2, 1, 2, 1, 1, 1, 1,
- 1, 1, 1, 3, 2, 3, 1, 3, 4, 6,
- 7, 1, 2, 7, 7, 6, 1, 2, 1, 2,
- 3, 2, 2, 4, 5, 4, 4, 1, 3, 6,
- 5, 4, 5, 2, 3, 3, 5, 3, 3, 3,
- 2, 1, 2, 1, 1, 1, 1, 2, 2, 1,
- 1, 2, 2, 1, 2, 1, 2, 1, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 2, 1,
- 1, 2, 1, 0, 1, 1, 2, 1, 2, 2,
-}
-var shyyChk = [...]int{
-
- -1000, -1, -2, -3, -40, -41, 6, -6, -8, -9,
- -10, 39, -11, -16, -12, -19, -17, 4, -4, -5,
- -20, -23, -21, -28, -29, -37, 5, 37, 35, 34,
- 30, 23, 32, 33, -38, 7, -39, 14, 18, 15,
- 19, 17, 20, 22, 16, 21, 6, -13, -14, -41,
- 8, 10, 11, 12, 9, -10, -36, -37, -36, -34,
- -37, 5, 4, 35, -18, -37, 4, -3, -3, 4,
- 4, -3, -3, -3, -38, -39, -33, 4, -33, -33,
- -33, -33, -33, -33, -35, 4, -35, -8, -40, -40,
- -40, -40, -37, -18, 36, -37, 4, 38, 36, -40,
- -40, 24, -7, 28, -7, -9, -9, -11, -40, -7,
- 40, 40, -3, -3, -12, -15, -30, 10, 6, 4,
- -40, -22, 27, 26, 25, 29, -7, -15, 4, -40,
- -40, -24, -25, 31, -26, -27, -31, 35, -32, 4,
- 27, -3, -3, -7, 31, -27, -26, 31, -40, -3,
- -32, 36, 9, 24, -6, 13, 13, 36, 4, -3,
- -40, -14, -41, -40, -40, -22, -40,
-}
-var shyyDef = [...]int{
-
- -2, -2, 1, 2, 0, 92, 90, 24, 26, 4,
- 7, 0, 9, 11, 12, 14, 61, 63, 16, 17,
- 18, 19, 20, 21, 22, 65, 66, 93, 93, 0,
- 0, 93, 93, 93, 75, 0, 77, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 91, 25, 93, 97,
- 94, 95, 93, 93, 93, 8, 13, 73, 15, 60,
- 67, 68, 64, 0, 62, 69, 70, 0, 0, 93,
- 93, 0, 0, 0, 76, 78, 79, 86, 80, 81,
- 82, 83, 84, 85, 87, 89, 88, 27, 96, 0,
- 0, 0, 74, 59, 93, 71, 72, 57, 23, 0,
- 0, 93, 54, 93, 55, 5, 6, 10, 0, 28,
- 0, 93, 0, 0, 56, 0, 0, 93, 93, 31,
- 0, 0, 50, 93, 93, 58, 29, 0, 32, 98,
- 99, 0, 0, 35, 38, 36, 93, 0, 0, 47,
- 49, 0, 53, 30, 33, 37, 39, 34, 42, 0,
- 0, 41, 0, 93, -2, 93, 93, 40, 48, 51,
- 43, 93, -2, 45, 46, 52, -2,
-}
-var shyyTok1 = [...]int{
-
- 1,
-}
-var shyyTok2 = [...]int{
-
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40,
-}
-var shyyTok3 = [...]int{
- 0,
-}
-
-var shyyErrorMessages = [...]struct {
- state int
- token int
- msg string
-}{}
-
-//line yaccpar:1
-
-/* parser for yacc output */
-
-var (
- shyyDebug = 0
- shyyErrorVerbose = false
-)
-
-type shyyLexer interface {
- Lex(lval *shyySymType) int
- Error(s string)
-}
-
-type shyyParser interface {
- Parse(shyyLexer) int
- Lookahead() int
-}
-
-type shyyParserImpl struct {
- lval shyySymType
- stack [shyyInitialStackSize]shyySymType
- char int
-}
-
-func (p *shyyParserImpl) Lookahead() int {
- return p.char
-}
-
-func shyyNewParser() shyyParser {
- return &shyyParserImpl{}
-}
-
-const shyyFlag = -1000
-
-func shyyTokname(c int) string {
- if c >= 1 && c-1 < len(shyyToknames) {
- if shyyToknames[c-1] != "" {
- return shyyToknames[c-1]
- }
- }
- return __yyfmt__.Sprintf("tok-%v", c)
-}
-
-func shyyStatname(s int) string {
- if s >= 0 && s < len(shyyStatenames) {
- if shyyStatenames[s] != "" {
- return shyyStatenames[s]
- }
- }
- return __yyfmt__.Sprintf("state-%v", s)
-}
-
-func shyyErrorMessage(state, lookAhead int) string {
- const TOKSTART = 4
-
- if !shyyErrorVerbose {
- return "syntax error"
- }
-
- for _, e := range shyyErrorMessages {
- if e.state == state && e.token == lookAhead {
- return "syntax error: " + e.msg
- }
- }
-
- res := "syntax error: unexpected " + shyyTokname(lookAhead)
-
- // To match Bison, suggest at most four expected tokens.
- expected := make([]int, 0, 4)
-
- // Look for shiftable tokens.
- base := shyyPact[state]
- for tok := TOKSTART; tok-1 < len(shyyToknames); tok++ {
- if n := base + tok; n >= 0 && n < shyyLast && shyyChk[shyyAct[n]] == tok {
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
- }
-
- if shyyDef[state] == -2 {
- i := 0
- for shyyExca[i] != -1 || shyyExca[i+1] != state {
- i += 2
- }
-
- // Look for tokens that we accept or reduce.
- for i += 2; shyyExca[i] >= 0; i += 2 {
- tok := shyyExca[i]
- if tok < TOKSTART || shyyExca[i+1] == 0 {
- continue
- }
- if len(expected) == cap(expected) {
- return res
- }
- expected = append(expected, tok)
- }
-
- // If the default action is to accept or reduce, give up.
- if shyyExca[i+1] != 0 {
- return res
- }
- }
-
- for i, tok := range expected {
- if i == 0 {
- res += ", expecting "
- } else {
- res += " or "
- }
- res += shyyTokname(tok)
- }
- return res
-}
-
-func shyylex1(lex shyyLexer, lval *shyySymType) (char, token int) {
- token = 0
- char = lex.Lex(lval)
- if char <= 0 {
- token = shyyTok1[0]
- goto out
- }
- if char < len(shyyTok1) {
- token = shyyTok1[char]
- goto out
- }
- if char >= shyyPrivate {
- if char < shyyPrivate+len(shyyTok2) {
- token = shyyTok2[char-shyyPrivate]
- goto out
- }
- }
- for i := 0; i < len(shyyTok3); i += 2 {
- token = shyyTok3[i+0]
- if token == char {
- token = shyyTok3[i+1]
- goto out
- }
- }
-
-out:
- if token == 0 {
- token = shyyTok2[1] /* unknown char */
- }
- if shyyDebug >= 3 {
- __yyfmt__.Printf("lex %s(%d)\n", shyyTokname(token), uint(char))
- }
- return char, token
-}
-
-func shyyParse(shyylex shyyLexer) int {
- return shyyNewParser().Parse(shyylex)
-}
-
-func (shyyrcvr *shyyParserImpl) Parse(shyylex shyyLexer) int {
- var shyyn int
- var shyyVAL shyySymType
- var shyyDollar []shyySymType
- _ = shyyDollar // silence set and not used
- shyyS := shyyrcvr.stack[:]
-
- Nerrs := 0 /* number of errors */
- Errflag := 0 /* error recovery flag */
- shyystate := 0
- shyyrcvr.char = -1
- shyytoken := -1 // shyyrcvr.char translated into internal numbering
- defer func() {
- // Make sure we report no lookahead when not parsing.
- shyystate = -1
- shyyrcvr.char = -1
- shyytoken = -1
- }()
- shyyp := -1
- goto shyystack
-
-ret0:
- return 0
-
-ret1:
- return 1
-
-shyystack:
- /* put a state and value onto the stack */
- if shyyDebug >= 4 {
- __yyfmt__.Printf("char %v in %v\n", shyyTokname(shyytoken), shyyStatname(shyystate))
- }
-
- shyyp++
- if shyyp >= len(shyyS) {
- nyys := make([]shyySymType, len(shyyS)*2)
- copy(nyys, shyyS)
- shyyS = nyys
- }
- shyyS[shyyp] = shyyVAL
- shyyS[shyyp].yys = shyystate
-
-shyynewstate:
- shyyn = shyyPact[shyystate]
- if shyyn <= shyyFlag {
- goto shyydefault /* simple state */
- }
- if shyyrcvr.char < 0 {
- shyyrcvr.char, shyytoken = shyylex1(shyylex, &shyyrcvr.lval)
- }
- shyyn += shyytoken
- if shyyn < 0 || shyyn >= shyyLast {
- goto shyydefault
- }
- shyyn = shyyAct[shyyn]
- if shyyChk[shyyn] == shyytoken { /* valid shift */
- shyyrcvr.char = -1
- shyytoken = -1
- shyyVAL = shyyrcvr.lval
- shyystate = shyyn
- if Errflag > 0 {
- Errflag--
- }
- goto shyystack
- }
-
-shyydefault:
- /* default state action */
- shyyn = shyyDef[shyystate]
- if shyyn == -2 {
- if shyyrcvr.char < 0 {
- shyyrcvr.char, shyytoken = shyylex1(shyylex, &shyyrcvr.lval)
- }
-
- /* look through exception table */
- xi := 0
- for {
- if shyyExca[xi+0] == -1 && shyyExca[xi+1] == shyystate {
- break
- }
- xi += 2
- }
- for xi += 2; ; xi += 2 {
- shyyn = shyyExca[xi+0]
- if shyyn < 0 || shyyn == shyytoken {
- break
- }
- }
- shyyn = shyyExca[xi+1]
- if shyyn < 0 {
- goto ret0
- }
- }
- if shyyn == 0 {
- /* error ... attempt to resume parsing */
- switch Errflag {
- case 0: /* brand new error */
- shyylex.Error(shyyErrorMessage(shyystate, shyytoken))
- Nerrs++
- if shyyDebug >= 1 {
- __yyfmt__.Printf("%s", shyyStatname(shyystate))
- __yyfmt__.Printf(" saw %s\n", shyyTokname(shyytoken))
- }
- fallthrough
-
- case 1, 2: /* incompletely recovered error ... try again */
- Errflag = 3
-
- /* find a state where "error" is a legal shift action */
- for shyyp >= 0 {
- shyyn = shyyPact[shyyS[shyyp].yys] + shyyErrCode
- if shyyn >= 0 && shyyn < shyyLast {
- shyystate = shyyAct[shyyn] /* simulate a shift of "error" */
- if shyyChk[shyystate] == shyyErrCode {
- goto shyystack
- }
- }
-
- /* the current p has no shift on "error", pop stack */
- if shyyDebug >= 2 {
- __yyfmt__.Printf("error recovery pops state %d\n", shyyS[shyyp].yys)
- }
- shyyp--
- }
- /* there is no state on the stack with an error shift ... abort */
- goto ret1
-
- case 3: /* no shift yet; clobber input char */
- if shyyDebug >= 2 {
- __yyfmt__.Printf("error recovery discards %s\n", shyyTokname(shyytoken))
- }
- if shyytoken == shyyEofCode {
- goto ret1
- }
- shyyrcvr.char = -1
- shyytoken = -1
- goto shyynewstate /* try again in the same state */
- }
- }
-
- /* reduction by production shyyn */
- if shyyDebug >= 2 {
- __yyfmt__.Printf("reduce %v in:\n\t%v\n", shyyn, shyyStatname(shyystate))
- }
-
- shyynt := shyyn
- shyypt := shyyp
- _ = shyypt // guard against "declared and not used"
-
- shyyp -= shyyR2[shyyn]
- // shyyp is now the index of $0. Perform the default action. Iff the
- // reduced production is ε, $1 is possibly out of range.
- if shyyp+1 >= len(shyyS) {
- nyys := make([]shyySymType, len(shyyS)*2)
- copy(nyys, shyyS)
- shyyS = nyys
- }
- shyyVAL = shyyS[shyyp+1]
-
- /* consult goto table to find next state */
- shyyn = shyyR1[shyyn]
- shyyg := shyyPgo[shyyn]
- shyyj := shyyg + shyyS[shyyp].yys + 1
-
- if shyyj >= shyyLast {
- shyystate = shyyAct[shyyg]
- } else {
- shyystate = shyyAct[shyyj]
- if shyyChk[shyystate] != -shyyn {
- shyystate = shyyAct[shyyg]
- }
- }
- // dummy call; replaced with literal code
- switch shyynt {
-
- case 1:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:59
- {
- shyylex.(*ShellLexer).result = shyyVAL.List
- }
- case 2:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:63
- {
- shyyVAL.List = shyyDollar[1].List
- }
- case 3:
- shyyDollar = shyyS[shyypt-0 : shyypt+1]
- //line shell.y:66
- {
- shyyVAL.List = &MkShList{}
- }
- case 4:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:70
- {
- shyyVAL.AndOr = NewMkShAndOr(shyyDollar[1].Pipeline)
- }
- case 5:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:73
- {
- shyyVAL.AndOr.Add("&&", shyyDollar[4].Pipeline)
- }
- case 6:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:76
- {
- shyyVAL.AndOr.Add("||", shyyDollar[4].Pipeline)
- }
- case 7:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:80
- {
- /* empty */
- }
- case 8:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:82
- {
- shyyVAL.Pipeline = shyyDollar[2].Pipeline
- shyyVAL.Pipeline.Negated = true
- }
- case 9:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:87
- {
- shyyVAL.Pipeline = NewMkShPipeline(false, shyyDollar[1].Command)
- }
- case 10:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:90
- {
- shyyVAL.Pipeline.Add(shyyDollar[4].Command)
- }
- case 11:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:94
- {
- shyyVAL.Command = &MkShCommand{Simple: shyyDollar[1].Simple}
- }
- case 12:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:97
- {
- shyyVAL.Command = &MkShCommand{Compound: shyyDollar[1].CompoundCommand}
- }
- case 13:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:100
- {
- shyyVAL.Command = &MkShCommand{Compound: shyyDollar[1].CompoundCommand, Redirects: shyyDollar[2].Redirections}
- }
- case 14:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:103
- {
- shyyVAL.Command = &MkShCommand{FuncDef: shyyDollar[1].FuncDef}
- }
- case 15:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:106
- {
- shyyVAL.Command = &MkShCommand{FuncDef: shyyDollar[1].FuncDef, Redirects: shyyDollar[2].Redirections}
- }
- case 16:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:110
- {
- shyyVAL.CompoundCommand = &MkShCompoundCommand{Brace: shyyDollar[1].List}
- }
- case 17:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:113
- {
- shyyVAL.CompoundCommand = &MkShCompoundCommand{Subshell: shyyDollar[1].List}
- }
- case 18:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:116
- {
- shyyVAL.CompoundCommand = &MkShCompoundCommand{For: shyyDollar[1].For}
- }
- case 19:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:119
- {
- shyyVAL.CompoundCommand = &MkShCompoundCommand{Case: shyyDollar[1].Case}
- }
- case 20:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:122
- {
- shyyVAL.CompoundCommand = &MkShCompoundCommand{If: shyyDollar[1].If}
- }
- case 21:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:125
- {
- shyyVAL.CompoundCommand = &MkShCompoundCommand{Loop: shyyDollar[1].Loop}
- }
- case 22:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:128
- {
- shyyVAL.CompoundCommand = &MkShCompoundCommand{Loop: shyyDollar[1].Loop}
- }
- case 23:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:132
- {
- shyyVAL.List = shyyDollar[2].List
- }
- case 24:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:136
- {
- shyyVAL.List = shyyDollar[2].List
- }
- case 25:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:139
- {
- shyyVAL.List = shyyDollar[2].List
- shyyVAL.List.AddSeparator(shyyDollar[3].Separator)
- }
- case 26:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:144
- {
- shyyVAL.List = NewMkShList()
- shyyVAL.List.AddAndOr(shyyDollar[1].AndOr)
- }
- case 27:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:148
- {
- shyyVAL.List.AddSeparator(shyyDollar[2].Separator)
- shyyVAL.List.AddAndOr(shyyDollar[3].AndOr)
- }
- case 28:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:153
- {
- args := NewShToken("\"$$@\"",
- &ShAtom{shtWord, "\"", shqDquot, nil},
- &ShAtom{shtWord, "$$@", shqDquot, nil},
- &ShAtom{shtWord, "\"", shqPlain, nil})
- shyyVAL.For = &MkShForClause{shyyDollar[2].Word.MkText, []*ShToken{args}, shyyDollar[4].List}
- }
- case 29:
- shyyDollar = shyyS[shyypt-6 : shyypt+1]
- //line shell.y:160
- {
- shyyVAL.For = &MkShForClause{shyyDollar[2].Word.MkText, nil, shyyDollar[6].List}
- }
- case 30:
- shyyDollar = shyyS[shyypt-7 : shyypt+1]
- //line shell.y:163
- {
- shyyVAL.For = &MkShForClause{shyyDollar[2].Word.MkText, shyyDollar[5].Words, shyyDollar[7].List}
- }
- case 31:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:167
- {
- shyyVAL.Words = append(shyyVAL.Words, shyyDollar[1].Word)
- }
- case 32:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:170
- {
- shyyVAL.Words = append(shyyVAL.Words, shyyDollar[2].Word)
- }
- case 33:
- shyyDollar = shyyS[shyypt-7 : shyypt+1]
- //line shell.y:174
- {
- shyyVAL.Case = shyyDollar[6].Case
- shyyVAL.Case.Word = shyyDollar[2].Word
- }
- case 34:
- shyyDollar = shyyS[shyypt-7 : shyypt+1]
- //line shell.y:178
- {
- shyyVAL.Case = shyyDollar[6].Case
- shyyVAL.Case.Word = shyyDollar[2].Word
- }
- case 35:
- shyyDollar = shyyS[shyypt-6 : shyypt+1]
- //line shell.y:182
- {
- shyyVAL.Case = &MkShCaseClause{shyyDollar[2].Word, nil}
- }
- case 36:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:186
- {
- shyyVAL.Case = &MkShCaseClause{nil, nil}
- shyyVAL.Case.Cases = append(shyyVAL.Case.Cases, shyyDollar[1].CaseItem)
- }
- case 37:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:190
- {
- shyyVAL.Case.Cases = append(shyyVAL.Case.Cases, shyyDollar[2].CaseItem)
- }
- case 38:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:194
- {
- shyyVAL.Case = &MkShCaseClause{nil, nil}
- shyyVAL.Case.Cases = append(shyyVAL.Case.Cases, shyyDollar[1].CaseItem)
- }
- case 39:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:198
- {
- shyyVAL.Case.Cases = append(shyyVAL.Case.Cases, shyyDollar[2].CaseItem)
- }
- case 40:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:202
- {
- shyyVAL.Words = shyyDollar[2].Words
- }
- case 41:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:205
- {
- /* empty */
- }
- case 42:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:208
- {
- shyyVAL.CaseItem = &MkShCaseItem{shyyDollar[1].Words, &MkShList{}, sepNone}
- }
- case 43:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:211
- {
- shyyVAL.CaseItem = &MkShCaseItem{shyyDollar[1].Words, shyyDollar[3].List, sepNone}
- }
- case 44:
- shyyDollar = shyyS[shyypt-5 : shyypt+1]
- //line shell.y:214
- {
- shyyVAL.CaseItem = &MkShCaseItem{shyyDollar[1].Words, shyyDollar[3].List, shyyDollar[4].Separator}
- }
- case 45:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:218
- {
- shyyVAL.CaseItem = &MkShCaseItem{shyyDollar[1].Words, &MkShList{}, sepNone}
- }
- case 46:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:221
- {
- shyyVAL.CaseItem = &MkShCaseItem{shyyDollar[1].Words, shyyDollar[2].List, sepNone}
- }
- case 47:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:225
- {
- shyyVAL.Words = nil
- shyyVAL.Words = append(shyyVAL.Words, shyyDollar[1].Word)
- }
- case 48:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:229
- {
- shyyVAL.Words = append(shyyVAL.Words, shyyDollar[3].Word)
- }
- case 49:
- shyyDollar = shyyS[shyypt-6 : shyypt+1]
- //line shell.y:233
- {
- shyyVAL.If = shyyDollar[5].If
- shyyVAL.If.Prepend(shyyDollar[2].List, shyyDollar[4].List)
- }
- case 50:
- shyyDollar = shyyS[shyypt-5 : shyypt+1]
- //line shell.y:237
- {
- shyyVAL.If = &MkShIfClause{}
- shyyVAL.If.Prepend(shyyDollar[2].List, shyyDollar[4].List)
- }
- case 51:
- shyyDollar = shyyS[shyypt-4 : shyypt+1]
- //line shell.y:242
- {
- shyyVAL.If = &MkShIfClause{}
- shyyVAL.If.Prepend(shyyDollar[2].List, shyyDollar[4].List)
- }
- case 52:
- shyyDollar = shyyS[shyypt-5 : shyypt+1]
- //line shell.y:246
- {
- shyyVAL.If = shyyDollar[5].If
- shyyVAL.If.Prepend(shyyDollar[2].List, shyyDollar[4].List)
- }
- case 53:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:250
- {
- shyyVAL.If = &MkShIfClause{nil, nil, shyyDollar[2].List}
- }
- case 54:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:254
- {
- shyyVAL.Loop = &MkShLoopClause{shyyDollar[2].List, shyyDollar[3].List, false}
- }
- case 55:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:257
- {
- shyyVAL.Loop = &MkShLoopClause{shyyDollar[2].List, shyyDollar[3].List, true}
- }
- case 56:
- shyyDollar = shyyS[shyypt-5 : shyypt+1]
- //line shell.y:261
- { /* Apply rule 9 */
- shyyVAL.FuncDef = &MkShFunctionDefinition{shyyDollar[1].Word.MkText, shyyDollar[5].CompoundCommand}
- }
- case 57:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:264
- {
- shyyVAL.List = shyyDollar[2].List
- }
- case 58:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:268
- {
- shyyVAL.List = shyyDollar[2].List
- }
- case 59:
- shyyDollar = shyyS[shyypt-3 : shyypt+1]
- //line shell.y:272
- {
- shyyVAL.Simple.Name = shyyDollar[2].Word
- shyyVAL.Simple.Args = append(shyyVAL.Simple.Args, shyyDollar[3].Simple.Args...)
- shyyVAL.Simple.Redirections = append(shyyVAL.Simple.Redirections, shyyDollar[3].Simple.Redirections...)
- }
- case 60:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:277
- {
- shyyVAL.Simple.Name = shyyDollar[2].Word
- }
- case 61:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:280
- {
- /* empty */
- }
- case 62:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:282
- {
- shyyVAL.Simple = shyyDollar[2].Simple
- shyyVAL.Simple.Name = shyyDollar[1].Word
- }
- case 63:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:286
- {
- shyyVAL.Simple = &MkShSimpleCommand{Name: shyyDollar[1].Word}
- }
- case 64:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:290
- { /* Apply rule 7b */
- /* empty */
- }
- case 65:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:292
- {
- shyyVAL.Simple = &MkShSimpleCommand{}
- shyyVAL.Simple.Redirections = append(shyyVAL.Simple.Redirections, shyyDollar[1].Redirection)
- }
- case 66:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:296
- {
- shyyVAL.Simple = &MkShSimpleCommand{}
- shyyVAL.Simple.Assignments = append(shyyVAL.Simple.Assignments, shyyDollar[1].Word)
- }
- case 67:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:300
- {
- shyyVAL.Simple.Redirections = append(shyyVAL.Simple.Redirections, shyyDollar[2].Redirection)
- }
- case 68:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:303
- {
- shyyVAL.Simple.Assignments = append(shyyVAL.Simple.Assignments, shyyDollar[2].Word)
- }
- case 69:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:307
- {
- shyyVAL.Simple = &MkShSimpleCommand{}
- shyyVAL.Simple.Redirections = append(shyyVAL.Simple.Redirections, shyyDollar[1].Redirection)
- }
- case 70:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:311
- {
- shyyVAL.Simple = &MkShSimpleCommand{}
- shyyVAL.Simple.Args = append(shyyVAL.Simple.Args, shyyDollar[1].Word)
- }
- case 71:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:315
- {
- shyyVAL.Simple.Redirections = append(shyyVAL.Simple.Redirections, shyyDollar[2].Redirection)
- }
- case 72:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:318
- {
- shyyVAL.Simple.Args = append(shyyVAL.Simple.Args, shyyDollar[2].Word)
- }
- case 73:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:322
- {
- shyyVAL.Redirections = nil
- shyyVAL.Redirections = append(shyyVAL.Redirections, shyyDollar[1].Redirection)
- }
- case 74:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:326
- {
- shyyVAL.Redirections = append(shyyVAL.Redirections, shyyDollar[2].Redirection)
- }
- case 75:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:330
- {
- /* empty */
- }
- case 76:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:332
- {
- shyyVAL.Redirection = shyyDollar[2].Redirection
- shyyVAL.Redirection.Fd = shyyDollar[1].IONum
- }
- case 77:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:337
- {
- /* empty */
- }
- case 78:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:339
- {
- shyyVAL.Redirection = shyyDollar[2].Redirection
- shyyVAL.Redirection.Fd = shyyDollar[1].IONum
- }
- case 79:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:344
- {
- shyyVAL.Redirection = &MkShRedirection{-1, "<", shyyDollar[2].Word}
- }
- case 80:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:347
- {
- shyyVAL.Redirection = &MkShRedirection{-1, "<&", shyyDollar[2].Word}
- }
- case 81:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:350
- {
- shyyVAL.Redirection = &MkShRedirection{-1, ">", shyyDollar[2].Word}
- }
- case 82:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:353
- {
- shyyVAL.Redirection = &MkShRedirection{-1, ">&", shyyDollar[2].Word}
- }
- case 83:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:356
- {
- shyyVAL.Redirection = &MkShRedirection{-1, ">>", shyyDollar[2].Word}
- }
- case 84:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:359
- {
- shyyVAL.Redirection = &MkShRedirection{-1, "<>", shyyDollar[2].Word}
- }
- case 85:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:362
- {
- shyyVAL.Redirection = &MkShRedirection{-1, ">|", shyyDollar[2].Word}
- }
- case 86:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:366
- { /* Apply rule 2 */
- /* empty */
- }
- case 87:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:368
- {
- shyyVAL.Redirection = &MkShRedirection{-1, "<<", shyyDollar[2].Word}
- }
- case 88:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:371
- {
- shyyVAL.Redirection = &MkShRedirection{-1, "<<-", shyyDollar[2].Word}
- }
- case 89:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:375
- { /* Apply rule 3 */
- /* empty */
- }
- case 90:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:377
- {
- /* empty */
- }
- case 91:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:379
- {
- /* empty */
- }
- case 92:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:382
- {
- /* empty */
- }
- case 93:
- shyyDollar = shyyS[shyypt-0 : shyypt+1]
- //line shell.y:384
- {
- /* empty */
- }
- case 94:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:387
- {
- shyyVAL.Separator = sepBackground
- }
- case 95:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:390
- {
- shyyVAL.Separator = sepSemicolon
- }
- case 96:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:394
- {
- /* empty */
- }
- case 97:
- shyyDollar = shyyS[shyypt-1 : shyypt+1]
- //line shell.y:396
- {
- shyyVAL.Separator = sepNewline
- }
- case 98:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:400
- {
- shyyVAL.Separator = sepSemicolon
- }
- case 99:
- shyyDollar = shyyS[shyypt-2 : shyypt+1]
- //line shell.y:403
- {
- shyyVAL.Separator = sepNewline
- }
- }
- goto shyystack /* stack new state and value */
-}