| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package evaluator
- import (
- "github/runnignwater/monkey/ast"
- "github/runnignwater/monkey/object"
- )
- var (
- NULL = &object.Null{}
- TRUE = &object.Boolean{Value: true}
- FALSE = &object.Boolean{Value: false}
- )
- func Eval(node ast.Node) object.Object {
- switch node := node.(type) {
- // Statements
- case *ast.Program:
- return evalStatements(node.Statements)
- case *ast.ExpressionStatement:
- return Eval(node.Expression)
- // Expression
- case *ast.IntegerLiteral:
- return &object.Integer{Value: node.Value}
- case *ast.Boolean:
- return nativeBooleanObject(node.Value)
- }
- return nil
- }
- func evalStatements(stmts []ast.Statement) object.Object {
- var result object.Object
- for _, statement := range stmts {
- result = Eval(statement)
- }
- return result
- }
- func nativeBooleanObject(input bool) *object.Boolean {
- if input {
- return TRUE
- } else {
- return FALSE
- }
- }
|