comparison Jint.Runtime/VM/Frame.cs @ 5:cb13da6e3349

simple loop test
author cin
date Mon, 28 Oct 2013 00:49:15 +0400
parents 1ae5b10f7a10
children a6329b092499
comparison
equal deleted inserted replaced
4:1ae5b10f7a10 5:cb13da6e3349
15 throw new ArgumentOutOfRangeException("size"); 15 throw new ArgumentOutOfRangeException("size");
16 m_runtime = runtime; 16 m_runtime = runtime;
17 m_registers = new AbstractBox[size]; 17 m_registers = new AbstractBox[size];
18 } 18 }
19 19
20 /// <summary>
21 /// Return register at the specified index.
22 /// </summary>
23 /// <param name="index">The index of the register</param>
24 /// <returns>The register.</returns>
20 public AbstractBox this[int index] { 25 public AbstractBox this[int index] {
21 get { 26 get {
22 return m_registers[index]; 27 return m_registers[index];
23 } 28 }
24 set { 29 set {
25 m_registers[index] = value; 30 m_registers[index] = value;
26 } 31 }
27 } 32 }
28 33
29 /// <summary> 34 /// <summary>
30 /// Extracts value stored in the registry specified by the index. 35 /// Extracts value stored in the register specified by the index.
31 /// </summary> 36 /// </summary>
32 /// <remarks>This method doesn't do any cast, if the specified type isn't the same as the type of the stored value a type cast exception will occur.</remarks> 37 /// <remarks>This method doesn't do any cast, if the specified type isn't the same as the type of the stored value a type cast exception will occur.</remarks>
33 /// <typeparam name="T">The type of the value stored in the registry.</typeparam> 38 /// <typeparam name="T">The type of the value stored in the register.</typeparam>
34 /// <param name="index">The index of the registry.</param> 39 /// <param name="index">The index of the register.</param>
35 /// <returns>The value stored in the registry.</returns> 40 /// <returns>The value stored in the register.</returns>
36 public T GetValue<T>(int index) { 41 public T GetValue<T>(int index) {
37 return ((Box<T>)m_registers[index]).holdingValue; 42 return ((Box<T>)m_registers[index]).holdingValue;
38 } 43 }
39 44
40 /// <summary> 45 /// <summary>
41 /// Stores a new value in the register specified by the index. 46 /// Stores a new value in the register specified by the index.
42 /// </summary> 47 /// </summary>
43 /// <remarks> 48 /// <remarks>
44 /// If the previous value has the same type as the value being stored in the registry, 49 /// If the previous value has the same type as the value being stored in the register,
45 /// the new value will replace the old one, otherwise the registry will be reallocated to 50 /// the new value will replace the old one, otherwise the register will be reallocated to
46 /// store the new value. 51 /// store the new value.
47 /// </remarks> 52 /// </remarks>
48 /// <typeparam name="T">The type of the value being stored</typeparam> 53 /// <typeparam name="T">The type of the value being stored</typeparam>
49 /// <param name="index">The index of the registry where the value will be stored</param> 54 /// <param name="index">The index of the register where the value will be stored</param>
50 /// <param name="value">The value to be stored in the registry</param> 55 /// <param name="value">The value to be stored in the register</param>
51 public void SetValue<T>(int index, T value) { 56 public void SetValue<T>(int index, T value) {
52 var reg = m_registers[index] as Box<T>; 57 var reg = m_registers[index] as Box<T>;
53 if (reg == null || reg.holdingType != typeof(T)) 58 if (reg == null || reg.holdingType != typeof(T))
54 m_registers[index] = m_runtime.BoxValue(value); 59 m_registers[index] = m_runtime.BoxValue(value);
55 else 60 else
56 reg.holdingValue = value; 61 reg.holdingValue = value;
57 } 62 }
63
64 public T GetConverted<T>(int index) {
65 var reg = m_registers[index];
66
67 if (reg.holdingType == typeof(T))
68 return ((Box<T>)reg).holdingValue;
69 else
70 return reg.Convert<T>();
71 }
58 } 72 }
59 } 73 }