diff Jint.Runtime/VM/Scope.cs @ 6:a6329b092499

Added scopes, function builder
author cin
date Wed, 30 Oct 2013 17:38:35 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Jint.Runtime/VM/Scope.cs	Wed Oct 30 17:38:35 2013 +0400
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+
+namespace Jint.Runtime.VM
+{
+	class Scope
+	{
+		Frame m_frame;
+		Dictionary<string,int> m_vars;
+		Scope m_parent;
+
+		public const int ThisRegister = 0;
+		public const int ScopeRegister = 1;
+		public const int FirstVarRegsiter = 2;
+
+		public Scope (IDictionary<string,int> vars, Frame frame, Scope parent)
+		{
+			if (vars == null)
+				throw new ArgumentNullException ("vars");
+			if (frame == null)
+				throw new ArgumentNullException ("frame");
+
+			m_vars = new Dictionary<string, int> (vars);
+			m_frame = frame;
+			m_parent = parent;
+		}
+
+		public IReference Resolve(string name) {
+			if (String.IsNullOrEmpty (name))
+				throw new ArgumentException ("The specified variable name is invalid");
+
+			int index; 
+			if (m_vars.TryGetValue (name, out index))
+				return new ScopeReference (this, index);
+
+			if (m_parent != null)
+				return m_parent.Resolve (name);
+			else
+				throw new KeyNotFoundException (String.Format("The specified variable '{0}' isn't found",name));
+		}
+	}
+}
+