comparison Jint.Runtime/VM/OpCodes/BinaryOperation.cs @ 0:e113095f1de0

initial commit, proof of concept
author cin
date Wed, 23 Oct 2013 13:24:57 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:e113095f1de0
1 using System;
2
3 namespace Jint.Runtime.VM
4 {
5 public abstract class BinaryOperation: IBinaryOperation
6 {
7 protected int m_arg1;
8 protected int m_arg2;
9 protected int m_res;
10
11 protected BinaryOperation(int arg1, int arg2, int res) {
12 m_arg1 = arg1;
13 m_arg2 = arg2;
14 m_res = res;
15 }
16
17 public virtual void Fallback(BoxBase arg1, BoxBase arg2, Frame frame) {
18 throw new InvalidOperationException ("Unable to perform a binary operation on the specified arguments");
19 }
20
21 #region IBinaryOperation implementation
22
23 public abstract void Invoke<T> (T arg1, T arg2, IBinder<T> binder, Frame frame);
24
25 #endregion
26
27 #region IOperation implementation
28
29 public void Invoke (Frame frame)
30 {
31 var box1 = frame.GetBox (m_arg1);
32 var box2 = frame.GetBox (m_arg2);
33
34 if (box1 != null && box2 != null && box1.HoldingType == box2.HoldingType) {
35 box1.Invoke (this, box2, frame);
36 } else {
37 Fallback (box1, box2, frame);
38 }
39 }
40
41 #endregion
42 }
43 }
44