1
1
mirror of https://github.com/kanaka/mal.git synced 2024-10-27 14:52:16 +03:00
mal/impls/vbs/env.vbs

63 lines
1.2 KiB
Plaintext

Option Explicit
Function NewEnv(objOuter)
Dim varRet
Set varRet = New Environment
Set varRet.Self = varRet
Set varRet.Outer = objOuter
Set NewEnv = varRet
End Function
Class Environment
Private objOuter, objSelf
Private objBinds
Private Sub Class_Initialize()
Set objBinds = CreateObject("Scripting.Dictionary")
Set objOuter = Nothing
Set objSelf = Nothing
End Sub
Public Property Set Outer(objEnv)
Set objOuter = objEnv
End Property
Public Property Get Outer()
Set Outer = objOuter
End Property
Public Property Set Self(objEnv)
Set objSelf = objEnv
End Property
Public Sub Add(varKey, varValue)
Set objBinds.Item(varKey.Value) = varValue
End Sub
Public Function Find(varKey)
Dim varRet
If objBinds.Exists(varKey.Value) Then
Set varRet = objSelf
Else
If TypeName(objOuter) <> "Nothing" Then
Set varRet = objOuter.Find(varKey)
Else
Err.Raise vbObjectError, _
"Environment", "'" + varKey.Value + "' not found"
End If
End If
Set Find = varRet
End Function
Public Function [Get](varKey)
Dim objEnv, varRet
Set objEnv = Find(varKey)
If objEnv Is objSelf Then
Set varRet = objBinds(varKey.Value)
Else
Set varRet = objEnv.Get(varKey)
End If
Set [Get] = varRet
End Function
End Class