function calls no longer return number tokens (cleaner output), added ? command to get return code

This commit is contained in:
Aidan 2020-06-28 14:20:17 -07:00
parent ffef8a96e7
commit f1cc9b7f8c
No known key found for this signature in database
GPG key ID: 327711E983899316
2 changed files with 22 additions and 8 deletions

View file

@ -29,6 +29,7 @@ import (
)
var bgProcs = make([]*exec.Cmd, 0)
var LastExitCode int
func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
if in == nil {
@ -60,7 +61,6 @@ func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
exit := 0
signalChan := make(chan os.Signal, 2)
signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
@ -74,13 +74,13 @@ func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
signal.Reset(os.Interrupt, syscall.SIGTERM)
if err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
exit = exitError.ExitCode()
LastExitCode = exitError.ExitCode()
} else {
log.Log(log.ERR, "Execution step returned unparsable error: " + err.Error(), "call")
}
}
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%d", exit)}
return nil
}
func bgcall(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
@ -127,7 +127,6 @@ func fg(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
exit := 0
signalChan := make(chan os.Signal, 2)
signal.Notify(signalChan, os.Interrupt, syscall.SIGTERM)
@ -141,13 +140,13 @@ func fg(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
signal.Reset(os.Interrupt, syscall.SIGTERM)
if err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
exit = exitError.ExitCode()
LastExitCode = exitError.ExitCode()
} else {
log.Log(log.ERR, "Execution step returned unparsable error: " + err.Error(), "call")
log.Log(log.ERR, "Execution step returned error: " + err.Error(), "call")
}
}
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%d", exit)}
return nil
}
func read_cmd(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
@ -193,9 +192,17 @@ func read_cmd(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
close(signalChan)
signal.Reset(os.Interrupt, syscall.SIGTERM)
if err != nil {
log.Log(log.ERR, err.Error(), "$")
if exitError, ok := err.(*exec.ExitError); ok {
LastExitCode = exitError.ExitCode()
} else {
log.Log(log.ERR, "Execution step returned error: " + err.Error(), "$")
}
}
return &ast.Token{Tag: ast.STRING, Inner: out.String()}
}
func get_exit(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token {
return &ast.Token{Tag: ast.NUMBER, Inner: fmt.Sprintf("%d", LastExitCode)}
}

View file

@ -122,6 +122,13 @@ func GenFuncTable() ast.FuncTable {
TimesCalled: 0,
Args: 0,
},
"?": &ast.Function{
Function: get_exit,
Name:"get exit code",
TimesCalled: 0,
Args: 0,
},
}
return stdlib