annotate Jint.Runtime/VM2/Machine.cs @ 2:4aed85a1f558

implemented simple vm2
author cin
date Fri, 25 Oct 2013 15:52:16 +0400
parents 033ebe7432d5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
cin
parents:
diff changeset
1 using System;
cin
parents:
diff changeset
2 using System.Collections.Generic;
cin
parents:
diff changeset
3
cin
parents:
diff changeset
4 namespace Jint.Runtime.VM2
cin
parents:
diff changeset
5 {
cin
parents:
diff changeset
6 public class Machine
cin
parents:
diff changeset
7 {
cin
parents:
diff changeset
8 RuntimeContext m_context;
2
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
9 //Stack<object[]> m_frames;
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
10 Box[] m_frame;
1
cin
parents:
diff changeset
11
cin
parents:
diff changeset
12
cin
parents:
diff changeset
13 public Machine ()
cin
parents:
diff changeset
14 {
2
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
15 m_context = new RuntimeContext ();
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
16 }
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
17
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
18 public void InitFrame(object[] values) {
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
19 m_frame = new Box[values.Length];
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
20 for(int i = 0; i< values.Length; i++)
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
21 m_frame[i] = m_context.PackValue(values[i]);
1
cin
parents:
diff changeset
22 }
cin
parents:
diff changeset
23
cin
parents:
diff changeset
24 public void Execute(Instruction[] instructions) {
cin
parents:
diff changeset
25 foreach (var op in instructions) {
2
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
26 m_frame [op.dest].value = m_frame [op.args [0]].impl [(int)op.code](MakeArgs(op.args));
1
cin
parents:
diff changeset
27 }
cin
parents:
diff changeset
28 }
cin
parents:
diff changeset
29
cin
parents:
diff changeset
30 private object[] MakeArgs(int[] regs) {
cin
parents:
diff changeset
31 object[] args = new object[regs.Length];
cin
parents:
diff changeset
32 for (int i=0; i< regs.Length; i++)
2
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
33 args[i] = m_frame [regs [i]].value;
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
34 return args;
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
35 }
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
36
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
37 public object Get(int index) {
4aed85a1f558 implemented simple vm2
cin
parents: 1
diff changeset
38 return m_frame [index];
1
cin
parents:
diff changeset
39 }
cin
parents:
diff changeset
40 }
cin
parents:
diff changeset
41 }
cin
parents:
diff changeset
42