From de5566b3ecf7d8ff30e13a1ca760b4c62db22110 Mon Sep 17 00:00:00 2001 From: Aidan Date: Mon, 29 Jun 2020 21:21:30 -0700 Subject: [PATCH] add info func --- stdlib/call.go | 9 ++++++++- stdlib/stdlib.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/stdlib/call.go b/stdlib/call.go index a07b057..4359503 100644 --- a/stdlib/call.go +++ b/stdlib/call.go @@ -31,7 +31,14 @@ import ( var bgProcs = make([]*exec.Cmd, 0) var LastExitCode int -var sigs = []os.Signal{os.Interrupt, syscall.SIGTERM, syscall.SIGTSTP, syscall.SIGTTIN, syscall.SIGTTOU, syscall.SIGCONT} +var sigs = []os.Signal{ + os.Interrupt, + syscall.SIGTERM, + syscall.SIGTSTP, + syscall.SIGTTIN, + syscall.SIGTTOU, + syscall.SIGCONT, +} func call(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token { diff --git a/stdlib/stdlib.go b/stdlib/stdlib.go index 31b3db8..0bd2b40 100644 --- a/stdlib/stdlib.go +++ b/stdlib/stdlib.go @@ -19,6 +19,7 @@ package stdlib import ( "os" + "fmt" "gitlab.com/whom/shs/ast" ) @@ -196,6 +197,12 @@ func GenFuncTable() ast.FuncTable { Args: 0, }, + "info": &ast.Function{ + Function: sh_info, + Name: "Shell Info", + TimesCalled: 0, + Args: 1, + }, } return stdlib @@ -205,3 +212,33 @@ func exit_shell(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token { os.Exit(0) return nil // I hope execution doesnt get here } + +func sh_info(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token { + switch in.Tag { + case ast.BOOL: + fmt.Printf("BOOL LITERAL\nValue: %s\n", in.Value()) + case ast.STRING: + fmt.Printf("STRING LITERAL \nValue: %s\n", in.Value()) + case ast.NUMBER: + fmt.Printf("NUMBER LITERAL \nValue: %s\n", in.Value()) + case ast.LIST: + fmt.Printf("LIST \nString Value: %s, AST:\n", in.String()) + ast.PrintSExprsIndividually(in) + case ast.SYMBOL: + repr := ast.GetVar(in.Value(), vt) + if repr != nil { + fmt.Printf("VARIABLE\nTYPE: %s\nVALUE: %s\n", ast.GetTagAsStr(repr.Tag), repr.Value()) + break + } + + funct := ast.GetFunction(in.Value(), ft) + if funct != nil { + fmt.Printf("FUNCTION\nNAME: %s\nTIMES CALLED: %s\nNUM ARGS: %d\n", funct.Name, funct.TimesCalled, funct.Args) + break + } + + fmt.Printf("UNKNOWN SYMBOL\n") + } + + return nil +}