diff options
Diffstat (limited to 'vendor/modernc.org/opt')
-rw-r--r-- | vendor/modernc.org/opt/AUTHORS | 11 | ||||
-rw-r--r-- | vendor/modernc.org/opt/CONTRIBUTORS | 9 | ||||
-rw-r--r-- | vendor/modernc.org/opt/LICENSE | 27 | ||||
-rw-r--r-- | vendor/modernc.org/opt/Makefile | 81 | ||||
-rw-r--r-- | vendor/modernc.org/opt/README.md | 11 | ||||
-rw-r--r-- | vendor/modernc.org/opt/opt.go | 152 | ||||
-rw-r--r-- | vendor/modernc.org/opt/unconvert.sh | 4 |
7 files changed, 295 insertions, 0 deletions
diff --git a/vendor/modernc.org/opt/AUTHORS b/vendor/modernc.org/opt/AUTHORS new file mode 100644 index 00000000..0078f5f5 --- /dev/null +++ b/vendor/modernc.org/opt/AUTHORS @@ -0,0 +1,11 @@ +# This file lists authors for copyright purposes. This file is distinct from +# the CONTRIBUTORS files. See the latter for an explanation. +# +# Names should be added to this file as: +# Name or Organization <email address> +# +# The email address is not required for organizations. +# +# Please keep the list sorted. + +Jan Mercl <0xjnml@gmail.com> diff --git a/vendor/modernc.org/opt/CONTRIBUTORS b/vendor/modernc.org/opt/CONTRIBUTORS new file mode 100644 index 00000000..5e86f060 --- /dev/null +++ b/vendor/modernc.org/opt/CONTRIBUTORS @@ -0,0 +1,9 @@ +# This file lists people who contributed code to this repository. The AUTHORS +# file lists the copyright holders; this file lists people. +# +# Names should be added to this file like so: +# Name <email address> +# +# Please keep the list sorted. + +Jan Mercl <0xjnml@gmail.com> diff --git a/vendor/modernc.org/opt/LICENSE b/vendor/modernc.org/opt/LICENSE new file mode 100644 index 00000000..11a2e914 --- /dev/null +++ b/vendor/modernc.org/opt/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2019 The Opt Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/modernc.org/opt/Makefile b/vendor/modernc.org/opt/Makefile new file mode 100644 index 00000000..f1dbabc7 --- /dev/null +++ b/vendor/modernc.org/opt/Makefile @@ -0,0 +1,81 @@ +# Copyright 2019 The Opt Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +.PHONY: all bench clean cover cpu editor internalError later mem nuke todo edit devbench + +grep=--include=*.go --include=*.l --include=*.y --include=*.yy +ngrep='internalError\|TODOOK\|lexer\.go\|parser\.go\|ast.go\|trigraphs\.go\|.*_string\.go\|stringer\.go\|testdata\/gcc' + +all: + date + go version 2>&1 | tee log + ./unconvert.sh + gofmt -l -s -w *.go + go test -i + go test 2>&1 | tee -a log + go install -v ./... + GOOS=linux GOARCH=arm go build + GOOS=linux GOARCH=386 go build + GOOS=linux GOARCH=amd64 go build + GOOS=windows GOARCH=386 go build + GOOS=windows GOARCH=amd64 go build + go vet 2>&1 | grep -v $(ngrep) || true + golint 2>&1 | grep -v $(ngrep) || true + make todo + misspell *.go + staticcheck | grep -v 'lexer\.go\|parser\.go' || true + maligned || true + grep -n 'FAIL\|PASS' log + go version + date 2>&1 | tee -a log + +devbench: + date 2>&1 | tee log-devbench + go test -timeout 24h -dev -run @ -bench . 2>&1 | tee -a log-devbench + grep -n 'FAIL\|SKIP' log-devbench || true + +bench: + date 2>&1 | tee log-bench + go test -timeout 24h -v -run '^[^E]' -bench . 2>&1 | tee -a log-bench + grep -n 'FAIL\|SKIP' log-bench || true + +clean: + go clean + rm -f *~ *.test *.out + +cover: + t=$(shell mktemp) ; go test -coverprofile $$t && go tool cover -html $$t && unlink $$t + +cpu: clean + go test -run @ -bench . -cpuprofile cpu.out + go tool pprof -lines *.test cpu.out + +edit: + touch log + gvim -p Makefile *.go & + +editor: + gofmt -l -s -w *.go + go test -i + go test -short 2>&1 | tee log + go install + +later: + @grep -n $(grep) LATER * || true + @grep -n $(grep) MAYBE * || true + +mem: clean + go test -v -run ParserCS -memprofile mem.out -timeout 24h + go tool pprof -lines -web -alloc_space *.test mem.out + +nuke: clean + go clean -i + +todo: + @grep -nr $(grep) ^[[:space:]]*_[[:space:]]*=[[:space:]][[:alpha:]][[:alnum:]]* * | grep -v $(ngrep) || true + @grep -nr $(grep) 'TODO\|panic' * | grep -v $(ngrep) || true + @grep -nr $(grep) BUG * | grep -v $(ngrep) || true + @grep -nr $(grep) [^[:alpha:]]println * | grep -v $(ngrep) || true + @grep -nir $(grep) 'work.*progress' || true + diff --git a/vendor/modernc.org/opt/README.md b/vendor/modernc.org/opt/README.md new file mode 100644 index 00000000..f04870fb --- /dev/null +++ b/vendor/modernc.org/opt/README.md @@ -0,0 +1,11 @@ +# opt + +Package opt implements command-line flag parsing. + +### Installation + + $ go get [-u] modernc.org/opt + +### Documentation + +[godoc.org/modernc.org/opt](http://godoc.org/modernc.org/opt) diff --git a/vendor/modernc.org/opt/opt.go b/vendor/modernc.org/opt/opt.go new file mode 100644 index 00000000..0085e9f2 --- /dev/null +++ b/vendor/modernc.org/opt/opt.go @@ -0,0 +1,152 @@ +// Package opt implements command-line flag parsing. +package opt // import "modernc.org/opt" + +import ( + "fmt" + "strings" +) + +type opt struct { + handler func(opt, arg string) error + name string + + arg bool // Enable argument, e.g. `-I foo` or `-I=foo` +} + +// A Set represents a set of defined options. +type Set struct { + cfg map[string]*opt + imm []*opt +} + +// NewSet returns a new, empty option set. +func NewSet() *Set { return &Set{cfg: map[string]*opt{}} } + +// Opt defines a simple option, e.g. `-f`. When the option is found during +// Parse, the handler is called with the value of the option, e.g. "-f". +func (p *Set) Opt(name string, handler func(opt string) error) { + p.cfg[name] = &opt{ + handler: func(opt, arg string) error { return handler(opt) }, + } +} + +// Arg defines a simple option with an argument, e.g. `-I foo` or `-I=foo`. +// Setting imm argument enables additionally `-Ifoo`. When the option is found +// during Parse, the handler is called with the values of the option and the +// argument, e.g. "-I" and "foo" for all of the variants. +func (p *Set) Arg(name string, imm bool, handler func(opt, arg string) error) { + switch { + case imm: + p.imm = append(p.imm, &opt{ + handler: handler, + name: name, + }) + default: + p.cfg[name] = &opt{ + arg: true, + handler: handler, + name: name, + } + } +} + +// Parse parses opts. Must be called after all options are defined. The handler +// is called for all items in opts that were not defined before using Opt or +// Arg. +// +// If any handler returns a non-nil error, Parse will stop. If the error is of +// type Skip, the error returned by Parse will contain all the unprocessed +// items of opts. +// +// The opts slice must not be modified by any handler while Parser is +// executing. +func (p *Set) Parse(opts []string, handler func(string) error) (err error) { + defer func() { + switch err.(type) { + case Skip: + err = Skip(opts) + } + }() + + for len(opts) != 0 { + opt := opts[0] + opts = opts[1:] + var arg string + out: + switch { + case strings.HasPrefix(opt, "-"): + name := opt[1:] + for _, cfg := range p.imm { + if strings.HasPrefix(name, cfg.name) { + switch { + case name == cfg.name: + if len(opts) == 0 { + return fmt.Errorf("missing argument of %s", opt) + } + + if err = cfg.handler(opt, opts[0]); err != nil { + return err + } + + opts = opts[1:] + default: + if err = cfg.handler(opt[:len(cfg.name)+1], name[len(cfg.name):]); err != nil { + return err + } + } + break out + } + } + + if n := strings.IndexByte(opt, '='); n > 0 { + arg = opt[n+1:] + name = opt[1:n] + opt = opt[:n] + } + switch cfg := p.cfg[name]; { + case cfg == nil: + if err = handler(opt); err != nil { + return err + } + default: + switch { + case cfg.arg: + switch { + case arg != "": + if err = cfg.handler(opt, arg); err != nil { + return err + } + default: + if len(opts) == 0 { + return fmt.Errorf("missing argument of %s", opt) + } + + if err = cfg.handler(opt, opts[0]); err != nil { + return err + } + + opts = opts[1:] + } + default: + if err = cfg.handler(opt, ""); err != nil { + return err + } + } + } + default: + if opt == "" { + break + } + + if err = handler(opt); err != nil { + return err + } + } + } + return nil +} + +// Skip is an error that contains all unprocessed items passed to Parse. +type Skip []string + +func (s Skip) Error() string { return fmt.Sprint([]string(s)) } diff --git a/vendor/modernc.org/opt/unconvert.sh b/vendor/modernc.org/opt/unconvert.sh new file mode 100644 index 00000000..af3b87f8 --- /dev/null +++ b/vendor/modernc.org/opt/unconvert.sh @@ -0,0 +1,4 @@ +until unconvert -fastmath . &> /dev/null +do + unconvert -fastmath -apply . &> /dev/null +done |