stdlib Call, fg, bg, $, and cd functions. wow
This commit is contained in:
parent
94c9b2beba
commit
af184d9176
6 changed files with 272 additions and 33 deletions
25
ast/eval.go
25
ast/eval.go
|
|
@ -24,8 +24,6 @@ func (t *Token) Eval(funcs FuncTable, vars VarTable) (*Token, bool) {
|
|||
return nil, false
|
||||
}
|
||||
|
||||
eligibleForSystemCall := true
|
||||
|
||||
var reduce func(*Token) *Token
|
||||
reduce = func(t_ *Token) *Token {
|
||||
var unwrap bool
|
||||
|
|
@ -39,21 +37,11 @@ func (t *Token) Eval(funcs FuncTable, vars VarTable) (*Token, bool) {
|
|||
maybeToken := GetVar(t_.Inner.(string), vars)
|
||||
if maybeToken != nil {
|
||||
tok, _ := maybeToken.Eval(funcs, vars)
|
||||
// Should already be unwrapped
|
||||
//if unwrap {
|
||||
// tok = tok.Inner.(*Token)
|
||||
//}
|
||||
|
||||
if tok.Tag == LIST {
|
||||
eligibleForSystemCall = false
|
||||
}
|
||||
|
||||
tok.Next = t_.Next
|
||||
return tok
|
||||
}
|
||||
|
||||
case LIST:
|
||||
eligibleForSystemCall = false
|
||||
t_.Inner, unwrap = t_.Inner.(*Token).Eval(funcs, vars)
|
||||
if unwrap {
|
||||
next := t_.Next
|
||||
|
|
@ -84,15 +72,10 @@ func (t *Token) Eval(funcs FuncTable, vars VarTable) (*Token, bool) {
|
|||
if ret.Tag == SYMBOL {
|
||||
f := GetFunction(ret.Inner.(string), funcs)
|
||||
if f == nil {
|
||||
if !eligibleForSystemCall {
|
||||
log.Log(log.DEBUG,
|
||||
"could not find definition for symbol " + ret.Inner.(string),
|
||||
"eval")
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// TODO: hook into stdlib exec
|
||||
return nil, false // TODO: Thats gotta change
|
||||
log.Log(log.DEBUG,
|
||||
"could not find definition for symbol " + ret.Inner.(string),
|
||||
"eval")
|
||||
return nil, false
|
||||
}
|
||||
|
||||
return (*f).CallFunction(ret.Next, vars, funcs), true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue