Mercurial > pub > Jint1
diff Jint.Runtime/VM/Box.cs @ 0:e113095f1de0
initial commit, proof of concept
| author | cin | 
|---|---|
| date | Wed, 23 Oct 2013 13:24:57 +0400 | 
| parents | |
| children | aced2ae9957f | 
line wrap: on
 line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Jint.Runtime/VM/Box.cs Wed Oct 23 13:24:57 2013 +0400 @@ -0,0 +1,56 @@ +using System; + +namespace Jint.Runtime.VM +{ + public class Box<T>: BoxBase, IGetter<T>, ISetter<T> + { + T m_value; + IBinder<T> m_binder; + + public Box(T value,IBinder<T> binder) { + m_value = value; + m_binder = binder; + } + + public override bool IsReference { + get { + return true; + } + } + + public override Type HoldingType + { + get { return typeof(T); } + } + + #region IGetter implementation + + public T Get () + { + return m_value; + } + + #endregion + + #region ISetter implementation + + public void Set (T value) + { + m_value = value; + } + + #endregion + + public override T2 Convert<T2> () + { + if (m_binder == null) + throw new ArgumentNullException (); + return m_binder.Convert<T2> (m_value); + } + + public override void Invoke(IBinaryOperation op, BoxBase arg2,Frame frame) { + op.Invoke (m_value, ((IGetter<T>)arg2).Get (), m_binder, frame); + } + } +} +
