You've already forked linux-packaging-mono
Imported Upstream version 5.10.0.47
Former-commit-id: d0813289fa2d35e1f8ed77530acb4fb1df441bc0
This commit is contained in:
parent
88ff76fe28
commit
e46a49ecf1
@@ -171,7 +171,7 @@ namespace System.Linq.Expressions.Compiler
|
||||
|
||||
// Optimization: inline code for literal lambda's directly
|
||||
//
|
||||
// This is worth it because otherwise we end up with a extra call
|
||||
// This is worth it because otherwise we end up with an extra call
|
||||
// to DynamicMethod.CreateDelegate, which is expensive.
|
||||
//
|
||||
if (node.LambdaOperand != null)
|
||||
|
||||
@@ -292,7 +292,7 @@ namespace System.Linq.Expressions.Compiler
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Boolean value indicating whether the parent expression shoud be
|
||||
/// Gets a Boolean value indicating whether the parent expression should be
|
||||
/// rewritten by using <see cref="Finish"/>.
|
||||
/// </summary>
|
||||
internal bool Rewrite => _action != RewriteAction.None;
|
||||
|
||||
@@ -334,7 +334,7 @@ namespace System.Linq.Expressions
|
||||
/// </summary>
|
||||
PostDecrementAssign,
|
||||
/// <summary>
|
||||
/// A node that represents a exact type test.
|
||||
/// A node that represents an exact type test.
|
||||
/// </summary>
|
||||
TypeEqual,
|
||||
/// <summary>
|
||||
|
||||
@@ -21,17 +21,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((short)((short)left + (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((short)((short)l + (short)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -40,17 +39,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject(unchecked((int)left + (int)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject(unchecked((int)l + (int)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -59,17 +57,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((long)left + (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((long)l + (long)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -78,17 +75,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ushort)((ushort)left + (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((ushort)((ushort)l + (ushort)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -97,17 +93,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((uint)left + (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((uint)l + (uint)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -116,17 +111,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ulong)left + (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((ulong)l + (ulong)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -135,17 +129,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((float)left + (float)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (float)l + (float)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -154,17 +147,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((double)left + (double)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (double)l + (double)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -202,17 +194,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((short)((short)left + (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((short)((short)l + (short)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -221,17 +212,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject(checked((int)left + (int)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject(checked((int)l + (int)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -240,17 +230,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((long)left + (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((long)l + (long)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -259,17 +248,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((ushort)((ushort)left + (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((ushort)((ushort)l + (ushort)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -278,17 +266,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((uint)left + (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((uint)l + (uint)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -297,17 +284,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((ulong)left + (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((ulong)l + (ulong)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,17 +21,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((short)((short)left / (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((short)((short)l / (short)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -40,17 +39,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject((int)left / (int)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject((int)l / (int)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -59,17 +57,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((long)left / (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (long)l / (long)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -78,17 +75,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ushort)((ushort)left / (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (ushort)((ushort)l / (ushort)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -97,17 +93,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((uint)left / (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (uint)l / (uint)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -116,17 +111,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((ulong)left / (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (ulong)l / (ulong)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -135,17 +129,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((float)left / (float)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (float)l / (float)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -154,17 +147,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((double)left / (double)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (double)l / (double)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,17 +21,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((short)((short)left % (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (short)((short)l % (short)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -40,17 +39,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject((int)left % (int)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject((int)l % (int)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -59,17 +57,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((long)left % (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (long)l % (long)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -78,17 +75,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ushort)((ushort)left % (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (ushort)((ushort)l % (ushort)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -97,17 +93,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((uint)left % (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (uint)l % (uint)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -116,17 +111,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((ulong)left % (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (ulong)l % (ulong)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -135,17 +129,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((float)left % (float)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (float)l % (float)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -154,17 +147,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((double)left % (double)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (double)l % (double)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,17 +21,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((short)((short)left * (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((short)((short)l * (short)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -40,17 +39,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject(unchecked((int)left * (int)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject(unchecked((int)l * (int)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -59,17 +57,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((long)left * (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((long)l * (long)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -78,17 +75,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ushort)((ushort)left * (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((ushort)((ushort)l * (ushort)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -97,17 +93,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((uint)left * (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((uint)l * (uint)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -116,17 +111,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ulong)left * (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((ulong)l * (ulong)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -135,17 +129,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((float)left * (float)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (float)l * (float)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -154,17 +147,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((double)left * (double)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (double)l * (double)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -203,17 +195,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((short)((short)left * (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((short)((short)l * (short)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -222,17 +213,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject(checked((int)left * (int)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject(checked((int)l * (int)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -241,17 +231,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((long)left * (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((long)l * (long)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -260,17 +249,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((ushort)((ushort)left * (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((ushort)((ushort)l * (ushort)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -279,17 +267,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((uint)left * (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((uint)l * (uint)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -298,17 +285,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((ulong)left * (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((ulong)l * (ulong)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,17 +21,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((short)((short)left - (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((short)((short)l - (short)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -40,17 +39,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject(unchecked((int)left - (int)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject(unchecked((int)l - (int)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -59,17 +57,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((long)left - (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((long)l - (long)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -78,17 +75,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ushort)((ushort)left - (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((ushort)((ushort)l - (ushort)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -97,17 +93,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((uint)left - (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((uint)l - (uint)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -116,17 +111,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)unchecked((ulong)left - (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = unchecked((ulong)l - (ulong)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -135,17 +129,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((float)left - (float)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (float)l - (float)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -154,17 +147,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)((double)left - (double)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = (double)l - (double)r;
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -202,17 +194,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((short)((short)left - (short)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((short)((short)l - (short)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -221,17 +212,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : ScriptingRuntimeHelpers.Int32ToObject(checked((int)left - (int)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = ScriptingRuntimeHelpers.Int32ToObject(checked((int)l - (int)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -240,17 +230,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((long)left - (long)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((long)l - (long)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -259,17 +248,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((ushort)((ushort)left - (ushort)right));
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((ushort)((ushort)l - (ushort)r));
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -278,17 +266,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((uint)left - (uint)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((uint)l - (uint)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -297,17 +284,16 @@ namespace System.Linq.Expressions.Interpreter
|
||||
{
|
||||
public override int Run(InterpretedFrame frame)
|
||||
{
|
||||
object l = frame.Data[frame.StackIndex - 2];
|
||||
object r = frame.Data[frame.StackIndex - 1];
|
||||
if (l == null || r == null)
|
||||
int index = frame.StackIndex;
|
||||
object[] stack = frame.Data;
|
||||
object left = stack[index - 2];
|
||||
if (left != null)
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = null;
|
||||
object right = stack[index - 1];
|
||||
stack[index - 2] = right == null ? null : (object)checked((ulong)left - (ulong)right);
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data[frame.StackIndex - 2] = checked((ulong)l - (ulong)r);
|
||||
}
|
||||
frame.StackIndex--;
|
||||
|
||||
frame.StackIndex = index - 1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace System.Linq.Expressions.Tests
|
||||
{
|
||||
private static IEnumerable<object[]> Ranks() => Enumerable.Range(1, 5).Select(i => new object[] {i});
|
||||
|
||||
[ConditionalTheory(nameof(PlatformDetection) + "." + nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
[ClassData(typeof(CompilationTypes))]
|
||||
public static void ArrayAccess_MultiDimensionalOf1(bool useInterpreter)
|
||||
{
|
||||
@@ -30,7 +30,7 @@ namespace System.Linq.Expressions.Tests
|
||||
Assert.Equal(42, get());
|
||||
}
|
||||
|
||||
[ConditionalTheory(nameof(PlatformDetection) + "." + nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
[ClassData(typeof(CompilationTypes))]
|
||||
public static void ArrayIndex_MultiDimensionalOf1(bool useInterpreter)
|
||||
{
|
||||
@@ -77,7 +77,7 @@ namespace System.Linq.Expressions.Tests
|
||||
AssertExtensions.Throws<ArgumentException>("indexes", () => Expression.ArrayAccess(instance, index));
|
||||
}
|
||||
|
||||
[ConditionalTheory(nameof(PlatformDetection) + "." + nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
[ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
[ClassData(typeof(CompilationTypes))]
|
||||
public static void NonZeroBasedOneDimensionalArrayAccess(bool useInterpreter)
|
||||
{
|
||||
|
||||
@@ -1 +1 @@
|
||||
389b6d47b316f20c52847e6c98776e95d6654046
|
||||
d09e34c661a9d9a2eaf34c476123b81ce0cf1495
|
||||
@@ -1605,7 +1605,7 @@ namespace System.Linq.Expressions.Tests
|
||||
AssertExtensions.Throws<ArgumentException>("array", () => Expression.ArrayLength(Expression.Constant(arr)));
|
||||
}
|
||||
|
||||
[ConditionalFact(nameof(PlatformDetection) + "." + nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNonZeroLowerBoundArraySupported))]
|
||||
public static void ArrayTypeArrayNotAllowedIfNonZeroBoundArray()
|
||||
{
|
||||
Array arr = Array.CreateInstance(typeof(int), new[] { 3 }, new[] { -1 });
|
||||
|
||||
@@ -6,6 +6,9 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Linq.Expressions.Tests;
|
||||
using System.Reflection;
|
||||
using System.Reflection.Emit;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Microsoft.CSharp.RuntimeBinder;
|
||||
using Xunit;
|
||||
|
||||
@@ -745,6 +748,27 @@ namespace System.Dynamic.Tests
|
||||
Assert.Equal("42", func().ToString());
|
||||
}
|
||||
|
||||
#if FEATURE_COMPILE // We're not testing compilation, but we do need Reflection.Emit for the test
|
||||
[Fact]
|
||||
public void OperationOnTwoObjectsDifferentTypesOfSameName()
|
||||
{
|
||||
object objX = Activator.CreateInstance(
|
||||
AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("TestAssembly"), AssemblyBuilderAccess.Run)
|
||||
.DefineDynamicModule("TestModule").DefineType("TestType", TypeAttributes.Public).CreateType());
|
||||
object objY = Activator.CreateInstance(
|
||||
AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("TestAssembly"), AssemblyBuilderAccess.Run)
|
||||
.DefineDynamicModule("TestModule").DefineType("TestType", TypeAttributes.Public).CreateType());
|
||||
|
||||
CallSiteBinder binder =
|
||||
Microsoft.CSharp.RuntimeBinder.Binder.BinaryOperation(
|
||||
CSharpBinderFlags.None, ExpressionType.Equal,
|
||||
GetType(), new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null), CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) });
|
||||
var cs = CallSite<Func<CallSite, object, object, object>>.Create(binder);
|
||||
var t = cs.Target;
|
||||
Assert.Throws<RuntimeBinderException>(() => t(cs, objX, objY));
|
||||
}
|
||||
#endif
|
||||
|
||||
private class BinaryCallSiteBinder : BinaryOperationBinder
|
||||
{
|
||||
public BinaryCallSiteBinder() : base(ExpressionType.Add) {}
|
||||
|
||||
93
external/corefx/src/System.Linq.Expressions/tests/Dynamic/DynamicAttributeTests.cs
vendored
Normal file
93
external/corefx/src/System.Linq.Expressions/tests/Dynamic/DynamicAttributeTests.cs
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Xunit;
|
||||
|
||||
namespace System.Runtime.CompilerServices.Tests
|
||||
{
|
||||
public class DynamicAttributeTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullToCtor()
|
||||
{
|
||||
AssertExtensions.Throws<ArgumentNullException>("transformFlags", () => new DynamicAttribute(null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DefaultCtorSingleTrueFlag()
|
||||
{
|
||||
IList<bool> flags = new DynamicAttribute().TransformFlags;
|
||||
Assert.Equal(1, flags.Count);
|
||||
Assert.True(flags[0]);
|
||||
}
|
||||
|
||||
public static dynamic ParamsAndReturns(
|
||||
dynamic d, dynamic[] da, List<dynamic> ld, Dictionary<dynamic, object> dido,
|
||||
Dictionary<object, dynamic> diod, Dictionary<dynamic, List<Dictionary<dynamic, int>>> dolddi)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DefaultForDynamicParam()
|
||||
{
|
||||
IList<bool> flags = ((DynamicAttribute)GetType().GetMethod(nameof(ParamsAndReturns)).GetParameters()[0]
|
||||
.GetCustomAttribute(typeof(DynamicAttribute))).TransformFlags;
|
||||
Assert.Equal(1, flags.Count);
|
||||
Assert.True(flags[0]);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void DefaultForDynamicReturn()
|
||||
{
|
||||
IList<bool> flags = ((DynamicAttribute)GetType().GetMethod(nameof(ParamsAndReturns)).ReturnParameter
|
||||
.GetCustomAttribute(typeof(DynamicAttribute))).TransformFlags;
|
||||
Assert.Equal(1, flags.Count);
|
||||
Assert.True(flags[0]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ArrayOfDynamic()
|
||||
{
|
||||
IList<bool> flags = ((DynamicAttribute)GetType().GetMethod(nameof(ParamsAndReturns)).GetParameters()[1]
|
||||
.GetCustomAttribute(typeof(DynamicAttribute))).TransformFlags;
|
||||
Assert.Equal(new[] { false, true }, flags);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ListOfDynamic()
|
||||
{
|
||||
IList<bool> flags = ((DynamicAttribute)GetType().GetMethod(nameof(ParamsAndReturns)).GetParameters()[2]
|
||||
.GetCustomAttribute(typeof(DynamicAttribute))).TransformFlags;
|
||||
Assert.Equal(new[] { false, true }, flags);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DictionaryWithDynamicKey()
|
||||
{
|
||||
IList<bool> flags = ((DynamicAttribute)GetType().GetMethod(nameof(ParamsAndReturns)).GetParameters()[3]
|
||||
.GetCustomAttribute(typeof(DynamicAttribute))).TransformFlags;
|
||||
Assert.Equal(new[] { false, true, false }, flags);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DictionaryWithDynamicValue()
|
||||
{
|
||||
IList<bool> flags = ((DynamicAttribute)GetType().GetMethod(nameof(ParamsAndReturns)).GetParameters()[4]
|
||||
.GetCustomAttribute(typeof(DynamicAttribute))).TransformFlags;
|
||||
Assert.Equal(new[] { false, false, true }, flags);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComplexGenericWithDynamic()
|
||||
{
|
||||
IList<bool> flags = ((DynamicAttribute)GetType().GetMethod(nameof(ParamsAndReturns)).GetParameters()[5]
|
||||
.GetCustomAttribute(typeof(DynamicAttribute))).TransformFlags;
|
||||
Assert.Equal(new[] { false, true, false, false, true, false }, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,8 @@
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Reflection.Emit;
|
||||
using Microsoft.CSharp.RuntimeBinder;
|
||||
using Xunit;
|
||||
|
||||
@@ -182,5 +184,94 @@ namespace System.Dynamic.Tests
|
||||
CallInfo info = new CallInfo(0);
|
||||
Assert.Same(info, new MinimumOverrideInvokeMemberBinding("name", false, info).CallInfo);
|
||||
}
|
||||
|
||||
#if FEATURE_COMPILE // We're not testing compilation, but we do need Reflection.Emit for the test
|
||||
|
||||
private static dynamic GetObjectWithNonIndexerParameterProperty(bool hasGetter, bool hasSetter)
|
||||
{
|
||||
TypeBuilder typeBuild = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("TestAssembly"), AssemblyBuilderAccess.Run)
|
||||
.DefineDynamicModule("TestModule")
|
||||
.DefineType("TestType", TypeAttributes.Public);
|
||||
FieldBuilder field = typeBuild.DefineField("_value", typeof(int), FieldAttributes.Private);
|
||||
|
||||
PropertyBuilder property = typeBuild.DefineProperty(
|
||||
"ItemProp", PropertyAttributes.None, typeof(int), new[] { typeof(int) });
|
||||
|
||||
if (hasGetter)
|
||||
{
|
||||
MethodBuilder getter = typeBuild.DefineMethod(
|
||||
"get_ItemProp",
|
||||
MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig
|
||||
| MethodAttributes.PrivateScope, typeof(int), new[] { typeof(int) });
|
||||
|
||||
ILGenerator ilGen = getter.GetILGenerator();
|
||||
ilGen.Emit(OpCodes.Ldarg_0);
|
||||
ilGen.Emit(OpCodes.Ldfld, field);
|
||||
ilGen.Emit(OpCodes.Ret);
|
||||
|
||||
property.SetGetMethod(getter);
|
||||
}
|
||||
|
||||
if (hasSetter)
|
||||
{
|
||||
|
||||
MethodBuilder setter = typeBuild.DefineMethod(
|
||||
"set_ItemProp",
|
||||
MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig
|
||||
| MethodAttributes.PrivateScope, typeof(void), new[] { typeof(int), typeof(int) });
|
||||
|
||||
ILGenerator ilGen = setter.GetILGenerator();
|
||||
ilGen.Emit(OpCodes.Ldarg_0);
|
||||
ilGen.Emit(OpCodes.Ldarg_2);
|
||||
ilGen.Emit(OpCodes.Stfld, field);
|
||||
ilGen.Emit(OpCodes.Ret);
|
||||
|
||||
property.SetSetMethod(setter);
|
||||
}
|
||||
|
||||
return Activator.CreateInstance(typeBuild.CreateType());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NonIndexerParameterizedDirectAccess()
|
||||
{
|
||||
// If a paramterized property isn't the type's indexer, we should be allowed to use the
|
||||
// getter or setter directly.
|
||||
dynamic d = GetObjectWithNonIndexerParameterProperty(true, true);
|
||||
d.set_ItemProp(2, 19);
|
||||
int value = d.get_ItemProp(2);
|
||||
Assert.Equal(19, value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NonIndexerParamterizedGetterAndSetterIndexAccess()
|
||||
{
|
||||
dynamic d = GetObjectWithNonIndexerParameterProperty(true, true);
|
||||
RuntimeBinderException ex = Assert.Throws<RuntimeBinderException>(() => d.ItemProp[2] = 3);
|
||||
// Similar message to CS1545 advises about getter and setter methods.
|
||||
Assert.Contains("get_ItemProp", ex.Message);
|
||||
Assert.Contains("set_ItemProp", ex.Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NonIndexerParamterizedGetterOnlyIndexAccess()
|
||||
{
|
||||
dynamic d = GetObjectWithNonIndexerParameterProperty(true, false);
|
||||
int dump;
|
||||
RuntimeBinderException ex = Assert.Throws<RuntimeBinderException>(() => dump = d.ItemProp[2]);
|
||||
// Similar message to CS1546 advises about getter method.
|
||||
Assert.Contains("get_ItemProp", ex.Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NonIndexerParamterizedSetterOnlyIndexAccess()
|
||||
{
|
||||
dynamic d = GetObjectWithNonIndexerParameterProperty(false, true);
|
||||
RuntimeBinderException ex = Assert.Throws<RuntimeBinderException>(() => d.ItemProp[2] = 9);
|
||||
// Similar message to CS1546 advises about setter method.
|
||||
Assert.Contains("set_ItemProp", ex.Message);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
<Compile Include="Dynamic\CallSiteBinderDefaultBehaviourTests.cs" />
|
||||
<Compile Include="Dynamic\CallSiteTests.cs" />
|
||||
<Compile Include="Dynamic\ConvertBinderTests.cs" />
|
||||
<Compile Include="Dynamic\DynamicAttributeTests.cs" />
|
||||
<Compile Include="Dynamic\DynamicObjectTests.cs" />
|
||||
<Compile Include="Dynamic\DynamicObjectDefaultBehaviorTests.cs" />
|
||||
<Compile Include="Dynamic\ExpandoObjectTests.cs" />
|
||||
@@ -261,9 +262,6 @@
|
||||
<Compile Include="Variables\RuntimeVariablesTests.cs" />
|
||||
<Compile Include="Variables\VariableTests.cs" />
|
||||
<Compile Include="Visitor\VisitorTests.cs" />
|
||||
<Compile Include="$(CommonTestPath)\System\PlatformDetection.cs">
|
||||
<Link>Common\System\PlatformDetection.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(IsInterpreting)' != 'true' ">
|
||||
<Compile Include="$(CommonTestPath)\System\Collections\DictionaryExtensions.cs">
|
||||
|
||||
Reference in New Issue
Block a user