github.com/hoop33/elvish@v0.0.0-20160801152013-6d25485beab4/eval/util.go (about)

     1  package eval
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strings"
     7  
     8  	"github.com/elves/elvish/parse"
     9  	"github.com/elves/elvish/util"
    10  )
    11  
    12  func throw(e error) {
    13  	util.Throw(e)
    14  }
    15  
    16  func throwf(format string, args ...interface{}) {
    17  	util.Throw(fmt.Errorf(format, args...))
    18  }
    19  
    20  func maybeThrow(err error) {
    21  	if err != nil {
    22  		util.Throw(err)
    23  	}
    24  }
    25  
    26  func mustGetHome(uname string) string {
    27  	dir, err := util.GetHome(uname)
    28  	if err != nil {
    29  		throw(err)
    30  	}
    31  	return dir
    32  }
    33  
    34  // ParseVariable parses a variable name.
    35  func ParseVariable(qname string) (splice bool, ns string, name string) {
    36  	if strings.HasPrefix(qname, "@") {
    37  		splice = true
    38  		qname = qname[1:]
    39  		if qname == "" {
    40  			qname = "args"
    41  		}
    42  	}
    43  
    44  	i := strings.IndexRune(qname, ':')
    45  	if i == -1 {
    46  		return splice, "", qname
    47  	}
    48  	return splice, qname[:i], qname[i+1:]
    49  }
    50  
    51  func MakeVariableName(splice bool, ns string, name string) string {
    52  	prefix := ""
    53  	if splice {
    54  		prefix = "@"
    55  	}
    56  	if ns != "" {
    57  		prefix += ns + ":"
    58  	}
    59  	return prefix + name
    60  }
    61  
    62  func makeFlag(m parse.RedirMode) int {
    63  	switch m {
    64  	case parse.Read:
    65  		return os.O_RDONLY
    66  	case parse.Write:
    67  		return os.O_WRONLY | os.O_CREATE | os.O_TRUNC
    68  	case parse.ReadWrite:
    69  		return os.O_RDWR | os.O_CREATE
    70  	case parse.Append:
    71  		return os.O_WRONLY | os.O_CREATE | os.O_APPEND
    72  	default:
    73  		// XXX should report parser bug
    74  		panic("bad RedirMode; parser bug")
    75  	}
    76  }