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 }