comparison Jint.Runtime/VM/Frame.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 Frame
6 {
7 BoxBase[] m_data;
8 RuntimeContext m_runtimeContext;
9
10 public Frame (int size, RuntimeContext runtime)
11 {
12 if (size < 0)
13 throw new ArgumentOutOfRangeException ("size");
14 if (runtime == null)
15 throw new ArgumentNullException ("runtime");
16
17 m_data = new BoxBase[size];
18 m_runtimeContext = runtime;
19 }
20
21 public RuntimeContext Runtime {
22 get { return m_runtimeContext; }
23 }
24
25 public T Get<T> (int index)
26 {
27 var bbox = m_data [index];
28
29 if (bbox == null)
30 return default(T);
31
32 var box = bbox as IGetter<T>;
33 if (box != null)
34 return box.Get();
35 else
36 return bbox.Convert<T>();
37 }
38
39 public void Set<T> (int index, T value)
40 {
41 var bbox = m_data [index];
42 var box = bbox as ISetter<T>;
43 if (box != null)
44 box.Set (value);
45 else
46 m_data [index] = m_runtimeContext.BoxValue(value);
47 }
48
49 public BoxBase GetBox(int index) {
50 return m_data[index];
51 }
52
53 public void SetBox(int index, BoxBase box) {
54 m_data [index] = box;
55 }
56
57 }
58 }
59