diff --git a/impls/vbs/env.vbs b/impls/vbs/env.vbs index 67e539dd0c..1141691da3 100644 --- a/impls/vbs/env.vbs +++ b/impls/vbs/env.vbs @@ -3,64 +3,41 @@ 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 objOuter 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) = varValue End Sub - Public Function Find(varKey) - Dim varRet - If objBinds.Exists(varKey) Then - Set varRet = objSelf - Else - If TypeName(objOuter) <> "Nothing" Then - Set varRet = objOuter.Find(varKey) - Else + Public Function [Get](varKey) + Dim objEnv, varRet + Set objEnv = Me + Do + If objEnv.objBinds.Exists(varKey) Then + Set varRet = objEnv.objBinds(varKey) + Exit Do + End If + objEnv = objEnv.objOuter + If TypeName(objEnv) = "Nothing" Then Set varRet = Nothing + Exit Do End If - End If + Loop - 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) - Else - If TypeName(objEnv) <> "Nothing" Then - Set varRet = objEnv.Get(varKey) - Else - Set varRet = Nothing - End If - End If - Set [Get] = varRet End Function End Class \ No newline at end of file