Mercurial > pub > Jint1
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e113095f1de0 |
---|---|
1 using System; | |
2 | |
3 namespace Jint.Runtime.VM | |
4 { | |
5 public class Box<T>: BoxBase, IGetter<T>, ISetter<T> | |
6 { | |
7 T m_value; | |
8 IBinder<T> m_binder; | |
9 | |
10 public Box(T value,IBinder<T> binder) { | |
11 m_value = value; | |
12 m_binder = binder; | |
13 } | |
14 | |
15 public override bool IsReference { | |
16 get { | |
17 return true; | |
18 } | |
19 } | |
20 | |
21 public override Type HoldingType | |
22 { | |
23 get { return typeof(T); } | |
24 } | |
25 | |
26 #region IGetter implementation | |
27 | |
28 public T Get () | |
29 { | |
30 return m_value; | |
31 } | |
32 | |
33 #endregion | |
34 | |
35 #region ISetter implementation | |
36 | |
37 public void Set (T value) | |
38 { | |
39 m_value = value; | |
40 } | |
41 | |
42 #endregion | |
43 | |
44 public override T2 Convert<T2> () | |
45 { | |
46 if (m_binder == null) | |
47 throw new ArgumentNullException (); | |
48 return m_binder.Convert<T2> (m_value); | |
49 } | |
50 | |
51 public override void Invoke(IBinaryOperation op, BoxBase arg2,Frame frame) { | |
52 op.Invoke (m_value, ((IGetter<T>)arg2).Get (), m_binder, frame); | |
53 } | |
54 } | |
55 } | |
56 |