Skip to content

Commit

Permalink
Merge pull request #5 from SealNTibbers/error_handling
Browse files Browse the repository at this point in the history
Added simple error handling(removed panics)
  • Loading branch information
r2b89 authored Nov 22, 2023
2 parents 1463e72 + 7c90b19 commit b723373
Show file tree
Hide file tree
Showing 8 changed files with 375 additions and 260 deletions.
19 changes: 15 additions & 4 deletions evaluator/smalltalkEvaluator.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ func NewTestEvaluator() *Evaluator {

func TestEval(codeString string) treeNodes.SmalltalkObjectInterface {
evaluator := NewTestEvaluator()
programNode := parser.InitializeParserFor(codeString)
programNode, _ := parser.InitializeParserFor(codeString)
return evaluator.EvaluateProgram(programNode)
}

func TestEvalWithScope(codeString string, scope *treeNodes.Scope) treeNodes.SmalltalkObjectInterface {
evaluator := NewEvaluatorWithGlobalScope(scope)
programNode := parser.InitializeParserFor(codeString)
programNode, _ := parser.InitializeParserFor(codeString)
return evaluator.EvaluateProgram(programNode)
}

Expand Down Expand Up @@ -62,7 +62,11 @@ func (e *Evaluator) GetGlobalScope() *treeNodes.Scope {
func (e *Evaluator) RunProgram(programString string) treeNodes.SmalltalkObjectInterface {
_, ok := e.programCache[programString]
if !ok {
e.programCache[programString] = parser.InitializeParserFor(programString)
initializedParser, err := parser.InitializeParserFor(programString)
if err != nil {
return treeNodes.NewSmalltalkString(err.Error())
}
e.programCache[programString] = initializedParser
}
evaluatorProgram := e.programCache[programString]
return e.EvaluateProgram(evaluatorProgram)
Expand Down Expand Up @@ -109,6 +113,9 @@ func (e *Evaluator) EvaluateToBool(programString string) bool {

func (e *Evaluator) EvaluateToInterface(programString string) interface{} {
resultObject := e.RunProgram(programString)
if resultObject == nil {
return nil
}
switch resultObject.TypeOf() {
case treeNodes.NUMBER_OBJ:
return resultObject.(*treeNodes.SmalltalkNumber).GetValue()
Expand All @@ -117,7 +124,11 @@ func (e *Evaluator) EvaluateToInterface(programString string) interface{} {
case treeNodes.BOOLEAN_OBJ:
return resultObject.(*treeNodes.SmalltalkBoolean).GetValue()
case treeNodes.ARRAY_OBJ:
return resultObject.(*treeNodes.SmalltalkArray).GetValue()
array, err := resultObject.(*treeNodes.SmalltalkArray).GetValue()
if err != nil {
return nil
}
return array
default:
return nil
}
Expand Down
Loading

0 comments on commit b723373

Please sign in to comment.