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); + } + } +} +