package eval
import (
)
func ( *Evaler) ( *parse.Compound) (string, bool) {
return .PurelyEvalPartialCompound(, -1)
}
func ( *Evaler) ( *parse.Compound, int) (string, bool) {
:= false
:= ""
for , := range .Indexings {
if len(.Indicies) > 0 {
return "", false
}
if >= 0 && .To > {
break
}
switch .Head.Type {
case parse.Tilde:
= true
case parse.Bareword, parse.SingleQuoted, parse.DoubleQuoted:
+= .Head.Value
case parse.Variable:
if == nil {
return "", false
}
:= .PurelyEvalPrimary(.Head)
if , := .(string); {
+=
} else {
return "", false
}
default:
return "", false
}
}
if {
:= strings.Index(, "/")
if == -1 {
= len()
}
:= [:]
, := fsutil.GetHome()
if != nil {
return "", false
}
= + [:]
}
return , true
}
func ( *Evaler) ( *parse.Primary) interface{} {
switch .Type {
case parse.Bareword, parse.SingleQuoted, parse.DoubleQuoted:
return .Value
case parse.Variable:
, := SplitSigil(.Value)
if != "" {
return nil
}
:= &Frame{Evaler: , local: .Global(), up: new(Ns)}
:= resolveVarRef(, , nil)
if != nil {
:= deref(, )
if == nil {
return nil
}
return .Get()
}
}
return nil
}