Move implementations into impls/ dir
[jackhill/mal.git] / vb / step2_eval.vb
diff --git a/vb/step2_eval.vb b/vb/step2_eval.vb
deleted file mode 100644 (file)
index 70bc5e3..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-Imports System
-Imports System.IO
-Imports System.Collections.Generic
-Imports Mal
-Imports MalVal = Mal.types.MalVal
-Imports MalInt = Mal.types.MalInt
-Imports MalSymbol = Mal.types.MalSymbol
-Imports MalList = Mal.types.MalList
-Imports MalVector = Mal.types.MalVector
-Imports MalHashMap = Mal.types.MalHashMap
-Imports MalFunc = Mal.types.MalFunc
-
-Namespace Mal
-    class step2_eval
-        ' read
-        Shared Function READ(str As String) As MalVal
-            Return reader.read_str(str)
-        End Function
-
-        ' eval
-        Shared Function eval_ast(ast As MalVal, env As Dictionary(Of String, MalVal)) As MalVal
-            If TypeOf ast Is MalSymbol Then
-                Dim sym As MalSymbol = DirectCast(ast, MalSymbol)
-                return env.Item(sym.getName())
-            Else If TypeOf ast Is MalList Then
-                Dim old_lst As MalList = DirectCast(ast, MalList)
-                Dim new_lst As MalList
-                If ast.list_Q() Then
-                    new_lst = New MalList
-                Else
-                    new_lst = DirectCast(New MalVector, MalList)
-                End If
-                Dim mv As MalVal
-                For Each mv in old_lst.getValue()
-                    new_lst.conj_BANG(EVAL(mv, env))
-                Next
-                return new_lst
-            Else If TypeOf ast Is MalHashMap Then
-                Dim new_dict As New Dictionary(Of String, MalVal)
-                Dim entry As KeyValuePair(Of String, MalVal)
-                For Each entry in DirectCast(ast,MalHashMap).getValue()
-                    new_dict.Add(entry.Key, EVAL(DirectCast(entry.Value,MalVal), env))
-                Next
-                return New MalHashMap(new_dict)
-            Else
-                return ast
-            End If
-            return ast
-        End Function
-
-        Shared Function EVAL(orig_ast As MalVal, env As Dictionary(Of String, MalVal)) As MalVal
-            'Console.WriteLine("EVAL: {0}", printer._pr_str(orig_ast, true))
-            If not orig_ast.list_Q() Then
-                return eval_ast(orig_ast, env)
-            End If
-
-            ' apply list
-            Dim ast As MalList = DirectCast(orig_ast, MalList)
-            If ast.size() = 0  Then
-                return ast
-            End If
-            Dim a0 As MalVal = ast(0)
-            Dim el As MalList = DirectCast(eval_ast(ast, env), MalList)
-            Dim f As MalFunc = DirectCast(el(0), MalFunc)
-            Return f.apply(el.rest())
-        End Function
-        
-        ' print
-        Shared Function PRINT(exp As MalVal) As String
-            return printer._pr_str(exp, TRUE)
-        End Function
-
-        ' repl
-        Shared repl_env As Dictionary(Of String, MalVal)
-
-        Shared Function REP(str As String) As String
-            Return PRINT(EVAL(READ(str), repl_env))
-        End Function
-
-        Shared Function add(a As MalList) As MalVal
-            Return DirectCast(a.Item(0),MalInt) + DirectCast(a.Item(1),MalInt)
-        End Function
-
-        Shared Function minus(a As MalList) As MalVal
-            Return DirectCast(a.Item(0),MalInt) - DirectCast(a.Item(1),MalInt)
-        End Function
-
-        Shared Function mult(a As MalList) As MalVal
-            Return DirectCast(a.Item(0),MalInt) * DirectCast(a.Item(1),MalInt)
-        End Function
-
-        Shared Function div(a As MalList) As MalVal
-            Return DirectCast(a.Item(0),MalInt) / DirectCast(a.Item(1),MalInt)
-        End Function
-
-        Shared Function Main As Integer
-            Dim args As String() = Environment.GetCommandLineArgs()
-
-            repl_env = New Dictionary(Of String, MalVal)
-            repl_env.Add("+", New MalFunc(AddressOf add))
-            repl_env.Add("-", New MalFunc(AddressOf minus))
-            repl_env.Add("*", New MalFunc(AddressOf mult))
-            repl_env.Add("/", New MalFunc(AddressOf div))
-
-
-            If args.Length > 1 AndAlso args(1) = "--raw" Then
-                Mal.readline.SetMode(Mal.readline.Modes.Raw)
-            End If
-
-            ' repl loop
-            Dim line As String
-            Do
-                Try
-                    line = Mal.readline.Readline("user> ")
-                    If line is Nothing Then
-                        Exit Do
-                    End If
-                    If line = "" Then
-                        Continue Do
-                    End If
-                Catch e As IOException
-                    Console.WriteLine("IOException: " & e.Message)
-                End Try
-                Try
-                    Console.WriteLine(REP(line))
-                Catch e as Exception
-                    Console.WriteLine("Error: " & e.Message)
-                    Console.WriteLine(e.StackTrace)
-                    Continue Do
-                End Try
-            Loop While True
-        End function
-    end class
-End Namespace