Improve handling of lib paths for libMonoPosixHelper and libgdiplus. Fixes #18555.
stamp-h
stamp-h1
stamp-h.in
+/test-driver
*~
*.swp
*.o
Mono is a software platform designed to allow developers to easily create cross platform applications.
Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.
+[![Build Status](http://monojenkins.cloudapp.net/job/Mono/badge/icon)](http://monojenkins.cloudapp.net/job/Mono/)
+
1. [Installation](#compilation-and-installation)
2. [Using Mono](#using-mono)
3. [Directory Roadmap](#directory-roadmap)
libgc_threads=win32
gc_default=included
with_sigaltstack=no
+ with_tls=pthread
LN_S=cp
# This forces libgc to use the DllMain based thread registration code on win32
libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
sgen_supported=true
AOT_SUPPORTED="yes"
;;
- darwin*|openbsd*|freebsd*)
+ openbsd*|freebsd*)
sgen_supported=true
;;
esac
sgen_supported=true
AOT_SUPPORTED="yes"
;;
- darwin*|openbsd*|freebsd*)
+ darwin*)
+ sgen_supported=true
+ AOT_SUPPORTED="yes"
+ ;;
+ openbsd*|freebsd*)
sgen_supported=true
;;
esac
enable_system_aot=yes
fi
- if test "x$enable_loadedllvm" = "xyes"; then
- # This seems to fail on the x86 buildbots
- enable_system_aot=no
- fi
-
if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
fi
#define G_PRIORITY_DEFAULT 0
#define G_PRIORITY_DEFAULT_IDLE 200
-/*
- * Empty thread functions, not used by eglib
- */
-#define g_thread_supported() TRUE
-#define g_thread_init(x) G_STMT_START { if (x != NULL) { g_error ("No vtable supported in g_thread_init"); } } G_STMT_END
-
-#define G_LOCK_DEFINE(name) int name;
-#define G_LOCK_DEFINE_STATIC(name) static int name;
-#define G_LOCK_EXTERN(name)
-#define G_LOCK(name)
-#define G_TRYLOCK(name)
-#define G_UNLOCK(name)
-
#define GUINT16_SWAP_LE_BE_CONSTANT(x) ((((guint16) x) >> 8) | ((((guint16) x) << 8)))
#define GUINT16_SWAP_LE_BE(x) ((guint16) (((guint16) x) >> 8) | ((((guint16)(x)) & 0xff) << 8))
$(MAKE) -s do-profile-check-monolite ; \
else \
echo "*** The compiler '$(BOOTSTRAP_MCS)' doesn't appear to be usable." 1>&2; \
- echo "*** You need Mono version 2.4 or better installed to build MCS" 1>&2 ; \
+ echo "*** You need Mono version 2.10 or better installed to build MCS" 1>&2 ; \
echo "*** Check mono README for information on how to bootstrap a Mono installation." 1>&2 ; \
exit 1; fi; fi
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.COMException))]
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComMemberType))]
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComSourceInterfacesAttribute))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComTypes.IStream))]
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.ComTypes.STATSTG))]
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.CriticalHandle))]
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.CurrencyWrapper))]
//[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.CustomQueryInterfaceMode))]
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.UnmanagedType))]
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.VarEnum))]
[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Runtime.InteropServices.VariantWrapper))]
-
System.Runtime.Serialization.Formatters.Soap \
System.Runtime.Remoting
-common_dirs := \
+net_2_0_dirs := \
corlib \
System \
System.XML \
Mono.Cecil \
Mono.Cecil.Mdb \
Mono.Debugger.Soft \
- SystemWebTestShim
-
-net_2_0_dirs := \
+ SystemWebTestShim \
System.Xml.Linq \
System.Runtime.Serialization \
System.Data.DataSetExtensions \
System.Data.Linq \
- System.Web \
System.Web.Abstractions \
System.Web.Routing \
System.IdentityModel \
System.Xaml \
WindowsBase \
System.ServiceModel.Activation \
- System.ServiceModel \
System.ServiceModel.Routing \
System.ServiceModel.Discovery \
System.Runtime.Caching \
$(xbuild_2_0_dirs) \
Microsoft.Build
-net_2_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs) $(xbuild_2_0_dirs) aot-compiler
+net_2_0_SUBDIRS := $(net_2_0_dirs) $(net_2_0_only_dirs) $(xbuild_2_0_dirs) aot-compiler
monodroid_SUBDIRS := $(mobile_dirs) $(monodroid_dirs)
monotouch_SUBDIRS := $(mobile_dirs) $(monotouch_dirs)
monotouch_runtime_SUBDIRS := $(monotouch_runtime_dirs)
mobile_SUBDIRS := $(mobile_dirs)
xammac_SUBDIRS := $(mobile_dirs) $(xammac_dirs)
net_3_5_SUBDIRS := $(xbuild_2_0_dirs)
-net_4_0_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(xbuild_4_0_dirs)
-net_4_5_SUBDIRS := $(common_dirs) $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
+net_4_0_SUBDIRS := $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(xbuild_4_0_dirs)
+net_4_5_SUBDIRS := $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
xbuild_12_SUBDIRS := $(xbuild_4_0_dirs)
include ../build/rules.make
-SUBDIRS = $(common_dirs) $(net_2_0_dirs) $(net_2_0_only_dirs) $(mobile_dirs) $(monotouch_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(net_4_5_dirs)
+SUBDIRS = $(net_2_0_dirs) $(net_2_0_only_dirs) $(mobile_dirs) $(monotouch_dirs) $(net_4_0_dirs) $(net_4_0_only_dirs) $(net_4_5_dirs)
DIST_ONLY_SUBDIRS = dlr aot-compiler $(xbuild_4_0_dirs)
[Test]
public void WriteRead1 ()
{
- ResXResourceWriter rw = new ResXResourceWriter ("resx.resx");
serializable ser = new serializable ("aaaaa", "bbbbb");
ResXDataNode dn = new ResXDataNode ("test", ser);
dn.Comment = "comment";
- rw.AddResource (dn);
- rw.Close ();
+
+ string resXFile = GetResXFileWithNode (dn, "resx.resx");
bool found = false;
- ResXResourceReader rr = new ResXResourceReader ("resx.resx");
+ ResXResourceReader rr = new ResXResourceReader (resXFile);
rr.UseResXDataNodes = true;
IDictionaryEnumerator en = rr.GetEnumerator ();
while (en.MoveNext ()) {
ResXDataNode node = ((DictionaryEntry) en.Current).Value as ResXDataNode;
rr.Close ();
- File.Delete ("resx.resx");
Assert.IsNotNull (node,"#A1");
serializable o = node.GetValue ((AssemblyName []) null) as serializable;
ResXDataNode node = ((DictionaryEntry) en.Current).Value as ResXDataNode;
rr.Close ();
- File.Delete ("resx.resx");
Assert.IsNotNull (node, "#A1");
object o = node.GetValue ((AssemblyName []) null);
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
-<resheader name="resmimetype"><value>text/microsoft-resx</value></resheader><resheader name="version"><value>1.3</value></resheader><resheader name="reader"><value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></resheader><resheader name="writer"><value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></resheader><data name="test" mimetype="application/x-microsoft.net.object.binary.base64"><value>AAEAAAD/////AQAAAAAAAAAMAgAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtc190ZXN0X25ldF8yXzAFAQAAACdNb25vVGVzdHMuU3lzdGVtLlJlc291cmNlcy5zZXJpYWxpemFibGUCAAAAB3Nlcm5hbWUIc2VydmFsdWUBAQIAAAAGAwAAAAVhYWFhYQYEAAAABWJiYmJiCw==</value><comment>comment</comment></data></root>
\ No newline at end of file
}
}
}
-
- protected void AppendTextUnquoted (string textToAppend)
+
+#if NET_4_0
+ public
+#else
+ protected
+#endif
+ void AppendTextUnquoted (string textToAppend)
{
commandLine.Append (textToAppend);
}
enum InvokeFlags {
NONE = 0x0,
DISABLE_BREAKPOINTS = 0x1,
- SINGLE_THREADED = 0x2
+ SINGLE_THREADED = 0x2,
+ OUT_THIS = 0x4,
+ OUT_ARGS = 0x8,
}
enum ElementType {
* with newer runtimes, and vice versa.
*/
internal const int MAJOR_VERSION = 2;
- internal const int MINOR_VERSION = 34;
+ internal const int MINOR_VERSION = 35;
enum WPSuspendPolicy {
NONE = 0,
}
}
- internal delegate void InvokeMethodCallback (ValueImpl v, ValueImpl exc, ErrorCode error, object state);
+ internal delegate void InvokeMethodCallback (ValueImpl v, ValueImpl exc, ValueImpl out_this, ValueImpl[] out_args, ErrorCode error, object state);
+
+ void read_invoke_res (PacketReader r, out ValueImpl v, out ValueImpl exc, out ValueImpl out_this, out ValueImpl[] out_args) {
+ int resflags = r.ReadByte ();
+ v = null;
+ exc = null;
+ out_this = null;
+ out_args = null;
+ if (resflags == 0) {
+ exc = r.ReadValue ();
+ } else {
+ v = r.ReadValue ();
+ if ((resflags & 2) != 0)
+ out_this = r.ReadValue ();
+ if ((resflags & 4) != 0) {
+ int nargs = r.ReadInt ();
+ out_args = new ValueImpl [nargs];
+ for (int i = 0; i < nargs; ++i)
+ out_args [i] = r.ReadValue ();
+ }
+ }
+ }
internal int VM_BeginInvokeMethod (long thread, long method, ValueImpl this_arg, ValueImpl[] arguments, InvokeFlags flags, InvokeMethodCallback callback, object state) {
return Send (CommandSet.VM, (int)CmdVM.INVOKE_METHOD, new PacketWriter ().WriteId (thread).WriteInt ((int)flags).WriteId (method).WriteValue (this_arg).WriteInt (arguments.Length).WriteValues (arguments), delegate (PacketReader r) {
- ValueImpl v, exc;
+ ValueImpl v, exc, out_this = null;
+ ValueImpl[] out_args = null;
if (r.ErrorCode != 0) {
- callback (null, null, (ErrorCode)r.ErrorCode, state);
+ callback (null, null, null, null, (ErrorCode)r.ErrorCode, state);
} else {
- if (r.ReadByte () == 0) {
- exc = r.ReadValue ();
- v = null;
- } else {
- v = r.ReadValue ();
- exc = null;
- }
-
- callback (v, exc, 0, state);
+ read_invoke_res (r, out v, out exc, out out_this, out out_args);
+ callback (v, exc, out_this, out_args, 0, state);
}
}, 1);
}
w.WriteValues (arguments [i]);
}
return Send (CommandSet.VM, (int)CmdVM.INVOKE_METHODS, w, delegate (PacketReader r) {
- ValueImpl v, exc;
+ ValueImpl v, exc, out_this = null;
+ ValueImpl[] out_args = null;
if (r.ErrorCode != 0) {
- callback (null, null, (ErrorCode)r.ErrorCode, state);
+ callback (null, null, null, null, (ErrorCode)r.ErrorCode, state);
} else {
- if (r.ReadByte () == 0) {
- exc = r.ReadValue ();
- v = null;
- } else {
- v = r.ReadValue ();
- exc = null;
- }
-
- callback (v, exc, 0, state);
+ read_invoke_res (r, out v, out exc, out out_this, out out_args);
+ callback (v, exc, out_this, out_args, 0, state);
}
}, methods.Length);
}
/*
* Only resume the target thread during the invoke
*/
- SingleThreaded = 2
+ SingleThreaded = 2,
+ /*
+ * Return the changed receiver when invoking
+ * a valuetype method.
+ */
+ ReturnOutThis = 4,
+ /*
+ * Return the values of out arguments
+ */
+ ReturnOutArgs = 8
}
}
namespace Mono.Debugger.Soft
{
+ public class InvokeResult {
+ public Value Result { get; set; }
+ //
+ // The value of the receiver after the call for calls to valuetype methods or null.
+ // Only set when using the InvokeOptions.ReturnOutThis flag.
+ // Since protocol version 2.35
+ //
+ public Value OutThis { get; set; }
+ //
+ // The value of the arguments after the call
+ // Only set when using the InvokeOptions.ReturnOutArgs flag.
+ // Since protocol version 2.35
+ //
+ public Value[] OutArgs { get; set; }
+ }
+
public class ObjectMirror : Value {
TypeMirror type;
AppDomainMirror domain;
}, null);
return tcs.Task;
}
+
+ public Task<InvokeResult> InvokeMethodAsyncWithResult (ThreadMirror thread, MethodMirror method, IList<Value> arguments, InvokeOptions options = InvokeOptions.None) {
+ var tcs = new TaskCompletionSource<InvokeResult> ();
+ BeginInvokeMethod (thread, method, arguments, options, iar =>
+ {
+ try {
+ tcs.SetResult (EndInvokeMethodInternalWithResult (iar));
+ } catch (OperationCanceledException) {
+ tcs.TrySetCanceled ();
+ } catch (Exception ex) {
+ tcs.TrySetException (ex);
+ }
+ }, null);
+ return tcs.Task;
+ }
#endif
//
get; set;
}
+ public ValueImpl OutThis {
+ get; set;
+ }
+
+ public ValueImpl[] OutArgs {
+ get; set;
+ }
+
public ValueImpl Exception {
get; set;
}
f |= InvokeFlags.DISABLE_BREAKPOINTS;
if ((options & InvokeOptions.SingleThreaded) != 0)
f |= InvokeFlags.SINGLE_THREADED;
+ if ((options & InvokeOptions.ReturnOutThis) != 0)
+ f |= InvokeFlags.OUT_THIS;
+ if ((options & InvokeOptions.ReturnOutArgs) != 0)
+ f |= InvokeFlags.OUT_ARGS;
InvokeAsyncResult r = new InvokeAsyncResult { AsyncState = state, AsyncWaitHandle = new ManualResetEvent (false), VM = vm, Thread = thread, Callback = callback };
thread.InvalidateFrames ();
}
// This is called when the result of an invoke is received
- static void InvokeCB (ValueImpl v, ValueImpl exc, ErrorCode error, object state) {
+ static void InvokeCB (ValueImpl v, ValueImpl exc, ValueImpl out_this, ValueImpl[] out_args, ErrorCode error, object state) {
InvokeAsyncResult r = (InvokeAsyncResult)state;
if (error != 0) {
r.Exception = exc;
}
+ r.OutThis = out_this;
+ r.OutArgs = out_args;
+
r.IsCompleted = true;
((ManualResetEvent)r.AsyncWaitHandle).Set ();
r.Callback.BeginInvoke (r, null, null);
}
- internal static Value EndInvokeMethodInternal (IAsyncResult asyncResult) {
+ internal static InvokeResult EndInvokeMethodInternalWithResult (IAsyncResult asyncResult) {
if (asyncResult == null)
throw new ArgumentNullException ("asyncResult");
if (r.Exception != null)
throw new InvocationException ((ObjectMirror)r.VM.DecodeValue (r.Exception));
- return r.VM.DecodeValue (r.Value);
+ Value out_this = null;
+ if (r.OutThis != null)
+ out_this = r.VM.DecodeValue (r.OutThis);
+ Value[] out_args = null;
+ if (r.OutArgs != null)
+ out_args = r.VM.DecodeValues (r.OutArgs);
+
+ return new InvokeResult () { Result = r.VM.DecodeValue (r.Value), OutThis = out_this, OutArgs = out_args };
}
}
+ internal static Value EndInvokeMethodInternal (IAsyncResult asyncResult) {
+ InvokeResult res = EndInvokeMethodInternalWithResult (asyncResult);
+ return res.Result;
+ }
+
internal static void EndInvokeMultipleInternal (IAsyncResult asyncResult) {
if (asyncResult == null)
throw new ArgumentNullException ("asyncResult");
}
// This is called when the result of an invoke is received
- static void InvokeMultipleCB (ValueImpl v, ValueImpl exc, ErrorCode error, object state) {
+ static void InvokeMultipleCB (ValueImpl v, ValueImpl exc, ValueImpl out_this, ValueImpl[] out_args, ErrorCode error, object state) {
var r = (InvokeAsyncResult)state;
Interlocked.Decrement (ref r.NumPending);
using System;
using System.Collections.Generic;
+#if NET_4_5
+using System.Threading.Tasks;
+#endif
namespace Mono.Debugger.Soft
{
public Value EndInvokeMethod (IAsyncResult asyncResult) {
return ObjectMirror.EndInvokeMethodInternal (asyncResult);
}
+
+#if NET_4_5
+ public Task<Value> InvokeMethodAsync (ThreadMirror thread, MethodMirror method, IList<Value> arguments, InvokeOptions options = InvokeOptions.None) {
+ var tcs = new TaskCompletionSource<Value> ();
+ BeginInvokeMethod (thread, method, arguments, options, iar =>
+ {
+ try {
+ tcs.SetResult (EndInvokeMethod (iar));
+ } catch (OperationCanceledException) {
+ tcs.TrySetCanceled ();
+ } catch (Exception ex) {
+ tcs.TrySetException (ex);
+ }
+ }, null);
+ return tcs.Task;
+ }
+
+ public Task<InvokeResult> InvokeMethodAsyncWithResult (ThreadMirror thread, MethodMirror method, IList<Value> arguments, InvokeOptions options = InvokeOptions.None) {
+ var tcs = new TaskCompletionSource<InvokeResult> ();
+ BeginInvokeMethod (thread, method, arguments, options, iar =>
+ {
+ try {
+ tcs.SetResult (ObjectMirror.EndInvokeMethodInternalWithResult (iar));
+ } catch (OperationCanceledException) {
+ tcs.TrySetCanceled ();
+ } catch (Exception ex) {
+ tcs.TrySetException (ex);
+ }
+ }, null);
+ return tcs.Task;
+ }
+#endif
}
}
public string s;
public byte k;
public IntPtr j;
+ public int l;
[MethodImplAttribute (MethodImplOptions.NoInlining)]
public int foo (int val) {
public IntPtr invoke_return_intptr () {
return j;
}
+
+ [MethodImplAttribute (MethodImplOptions.NoInlining)]
+ public void invoke_mutate () {
+ l = 5;
+ }
}
public class GClass<T> {
return 42;
}
+ public void invoke_out (out int foo, out int[] arr) {
+ foo = 5;
+ arr = new int [10];
+ }
+
[MethodImplAttribute (MethodImplOptions.NoInlining)]
public static void exceptions () {
try {
Assert.AreEqual ("Exception", ex.Exception.Type.Name);
}
+#if NET_4_5
+ // out argument
+ m = t.GetMethod ("invoke_out");
+ var out_task = this_obj.InvokeMethodAsyncWithResult (e.Thread, m, new Value [] { vm.CreateValue (1), vm.CreateValue (null) }, InvokeOptions.ReturnOutArgs);
+ var out_args = out_task.Result.OutArgs;
+ AssertValue (5, out_args [0]);
+ Assert.IsTrue (out_args [1] is ArrayMirror);
+ Assert.AreEqual (10, (out_args [1] as ArrayMirror).Length);
+
+ // without ReturnOutArgs flag
+ out_task = this_obj.InvokeMethodAsyncWithResult (e.Thread, m, new Value [] { vm.CreateValue (1), vm.CreateValue (null) });
+ out_args = out_task.Result.OutArgs;
+ Assert.IsNull (out_args);
+#endif
+
// newobj
m = t.GetMethod (".ctor");
v = t.InvokeMethod (e.Thread, m, null);
m = t.GetMethod ("invoke_return_int");
v = s.InvokeMethod (e.Thread, m, null);
AssertValue (42, v);
+
+#if NET_4_5
+ // Invoke a method which changes state
+ s = frame.GetArgument (1) as StructMirror;
+ t = s.Type;
+ m = t.GetMethod ("invoke_mutate");
+ var task = s.InvokeMethodAsyncWithResult (e.Thread, m, null, InvokeOptions.ReturnOutThis);
+ var out_this = task.Result.OutThis as StructMirror;
+ AssertValue (5, out_this ["l"]);
+
+ // Without the ReturnOutThis flag
+ s = frame.GetArgument (1) as StructMirror;
+ t = s.Type;
+ m = t.GetMethod ("invoke_mutate");
+ task = s.InvokeMethodAsyncWithResult (e.Thread, m, null);
+ out_this = task.Result.OutThis as StructMirror;
+ Assert.AreEqual (null, out_this);
+#endif
}
[Test]
public string Expression {\r
get { return _expression; }\r
set {\r
- if (value == null)\r
+ if (value == null || value.Trim () == string.Empty)\r
value = String.Empty;\r
\r
CompileExpression (value);\r
public object this [string columnName] {
get { return this [columnName, DataRowVersion.Default]; }
set {
- DataColumn column = _table.Columns [columnName];
- if (column == null)
- throw new ArgumentException ("The column '" + columnName +
- "' does not belong to the table : " + _table.TableName);
+ DataColumn column = GetColumn (columnName);
this [column.Ordinal] = value;
}
}
/// </summary>
public object this [string columnName, DataRowVersion version] {
get {
- DataColumn column = _table.Columns [columnName];
- if (column == null)
- throw new ArgumentException ("The column '" + columnName +
- "' does not belong to the table : " + _table.TableName);
+ DataColumn column = GetColumn (columnName);
return this [column.Ordinal, version];
}
}
/// </summary>
public bool IsNull (string columnName)
{
- return IsNull (Table.Columns [columnName]);
+ return IsNull (GetColumn (columnName));
}
/// <summary>
/// </summary>
public bool IsNull (DataColumn column, DataRowVersion version)
{
+ if (column == null)
+ throw new ArgumentNullException ("column");
+
+ // use the expresion if there is one
+ if (column.Expression != String.Empty) {
+ // FIXME: how does this handle 'version'?
+ // TODO: Can we avoid the Eval each time by using the cached value?
+ object o = column.CompiledExpression.Eval (this);
+ return o == null && o == DBNull.Value;
+ }
+
return column.DataContainer.IsNull (IndexFromVersion (version));
}
}
}
#endif // NET_2_0
+
+ DataColumn GetColumn (string columnName)
+ {
+ DataColumn column = _table.Columns [columnName];
+
+ if (column == null)
+ throw new ArgumentException ("The column '" + columnName + "' does not belong to the table " + _table.TableName);
+
+ return column;
+ }
}
}
Assert.AreEqual(sExpression,dc.Expression, "dce#2");
}
+ [Test]
+ public void Expression_Whitespace ()
+ {
+ DataColumn dc = new DataColumn ("ColName", typeof(string));
+
+ string plainWhitespace = " ";
+ string surroundWhitespace = " 'abc' ";
+
+ Assert.AreEqual (string.Empty, dc.Expression, "dce#1");
+
+ dc.Expression = plainWhitespace;
+ Assert.AreEqual (string.Empty, dc.Expression, "dce#2");
+
+ dc.Expression = surroundWhitespace;
+ Assert.AreEqual (surroundWhitespace, dc.Expression, "dce#3");
+ }
+
[Test]
public void Expression_Exceptions()
{
#endregion
}
+ [Test]
+ public void IsNull_BeforeGetValue ()
+ {
+ DataTable table = new DataTable ();
+
+ // add the row, with the value in the column
+ DataColumn staticColumn = table.Columns.Add ("static", typeof(string), null); // static
+ DataRow row = table.Rows.Add ("the value");
+ Assert.IsFalse (row.IsNull ("static"), "static null check failed");
+ Assert.AreEqual ("the value", row ["static"], "static value check failed");
+
+ // add the first derived column
+ DataColumn firstColumn = table.Columns.Add ("first", typeof(string), "static"); // first -> static
+ Assert.IsFalse (row.IsNull ("first"), "first level null check failed");
+ Assert.AreEqual ("the value", row ["first"], "first level value check failed");
+
+ // add the second level of related
+ DataColumn secondColumn = table.Columns.Add ("second", typeof(string), "first"); // second -> first -> static
+ Assert.IsFalse (row.IsNull ("second"), "second level null check failed");
+ Assert.AreEqual ("the value", row ["second"], "second level value check failed");
+ }
+
+ [Test]
+ public void IsNull_NullValueArguments ()
+ {
+ DataTable table = new DataTable ();
+
+ // add the row, with the value in the column
+ DataColumn staticColumn = table.Columns.Add ("static", typeof(string), null);
+ DataRow row = table.Rows.Add ("the value");
+
+ try {
+ row.IsNull ((string)null);
+ Assert.Fail ("expected an arg null exception for passing a null string");
+ } catch (ArgumentNullException) {
+ // do nothing as null columns aren't allowed
+ }
+
+ try {
+ row.IsNull ("");
+ Assert.Fail ("expected an arg exception for passing an empty string");
+ } catch (ArgumentException) {
+ // do nothing as we can't find a col with no name
+ }
+
+ try {
+ row.IsNull (null, DataRowVersion.Default);
+ Assert.Fail ("null column with version check failed");
+ } catch (ArgumentNullException) {
+ // do nothing as null columns aren't allowed
+ }
+ }
+
[Test] public void Item()
{
// init table with columns
using System;
+using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
// save the drawing
string file = "TestHatchBrush" + getOutSufix() + ".png";
bmp.Save (file, ImageFormat.Png);
+ File.Delete (file);
}
private void Constructors ()
//
using System;
+using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Security.Permissions;
private void Bug80323 (Color c)
{
+ string fileName = String.Format ("80323-{0}.png", c.ToArgb ().ToString ("X"));
+
// test case from bug #80323
ColorMatrix cm = new ColorMatrix (new float[][] {
new float[] {1, 0, 0, 0, 0}, //R
g.DrawImage (bmp, new Rectangle (0, 0, 100, 100), 0, 0, 100, 100, GraphicsUnit.Pixel, null);
g.DrawImage (bmp, new Rectangle (100, 0, 100, 100), 0, 0, 100, 100, GraphicsUnit.Pixel, ia);
}
- b.Save (String.Format ("80323-{0}.png", c.ToArgb ().ToString ("X")));
+ b.Save (fileName);
Assert.AreEqual (Color.FromArgb (255, 255, 155, 155), b.GetPixel (50, 50), "50,50");
Assert.AreEqual (Color.FromArgb (255, 255, 205, 205), b.GetPixel (150, 50), "150,50");
}
}
}
+
+ File.Delete (fileName);
}
[Test]
var nullEntry = archive.GetEntry("nonexisting");
Assert.IsNull(nullEntry);
}
+
+ File.Delete ("test.zip");
}
[Test]
Assert.Fail();
}
+
+ File.Delete ("test.zip");
}
[Test]
var nullEntry = archive.GetEntry("nonexisting");
Assert.IsNull(nullEntry);
}
+
+ File.Delete ("test.zip");
}
[Test]
var foo = entry.Open();
}
+
+ File.Delete ("test.zip");
}
[Test]
var entry = archive.GetEntry("foo.txt");
Assert.IsNull(entry);
}
+
+ File.Delete ("delete.zip");
}
[Test]
var entry = archive.GetEntry("foo.txt");
Assert.IsNull(entry);
}
+
+ File.Delete ("delete.zip");
}
[Test]
Assert.AreEqual("foo", text);
}
+
+ File.Delete ("create.zip");
}
[Test]
Assert.AreEqual("foobar/bar.txt", entries[3].FullName);
Assert.AreEqual("foobar/foo.txt", entries[4].FullName);
}
+
+ File.Delete ("test.zip");
}
[Test]
Assert.AreEqual("foobar/bar.txt", entries[3].FullName);
Assert.AreEqual("foobar/foo.txt", entries[4].FullName);
}
+
+ File.Delete ("test.zip");
}
[Test]
Assert.Fail();
}
+
+ File.Delete ("test.zip");
}
}
}
return (string) value;
throw new NotImplementedException ("GetFormattedString from value type " + value.GetType ());
case JsonType.Number:
- return ((IFormattable) value).ToString ("G", NumberFormatInfo.InvariantInfo);
+ string s;
+ if (value is float || value is double)
+ // Use "round-trip" format
+ s = ((IFormattable) value).ToString ("R", NumberFormatInfo.InvariantInfo);
+ else
+ s = ((IFormattable) value).ToString ("G", NumberFormatInfo.InvariantInfo);
+ if (s == "NaN" || s == "Infinity" || s == "-Infinity")
+ return "\"" + s + "\"";
+ else
+ return s;
default:
throw new InvalidOperationException ();
}
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
if (src [i] == '"' || src [i] == '\\') {
sb.Append (src, start, i - start);
sb.Append ('\\');
- sb.Append (src [i++]);
- start = i;
+ sb.Append (src [i]);
+ start = i + 1;
}
sb.Append (src, start, src.Length - start);
return sb.ToString ();
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToBoolean (((JsonPrimitive) value).Value);
+ return Convert.ToBoolean (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator byte (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToByte (((JsonPrimitive) value).Value);
+ return Convert.ToByte (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator char (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToChar (((JsonPrimitive) value).Value);
+ return Convert.ToChar (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator decimal (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToDecimal (((JsonPrimitive) value).Value);
+ return Convert.ToDecimal (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator double (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToDouble (((JsonPrimitive) value).Value);
+ return Convert.ToDouble (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator float (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToSingle (((JsonPrimitive) value).Value);
+ return Convert.ToSingle (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator int (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToInt32 (((JsonPrimitive) value).Value);
+ return Convert.ToInt32 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator long (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToInt64 (((JsonPrimitive) value).Value);
+ return Convert.ToInt64 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator sbyte (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToSByte (((JsonPrimitive) value).Value);
+ return Convert.ToSByte (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator short (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToInt16 (((JsonPrimitive) value).Value);
+ return Convert.ToInt16 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator string (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToUInt16 (((JsonPrimitive) value).Value);
+ return Convert.ToUInt16 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator ulong (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToUInt64(((JsonPrimitive) value).Value);
+ return Convert.ToUInt64(((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator ushort (JsonValue value)
{
if (value == null)
throw new ArgumentNullException ("value");
- return Convert.ToUInt16 (((JsonPrimitive) value).Value);
+ return Convert.ToUInt16 (((JsonPrimitive) value).Value, NumberFormatInfo.InvariantInfo);
}
public static implicit operator DateTime (JsonValue value)
using System.IO;
using System.Text;
using System.Json;
+using System.Globalization;
+using System.Threading;
namespace MonoTests.System
{
Assert.AreEqual (1, j.Count, "itemcount");
Assert.AreEqual (JsonType.String, j ["a"].JsonType, "type");
Assert.AreEqual ("b", (string) j ["a"], "value");
+
+ JsonValue.Parse ("[{ \"a\": \"b\",}]");
+ }
+
+ [Test]
+ public void LoadWithTrailingComma2 ()
+ {
+ JsonValue.Parse ("[{ \"a\": \"b\",}]");
}
// Test that we correctly serialize JsonArray with null elements.
var str = j.ToString ();
Assert.AreEqual (str, "[1, 2, 3, null]");
}
+
+ [Test]
+ public void QuoteEscapeBug_20869 ()
+ {
+ Assert.AreEqual ((new JsonPrimitive ("\"\"")).ToString (), "\"\\\"\\\"\"");
+ }
+
+ void ExpectError (string s)
+ {
+ try {
+ JsonValue.Parse (s);
+ Assert.Fail ("Expected ArgumentException for `" + s + "'");
+ } catch (ArgumentException) {
+ }
+ }
+
+ // Test whether an exception is thrown for invalid JSON
+ [Test]
+ public void CheckErrors ()
+ {
+ ExpectError (@"-");
+ ExpectError (@"- ");
+ ExpectError (@"1.");
+ ExpectError (@"1. ");
+ ExpectError (@"1e+");
+ ExpectError (@"1 2");
+ ExpectError (@"077");
+
+ ExpectError (@"[1,]");
+
+ //ExpectError (@"{""a"":1,}"); // Not valid JSON, allowed anyway
+ }
+
+ // Parse a json string and compare to the expected value
+ void CheckDouble (double expected, string json)
+ {
+ double jvalue = (double) JsonValue.Parse (json);
+ Assert.AreEqual (expected, jvalue);
+ }
+
+ // Convert a number to json and parse the string, then compare the result to the original value
+ void CheckDouble (double number)
+ {
+ double jvalue = (double) JsonValue.Parse (new JsonPrimitive (number).ToString ());
+ Assert.AreEqual (number, jvalue); // should be exactly the same
+ }
+
+ [Test]
+ public void CheckNumbers ()
+ {
+ CheckDouble (0, "0");
+ CheckDouble (0, "-0");
+ CheckDouble (0, "0.00");
+ CheckDouble (0, "-0.00");
+ CheckDouble (1, "1");
+ CheckDouble (1.1, "1.1");
+ CheckDouble (-1, "-1");
+ CheckDouble (-1.1, "-1.1");
+ CheckDouble (1e-10, "1e-10");
+ CheckDouble (1e+10, "1e+10");
+ CheckDouble (1e-30, "1e-30");
+ CheckDouble (1e+30, "1e+30");
+
+ CheckDouble (1, "\"1\"");
+ CheckDouble (1.1, "\"1.1\"");
+ CheckDouble (-1, "\"-1\"");
+ CheckDouble (-1.1, "\"-1.1\"");
+
+ CheckDouble (double.NaN, "\"NaN\"");
+ CheckDouble (double.PositiveInfinity, "\"Infinity\"");
+ CheckDouble (double.NegativeInfinity, "\"-Infinity\"");
+
+ ExpectError ("NaN");
+ ExpectError ("Infinity");
+ ExpectError ("-Infinity");
+
+ Assert.AreEqual ("1.1", new JsonPrimitive (1.1).ToString ());
+ Assert.AreEqual ("-1.1", new JsonPrimitive (-1.1).ToString ());
+ Assert.AreEqual ("1E-20", new JsonPrimitive (1e-20).ToString ());
+ Assert.AreEqual ("1E+20", new JsonPrimitive (1e+20).ToString ());
+ Assert.AreEqual ("1E-30", new JsonPrimitive (1e-30).ToString ());
+ Assert.AreEqual ("1E+30", new JsonPrimitive (1e+30).ToString ());
+ Assert.AreEqual ("\"NaN\"", new JsonPrimitive (double.NaN).ToString ());
+ Assert.AreEqual ("\"Infinity\"", new JsonPrimitive (double.PositiveInfinity).ToString ());
+ Assert.AreEqual ("\"-Infinity\"", new JsonPrimitive (double.NegativeInfinity).ToString ());
+
+ Assert.AreEqual ("1E-30", JsonValue.Parse ("1e-30").ToString ());
+ Assert.AreEqual ("1E+30", JsonValue.Parse ("1e+30").ToString ());
+
+ CheckDouble (1);
+ CheckDouble (1.1);
+ CheckDouble (1.25);
+ CheckDouble (-1);
+ CheckDouble (-1.1);
+ CheckDouble (-1.25);
+ CheckDouble (1e-20);
+ CheckDouble (1e+20);
+ CheckDouble (1e-30);
+ CheckDouble (1e+30);
+ CheckDouble (3.1415926535897932384626433);
+ CheckDouble (3.1415926535897932384626433e-20);
+ CheckDouble (3.1415926535897932384626433e+20);
+ CheckDouble (double.NaN);
+ CheckDouble (double.PositiveInfinity);
+ CheckDouble (double.NegativeInfinity);
+ CheckDouble (double.MinValue);
+ CheckDouble (double.MaxValue);
+
+ // A number which needs 17 digits (see http://stackoverflow.com/questions/6118231/why-do-i-need-17-significant-digits-and-not-16-to-represent-a-double)
+ CheckDouble (18014398509481982.0);
+
+ // Values around the smallest positive decimal value
+ CheckDouble (1.123456789e-29);
+ CheckDouble (1.123456789e-28);
+
+ CheckDouble (1.1E-29, "0.000000000000000000000000000011");
+ // This is being parsed as a decimal and rounded to 1e-28, even though it can be more accurately be represented by a double
+ //CheckDouble (1.1E-28, "0.00000000000000000000000000011");
+ }
+
+ // Retry the test with different locales
+ [Test]
+ public void CheckNumbersCulture ()
+ {
+ CultureInfo old = Thread.CurrentThread.CurrentCulture;
+ try {
+ Thread.CurrentThread.CurrentCulture = new CultureInfo ("en");
+ CheckNumbers ();
+ Thread.CurrentThread.CurrentCulture = new CultureInfo ("fr");
+ CheckNumbers ();
+ Thread.CurrentThread.CurrentCulture = new CultureInfo ("de");
+ CheckNumbers ();
+ } finally {
+ Thread.CurrentThread.CurrentCulture = old;
+ }
+ }
}
}
word = (uint)sub;
borrow = (uint)(sub >> 32) & 0x1u;
- data [data.Length - 1] = ~word & store_mask;
+ if ((~word & store_mask) == 0)
+ data = Resize (data, data.Length - 1);
+ else
+ data [data.Length - 1] = ~word & store_mask;
}
if (borrow != 0) //FIXME I believe this can't happen, can someone write a test for it?
throw new Exception ("non zero final carry");
}
-
}
public bool IsEven {
{
long[] values = new long [] {
0, long.MinValue, long.MaxValue, -1, 1L + int.MaxValue, -1L + int.MinValue, 0x1234, 0xFFFFFFFFL, 0x1FFFFFFFFL, -0xFFFFFFFFL, -0x1FFFFFFFFL,
- 0x100000000L, -0x100000000L, 0x100000001L, -0x100000001L };
+ 0x100000000L, -0x100000000L, 0x100000001L, -0x100000001L, 4294967295L, -4294967295L, 4294967296L, -4294967296L };
foreach (var val in values) {
- var a = new BigInteger (val);
- var b = new BigInteger (a.ToByteArray ());
-
- Assert.AreEqual (val, (long)a, "#a_" + val);
- Assert.AreEqual (val, (long)b, "#b_" + val);
+ try {
+ var a = new BigInteger (val);
+ var b = new BigInteger (a.ToByteArray ());
+
+ Assert.AreEqual (val, (long)a, "#a_" + val);
+ Assert.AreEqual (val, (long)b, "#b_" + val);
+ Assert.AreEqual (a, b, "#a == #b (" + val + ")");
+ } catch (Exception e) {
+ Assert.Fail ("could not roundtrip {0}", val);
+ }
}
}
{
object v = ReadCore ();
SkipSpaces ();
- if (r.Read () >= 0)
+ if (ReadChar () >= 0)
throw JsonError (String.Format ("extra characters in JSON input"));
return v;
}
}
while (true) {
SkipSpaces ();
- if (PeekChar () == '}')
+ if (PeekChar () == '}') {
+ ReadChar ();
break;
+ }
string name = ReadStringLiteral ();
SkipSpaces ();
Expect (':');
// It could return either int, long or decimal, depending on the parsed value.
object ReadNumericLiteral ()
{
+ var sb = new StringBuilder ();
+
bool negative = false;
if (PeekChar () == '-') {
negative = true;
- ReadChar ();
- if (PeekChar () < 0)
- throw JsonError ("Invalid JSON numeric literal; extra negation");
+ sb.Append ((char) ReadChar ());
}
int c;
- decimal val = 0;
int x = 0;
bool zeroStart = PeekChar () == '0';
for (; ; x++) {
c = PeekChar ();
if (c < '0' || '9' < c)
break;
- val = val * 10 + (c - '0');
- ReadChar ();
- if (zeroStart && x == 1 && c == '0')
- throw JsonError ("leading multiple zeros are not allowed");
+ sb.Append ((char) ReadChar ());
+ if (zeroStart && x == 1)
+ throw JsonError ("leading zeros are not allowed");
}
+ if (x == 0) // Reached e.g. for "- "
+ throw JsonError ("Invalid JSON numeric literal; no digit found");
// fraction
-
bool hasFrac = false;
- decimal frac = 0;
int fdigits = 0;
if (PeekChar () == '.') {
hasFrac = true;
- ReadChar ();
+ sb.Append ((char) ReadChar ());
if (PeekChar () < 0)
throw JsonError ("Invalid JSON numeric literal; extra dot");
- decimal d = 10;
while (true) {
c = PeekChar ();
if (c < '0' || '9' < c)
break;
- ReadChar ();
- frac += (c - '0') / d;
- d *= 10;
+ sb.Append ((char) ReadChar ());
fdigits++;
}
if (fdigits == 0)
throw JsonError ("Invalid JSON numeric literal; extra dot");
}
- frac = Decimal.Round (frac, fdigits);
c = PeekChar ();
if (c != 'e' && c != 'E') {
if (!hasFrac) {
- if (negative && int.MinValue <= -val ||
- !negative && val <= int.MaxValue)
- return (int) (negative ? -val : val);
- if (negative && long.MinValue <= -val ||
- !negative && val <= long.MaxValue)
- return (long) (negative ? -val : val);
+ int valueInt;
+ if (int.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueInt))
+ return valueInt;
+
+ long valueLong;
+ if (long.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueLong))
+ return valueLong;
+
+ ulong valueUlong;
+ if (ulong.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueUlong))
+ return valueUlong;
}
- var v = val + frac;
- return negative ? -v : v;
- }
-
- // exponent
-
- ReadChar ();
-
- int exp = 0;
- if (PeekChar () < 0)
- throw new ArgumentException ("Invalid JSON numeric literal; incomplete exponent");
+ decimal valueDecimal;
+ if (decimal.TryParse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture, out valueDecimal) && valueDecimal != 0)
+ return valueDecimal;
+ } else {
+ // exponent
+ sb.Append ((char) ReadChar ());
+ if (PeekChar () < 0)
+ throw new ArgumentException ("Invalid JSON numeric literal; incomplete exponent");
- bool negexp = false;
- c = PeekChar ();
- if (c == '-') {
- ReadChar ();
- negexp = true;
- }
- else if (c == '+')
- ReadChar ();
-
- if (PeekChar () < 0)
- throw JsonError ("Invalid JSON numeric literal; incomplete exponent");
- while (true) {
c = PeekChar ();
- if (c < '0' || '9' < c)
- break;
- exp = exp * 10 + (c - '0');
- ReadChar ();
+ if (c == '-') {
+ sb.Append ((char) ReadChar ());
+ }
+ else if (c == '+')
+ sb.Append ((char) ReadChar ());
+
+ if (PeekChar () < 0)
+ throw JsonError ("Invalid JSON numeric literal; incomplete exponent");
+ while (true) {
+ c = PeekChar ();
+ if (c < '0' || '9' < c)
+ break;
+ sb.Append ((char) ReadChar ());
+ }
}
- // it is messy to handle exponent, so I just use Decimal.Parse() with assured JSON format.
- if (negexp)
- return new Decimal ((double) (val + frac) / Math.Pow (10, exp));
- int [] bits = Decimal.GetBits (val + frac);
- return new Decimal (bits [0], bits [1], bits [2], negative, (byte) exp);
+
+ return double.Parse (sb.ToString (), NumberStyles.Float, CultureInfo.InvariantCulture);
}
StringBuilder vb = new StringBuilder ();
}
[Test]
+ [Category ("NotWorking")]
public void CloseTest ()
{
cprs.Open ();
[Test]
[ExpectedException (typeof (InvalidOperationException))]
+ [Category ("NotWorking")]
public void OpenTest4 ()
{
cprs.Open ();
pd.SaveStateComplete = RenderPostBackEvent_OnSaveStateComplete;
t.Invoker = new PageInvoker (pd);
string html = t.Run ();
- File.WriteAllText("response.html", html);
}
public static void RenderPostBackEvent_OnSaveStateComplete (Page p)
else if (op == SocketAsyncOperation.Disconnect)
args.DisconnectCallback (ares);
else if (op == SocketAsyncOperation.Connect)
- args.ConnectCallback ();
+ args.ConnectCallback (ares);
/*
else if (op == Socket.SocketOperation.ReceiveMessageFrom)
else if (op == Socket.SocketOperation.SendPackets)
}
}
- void ConnectCallback ()
+ void ConnectCallback (IAsyncResult ares)
{
try {
- SocketError = (SocketError) Worker.result.error;
+ curSocket.EndConnect (ares);
+ } catch (SocketException se) {
+ SocketError = se.SocketErrorCode;
} finally {
OnCompleted (this);
}
throw new SocketException (error);
}
- if (socket_type == SocketType.Dgram && (ep.Address.Equals (IPAddress.Any) || ep.Address.Equals (IPAddress.IPv6Any)))
+ if (socket_type == SocketType.Dgram && ep != null && (ep.Address.Equals (IPAddress.Any) || ep.Address.Equals (IPAddress.IPv6Any)))
connected = false;
else
connected = true;
underlyingSocket.Send (sendBuffer, 0, buffer.Count + headerLength, SocketFlags.None);
});
}
+
+ const int messageTypeText = 1;
+ const int messageTypeBinary = 2;
+ const int messageTypeClose = 8;
+ static WebSocketMessageType WireToMessageType (byte msgType)
+ {
+
+ if (msgType == messageTypeText)
+ return WebSocketMessageType.Text;
+ if (msgType == messageTypeBinary)
+ return WebSocketMessageType.Binary;
+ return WebSocketMessageType.Close;
+ }
+
+ static byte MessageTypeToWire (WebSocketMessageType type)
+ {
+ if (type == WebSocketMessageType.Text)
+ return messageTypeText;
+ if (type == WebSocketMessageType.Binary)
+ return messageTypeBinary;
+ return messageTypeClose;
+ }
+
public override Task<WebSocketReceiveResult> ReceiveAsync (ArraySegment<byte> buffer, CancellationToken cancellationToken)
{
EnsureWebSocketConnected ();
var isLast = (headerBuffer[0] >> 7) > 0;
var isMasked = (headerBuffer[1] >> 7) > 0;
int mask = 0;
- var type = (WebSocketMessageType)(headerBuffer[0] & 0xF);
+ var type = WireToMessageType ((byte)(headerBuffer[0] & 0xF));
long length = headerBuffer[1] & 0x7F;
int offset = 0;
if (length == 126) {
int WriteHeader (WebSocketMessageType type, ArraySegment<byte> buffer, bool endOfMessage)
{
- var opCode = (byte)type;
+ var opCode = MessageTypeToWire (type);
var length = buffer.Count;
headerBuffer[0] = (byte)(opCode | (endOfMessage ? 0 : 0x80));
{
public enum WebSocketMessageType
{
- Text = 1,
- Binary = 2,
- Close = 8
+ Text = 0,
+ Binary = 1,
+ Close = 2
}
}
System.Net.Sockets/TcpListenerTest.cs
System.Net.Sockets/SocketTest.cs
System.Net.Sockets/SocketAsyncEventArgsTest.cs
+System.Net.Sockets/SocketConnectAsyncTest.cs
System.Net.Sockets/UdpClientTest.cs
System.Net.Sockets/SocketAsyncTest.cs
System.Net.Mail/LinkedResourceTest.cs
--- /dev/null
+using System;
+using System.Collections;
+using System.Threading;
+using System.Net;
+using System.Net.Sockets;
+using NUnit.Framework;
+
+namespace MonoTests.System.Net.Sockets
+{
+ [TestFixture]
+ public class SocketConnectAsyncTest
+ {
+ Socket serverSocket;
+ Socket clientSocket;
+ SocketAsyncEventArgs clientSocketAsyncArgs;
+ ManualResetEvent readyEvent;
+ ManualResetEvent mainEvent;
+ Exception error;
+
+ [TestFixtureSetUp]
+ public void SetUp ()
+ {
+ readyEvent = new ManualResetEvent (false);
+ mainEvent = new ManualResetEvent (false);
+ }
+
+ [TestFixtureTearDown]
+ public void TearDown ()
+ {
+ readyEvent.Close ();
+ mainEvent.Close ();
+ }
+
+ void StartServer()
+ {
+ readyEvent.Reset();
+ mainEvent.Reset();
+ ThreadPool.QueueUserWorkItem (_ => DoWork ());
+ readyEvent.WaitOne ();
+ }
+
+ void StopServer()
+ {
+ if (serverSocket != null)
+ serverSocket.Close ();
+ }
+
+ void DoWork ()
+ {
+ serverSocket = new Socket (
+ AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ serverSocket.Bind (new IPEndPoint (IPAddress.Loopback, 0));
+ serverSocket.Listen (1);
+
+ var async = new SocketAsyncEventArgs ();
+ async.Completed += (s,e) => OnAccepted (e);
+
+ readyEvent.Set ();
+
+ if (!serverSocket.AcceptAsync (async))
+ OnAccepted (async);
+ }
+
+ void OnAccepted (SocketAsyncEventArgs e)
+ {
+ var acceptSocket = e.AcceptSocket;
+ mainEvent.Set ();
+ }
+
+ [Test]
+ [Category("Test")]
+ public void Connect ()
+ {
+ StartServer();
+
+ EndPoint serverEndpoint = serverSocket.LocalEndPoint;
+
+ var m = new ManualResetEvent (false);
+ var e = new SocketAsyncEventArgs ();
+
+ clientSocket = new Socket (
+ AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ clientSocketAsyncArgs = new SocketAsyncEventArgs();
+ clientSocketAsyncArgs.RemoteEndPoint = serverEndpoint;
+ clientSocketAsyncArgs.Completed += (s,o) => {
+ if (o.SocketError != SocketError.Success)
+ error = new SocketException ((int)o.SocketError);
+ m.Set ();
+ };
+ bool res = clientSocket.ConnectAsync(clientSocketAsyncArgs);
+ if (res) {
+ if (!m.WaitOne (1500))
+ throw new TimeoutException ();
+ }
+
+ if (!mainEvent.WaitOne (1500))
+ throw new TimeoutException ();
+ if (error != null)
+ throw error;
+
+ m.Reset ();
+ mainEvent.Reset ();
+
+ StopServer();
+
+ // Try again to non-listening endpoint, expect error
+
+ error = null;
+ clientSocket = new Socket (
+ AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ clientSocketAsyncArgs = new SocketAsyncEventArgs ();
+ clientSocketAsyncArgs.RemoteEndPoint = serverEndpoint;
+ clientSocketAsyncArgs.Completed += (s,o) => {
+ if (o.SocketError != SocketError.Success)
+ error = new SocketException ((int)o.SocketError);
+ m.Set ();
+ };
+ res = clientSocket.ConnectAsync (clientSocketAsyncArgs);
+ if (res) {
+ if (!m.WaitOne (1500))
+ throw new TimeoutException ();
+ }
+
+ Assert.IsTrue (error != null, "Connect - no error");
+ SocketException socketException = (SocketException)error;
+ Assert.IsTrue(socketException.ErrorCode == (int)SocketError.ConnectionRefused);
+
+ m.Reset ();
+ mainEvent.Reset ();
+ }
+
+ }
+}
\ No newline at end of file
{
Socket sock = (Socket)asyncResult.AsyncState;
- sock.EndConnect (asyncResult);
+ try {
+ sock.EndConnect (asyncResult);
+ } catch (Exception e) {
+ Console.WriteLine ("BCCallback exception:");
+ Console.WriteLine (e);
+
+ throw;
+ }
+
BCConnected = true;
BCCalledBack.Set ();
/* Longer wait here, because the ms runtime
* takes a lot longer to not connect
*/
+ /*
if (BCCalledBack.WaitOne (30000, false) == false) {
Assert.Fail ("BeginConnectMultiple wait failed");
}
+ */
+
+ var sw = new global::System.Diagnostics.Stopwatch ();
+ sw.Start ();
+
+ BCCalledBack.WaitOne ();
+
+ sw.Stop ();
+ Console.WriteLine (sw.ElapsedMilliseconds);
+
+ if (sw.ElapsedMilliseconds > 30000)
+ Assert.Fail ("BeginConnectMultiple wait failed");
Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
}
}
- void TestTimeOut (string url)
+ void TestTimeOut (string url, WebExceptionStatus expectedExceptionStatus)
{
var timeoutWorker = new TimeoutTestHelper (url, three_seconds_in_milliseconds);
var threadStart = new ThreadStart (timeoutWorker.LaunchWebRequest);
Assert.Fail ("Should not be reached, timeout exception was not thrown and webrequest managed to retrieve an incorrect body: " + timeoutWorker.Body);
}
- Assert.IsNotNull (timeoutWorker.Exception,
- "Timeout exception was not thrown");
+ Assert.IsNotNull (timeoutWorker.Exception, "Exception was not thrown");
var webEx = timeoutWorker.Exception as WebException;
Assert.IsNotNull (webEx, "Exception thrown should be WebException, but was: " +
timeoutWorker.Exception.GetType ().FullName);
- Assert.AreEqual (webEx.Status, WebExceptionStatus.Timeout,
- "WebException was thrown, but with a wrong status (should be timeout): " + webEx.Status);
+ Assert.AreEqual (expectedExceptionStatus, webEx.Status,
+ "WebException was thrown, but with a wrong status (should be " + expectedExceptionStatus + "): " + webEx.Status);
Assert.IsFalse (timeoutWorker.End > (timeoutWorker.Start + TimeSpan.FromMilliseconds (three_seconds_in_milliseconds + 500)),
"Timeout exception should have been thrown shortly after timeout is reached, however it was at least half-second late");
{
responder.Start ();
- TestTimeOut (url);
+ TestTimeOut (url, WebExceptionStatus.Timeout);
responder.Stop ();
}
}
[Test] // 2nd possible case of https://bugzilla.novell.com/show_bug.cgi?id=MONO74177
- public void TestTimeoutPropertyWithServerThatDoesntExist ()
+ public void TestTimeoutWithEndpointThatDoesntExistThrowsConnectFailureBeforeTimeout ()
{
- string url = "http://10.128.200.100:8271/"; // some endpoint that is unlikely to exist
+ string url = "http://127.0.0.1:8271/"; // some endpoint that is unlikely to exist
- TestTimeOut (url);
+ // connecting to a non-existing endpoint should throw a ConnectFailure before the timeout is reached
+ TestTimeOut (url, WebExceptionStatus.ConnectFailure);
}
const string response_of_timeout_handler = "RESPONSE_OF_TIMEOUT_HANDLER";
if (node.Attributes["TargetMode"] != null)
mode = (TargetMode) Enum.Parse (typeof(TargetMode), node.Attributes ["TargetMode"].Value);
- CreateRelationship (new Uri (node.Attributes["Target"].Value.ToString(), UriKind.Relative),
+ CreateRelationship (new Uri (node.Attributes["Target"].Value.ToString(), UriKind.RelativeOrAbsolute),
mode,
node.Attributes["Type"].Value.ToString (),
node.Attributes["Id"].Value.ToString (),
if (ContentType != null)
coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "contentType", NSPackageProperties)).InnerXml = ContentType;
if (Created.HasValue)
- coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dcterms", "created", NSDcTerms)).InnerXml = Created.Value.ToString ();
+ {
+ XmlAttribute att = doc.CreateAttribute ("xsi", "type", NSXsi);
+ att.Value = "dcterms:W3CDTF";
+
+ XmlNode created = coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dcterms", "created", NSDcTerms));
+ created.Attributes.Append (att);
+ created.InnerXml = Created.Value.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss") + "Z";
+ }
if (Creator != null)
coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dc", "creator", NSDc)).InnerXml = Creator;
if (Description != null)
if (LastModifiedBy != null)
coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "lastModifiedBy", NSPackageProperties)).InnerXml = LastModifiedBy;
if (LastPrinted.HasValue)
- coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "lastPrinted", NSPackageProperties)).InnerXml = LastPrinted.Value.ToString ();
+ {
+ XmlNode lastPrinted = coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "lastPrinted", NSPackageProperties));
+
+ lastPrinted.InnerXml = LastPrinted.Value.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss") + "Z";
+ }
if (Revision != null)
coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "revision", NSPackageProperties)).InnerXml = Revision;
if (Subject != null)
XmlNode modified = coreProperties.AppendChild (doc.CreateNode (XmlNodeType.Element, "dcterms", "modified", NSDcTerms));
modified.Attributes.Append (att);
- modified.InnerXml = Modified.Value.ToString ();
+ modified.InnerXml = Modified.Value.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss") + "Z";
}
doc.WriteContentTo (writer);
@mkdir -p $(dir $@)
$(CSCOMPILE) -target:library -r:$(corlib) -warn:0 -out:$@ $^
-$(vtsdir)/$(PROFILE)_TestLib/BinarySerializationOverVersions.exe: $(vtsdir)/BinarySerializationOverVersions.cs $(vtsdir)/$(PROFILE)_TestLib/1.0/Address.dll
+$(vtsdir)/$(PROFILE)_TestLib/BinarySerializationOverVersions.exe: $(vtsdir)/BinarySerializationOverVersions.cs $(vtsdir)/$(PROFILE)_TestLib/1.0/Address.dll $(test_nunit_dep)
$(CSCOMPILE) $(test_nunit_ref) -warn:0 -r:$(corlib) \
-r:$(vtsdir)/$(PROFILE)_TestLib/1.0/Address.dll \
$(vtsdir)/BinarySerializationOverVersions.cs -out:$@
#if NET_4_0
using System;
-using System.Threading;
namespace System.Threading
{
public struct CancellationTokenRegistration: IDisposable, IEquatable<CancellationTokenRegistration>
{
- int id;
- CancellationTokenSource source;
+ readonly int id;
+ readonly CancellationTokenSource source;
internal CancellationTokenRegistration (int id, CancellationTokenSource source)
{
#region IEquatable<CancellationTokenRegistration> implementation
public bool Equals (CancellationTokenRegistration other)
{
- return this.id == other.id && this.source == other.source;
+ return id == other.id && source == other.source;
}
public static bool operator== (CancellationTokenRegistration left, CancellationTokenRegistration right)
public override bool Equals (object obj)
{
- return (obj is CancellationTokenRegistration) ? Equals ((CancellationTokenRegistration)obj) : false;
+ return (obj is CancellationTokenRegistration) && Equals ((CancellationTokenRegistration)obj);
}
}
}
// Miguel de Icaza (miguel@ximian.com)
// Daniel Stodden (stodden@in.tum.de)
// Dietmar Maurer (dietmar@ximian.com)
+// Marek Safar (marek.safar@gmail.com)
//
// (C) Ximian, Inc. http://www.ximian.com
-//
-
-//
// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright 2014 Xamarin, Inc (http://www.xamarin.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
namespace System
{
/* Contains the rarely used fields of Delegate */
- class DelegateData {
+ sealed class DelegateData
+ {
+ public static readonly DelegateData ClosedDelegateForStaticMethod = new DelegateData ();
+
public Type target_type;
public string method_name;
}
return null;
bool argsMatch;
+ DelegateData delegate_data = null;
+
if (target != null) {
if (!method.IsStatic) {
argsMatch = arg_type_match_this (target.GetType (), method.DeclaringType, true);
} else {
argsMatch = arg_type_match (target.GetType (), args [0].ParameterType);
for (int i = 1; i < args.Length; i++)
- argsMatch &= arg_type_match (delargs [i - 1].ParameterType, args [i].ParameterType);
+ argsMatch &= arg_type_match (delargs [i - 1].ParameterType, args [i].ParameterType);
+
+ delegate_data = DelegateData.ClosedDelegateForStaticMethod;
}
} else {
if (!method.IsStatic) {
argsMatch = !(args [0].ParameterType.IsValueType || args [0].ParameterType.IsByRef) && allowClosed;
for (int i = 0; i < delargs.Length; i++)
argsMatch &= arg_type_match (delargs [i].ParameterType, args [i + 1].ParameterType);
+
+ delegate_data = DelegateData.ClosedDelegateForStaticMethod;
} else {
argsMatch = true;
for (int i = 0; i < args.Length; i++)
Delegate d = CreateDelegate_internal (type, target, method, throwOnBindFailure);
if (d != null)
d.original_method_info = method;
+ if (delegate_data != null)
+ d.data = delegate_data;
return d;
}
method_info = m_target.GetType ().GetMethod (data.method_name, mtypes);
}
- if (Method.IsStatic && (args != null ? args.Length : 0) == Method.GetParametersCount () - 1) {
+ var target = m_target;
+ if (Method.IsStatic) {
+ //
// The delegate is bound to m_target
- if (args != null) {
- object[] newArgs = new object [args.Length + 1];
- args.CopyTo (newArgs, 1);
- newArgs [0] = m_target;
- args = newArgs;
- } else {
- args = new object [] { m_target };
+ //
+ if (data == DelegateData.ClosedDelegateForStaticMethod) {
+ if (args == null) {
+ args = new [] { target };
+ } else {
+ Array.Resize (ref args, args.Length + 1);
+ Array.Copy (args, 0, args, 1, args.Length - 1);
+ args [0] = target;
+ }
+
+ target = null;
+ }
+ } else {
+ if (m_target == null && args != null && args.Length > 0) {
+ target = args [0];
+ Array.Copy (args, 1, args, 0, args.Length - 1);
+ Array.Resize (ref args, args.Length - 1);
}
- return Method.Invoke (null, args);
}
- return Method.Invoke (m_target, args);
+ return Method.Invoke (target, args);
}
public virtual object Clone ()
if (GC.MaxGeneration == 0) /*Boehm doesn't handle ephemerons */
Assert.Ignore ("Not working on Boehm.");
var cwt = new ConditionalWeakTable <object,object> ();
- List<object> keepAlive;
- List<WeakReference> keys;
- FillStuff (cwt, out keepAlive, out keys);
+ List<object> keepAlive = null;
+ List<WeakReference> keys = null;
+ Thread t = new Thread (delegate () {
+ FillStuff (cwt, out keepAlive, out keys);
+ });
+ t.Start ();
+ t.Join ();
GC.Collect ();
Assert.IsTrue (t.Wait (3000), "#0");
Assert.AreEqual (0, t.Result, "#1");
Assert.AreEqual (0, b.InlineCalls, "#2b");
- Assert.AreEqual (2, a.QueueCalls, "#3a");
+ Assert.IsTrue (a.QueueCalls == 1 || a.QueueCalls == 2, "#3a");
Assert.AreEqual (1, b.QueueCalls, "#3b");
}
SynchronizationContext.SetSynchronizationContext (syncContext);
syncContext.Post (delegate {
- Go2 (syncContext);
+ Task t = new Task (delegate() { });
+ Go2 (syncContext, t);
+ t.Start ();
}, null);
// Custom message loop
Thread.Sleep (0);
}
- Assert.AreEqual ("132", progress);
+ Assert.AreEqual ("13xa2", progress);
}
- async void Go2 (SynchronizationContext ctx)
+ async void Go2 (SynchronizationContext ctx, Task t)
{
- await Wait2 (ctx);
+ await Wait2 (ctx, t);
+
+ progress += "a";
if (mre.WaitOne (5000))
progress += "2";
+ else
+ progress += "b";
}
- async Task Wait2 (SynchronizationContext ctx)
+ async Task Wait2 (SynchronizationContext ctx, Task t)
{
- await Task.Delay (10); // Force block suspend/return
+ await t; // Force block suspend/return
ctx.Post (l => {
progress += "3";
mre.Set ();
+ progress += "x";
}, null);
progress += "1";
args.SetObserved ();
};
var inner = new ApplicationException ();
- Task.Factory.StartNew (() => { throw inner; });
+ Thread t = new Thread (delegate () {
+ Task.Factory.StartNew (() => { Console.WriteLine ("HIT!"); throw inner; });
+ });
+ t.Start ();
+ t.Join ();
Thread.Sleep (1000);
GC.Collect ();
Thread.Sleep (1000);
int called = 0;
var cts = new CancellationTokenSource ();
cts.Token.Register (() => called++);
- cts.CancelAfter (20);
+ cts.CancelAfter (50);
cts.Dispose ();
- Thread.Sleep (50);
+ Thread.Sleep (100);
Assert.AreEqual (0, called, "#1");
}
typeof (Action),
this.GetType ().GetMethod ("Banga"));
}
-#if !MONOTOUCH
+
[Test] // #664205
- public void DynamicInvokeNullTarget ()
+ public void DynamicInvokeClosedStatic ()
{
- var method = new DynamicMethod ("test", typeof (int), new [] { typeof (object) }, true);
- var il = method.GetILGenerator ();
- il.Emit (OpCodes.Ldc_I4, 42);
- il.Emit (OpCodes.Ret);
+ var d1 = Delegate.CreateDelegate (typeof(Func<int>), null, typeof(DelegateTest).GetMethod ("DynamicInvokeClosedStaticDelegate_CB"));
+ Assert.AreEqual (1, d1.DynamicInvoke (), "#1");
- var @delegate = method.CreateDelegate (typeof (Func<int>), null);
+ var d2 = Delegate.CreateDelegate (typeof(Func<int>), "arg", typeof(DelegateTest).GetMethod ("DynamicInvokeClosedStaticDelegate_CB"));
+ Assert.AreEqual (2, d2.DynamicInvoke (), "#2");
+ }
- Assert.AreEqual (42, (int) @delegate.DynamicInvoke ());
+ public static int DynamicInvokeClosedStaticDelegate_CB (string instance)
+ {
+ switch (instance) {
+ case null:
+ return 1;
+ case "arg":
+ return 2;
+ default:
+ Assert.Fail ();
+ return -1;
+ }
}
-#endif
+
+ [Test]
+ public void DynamicInvokeOpenInstanceDelegate ()
+ {
+ var d1 = Delegate.CreateDelegate (typeof (Func<DelegateTest, int>), typeof(DelegateTest).GetMethod ("DynamicInvokeOpenInstanceDelegate_CB"));
+ Assert.AreEqual (5, d1.DynamicInvoke (new DelegateTest ()), "#1");
+
+ var d3 = (Func<DelegateTest, int>) d1;
+ Assert.AreEqual (5, d3 (null), "#2");
+ }
+
+ public int DynamicInvokeOpenInstanceDelegate_CB ()
+ {
+ return 5;
+ }
+
+ [Test]
+ public void DynamicInvoke_InvalidArguments ()
+ {
+ Delegate d = new Func<int, int> (TestMethod);
+
+ try {
+ d.DynamicInvoke (null);
+ Assert.Fail ("#1");
+ } catch (TargetParameterCountException) {
+ }
+
+ try {
+ d.DynamicInvoke (new object [0]);
+ Assert.Fail ("#2");
+ } catch (TargetParameterCountException) {
+ }
+ }
+
+ public static int TestMethod (int i)
+ {
+ throw new NotSupportedException ();
+ }
+
#endif
public static void CreateDelegateOfStaticMethodBoundToNull_Helper (object[] args) {}
} catch (ArgumentException) {}
}
- private static Func<Int32, Int32, bool> Int32D = (x, y) => (x & y) == y;
-
[Test]
public void EnumBaseTypeConversion () {
+ Func<int, int, bool> dm = Int32D2;
var d =
- Delegate.CreateDelegate(typeof (Func<StringComparison,
- StringComparison, bool>), Int32D.Method) as
+ Delegate.CreateDelegate(typeof (Func<StringComparison, StringComparison, bool>), dm.Method) as
Func<StringComparison, StringComparison, bool>;
Assert.IsTrue (d (0, 0));
}
+ static bool Int32D2 (int x, int y)
+ {
+ return (x & y) == y;
+ }
+
public class B {
public virtual string retarg3 (string s) {
ObjectEntryToParams (inner, out caption, out element);
// Don't add if the backing file doesn't exist
if (!File.Exists (element)) {
- Console.Error.WriteLine ("File `{0}' referenced in TOC but it doesn't exist.", element);
+ Console.Error.WriteLine ("Warning: File `{0}' referenced in TOC but it doesn't exist. It will be ignored.", element);
continue;
}
using (var file = File.OpenRead (element))
--- /dev/null
+// CS0121: The call is ambiguous between the following methods or properties: `A.B.X.Test(int)' and `A.C.X.Test(int)'
+// Line: 31
+
+using A.B.X;
+using A.C.X;
+
+namespace A.B
+{
+ static class X
+ {
+ public static void Test (int o)
+ {
+ }
+ }
+}
+
+namespace A.C
+{
+ static class X
+ {
+ public static int Test (int o)
+ {
+ }
+ }
+}
+
+class M
+{
+ public static void Main ()
+ {
+ Test (0);
+ }
+}
\ No newline at end of file
// CS0138: `System.Console' is a type not a namespace. A using namespace directive can only be applied to namespaces
// Line: 5
+// Compiler options: -langversion:5
using System;
using System.Console;
--- /dev/null
+// CS0151: A switch expression of type `X?' cannot be converted to an integral type, bool, char, string, enum or nullable type
+// Line: 15
+
+struct X
+{
+ public static implicit operator int (X x)
+ {
+ return 1;
+ }
+
+ static void Main ()
+ {
+ X? x = null;
+ switch (x) {
+ default:
+ break;
+ }
+ }
+}
--- /dev/null
+// CS0151: A switch expression of type `S1?' cannot be converted to an integral type, bool, char, string, enum or nullable type
+// Line: 24
+
+using System;
+
+struct S1
+{
+ public static implicit operator int? (S1? s)
+ {
+ throw new ApplicationException ();
+ }
+
+ public static implicit operator int (S1? s)
+ {
+ throw new ApplicationException ();
+ }
+}
+
+class C
+{
+ public static int Main ()
+ {
+ S1? s1 = new S1 ();
+ switch (s1)
+ {
+ default:
+ return 1;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0151: A switch expression of type `X?' cannot be converted to an integral type, bool, char, string, enum or nullable type
+// Line: 19
+
+struct X
+{
+ public static implicit operator int? (X x)
+ {
+ return 1;
+ }
+
+ static void Main ()
+ {
+ X? x = null;
+ switch (x) {
+ default:
+ break;
+ }
+ }
+}
--- /dev/null
+// CS0457: Ambiguous user defined operators `D.implicit operator D(System.Action)' and `D.explicit operator D(Foo)' when converting from `method group' to `D'
+// Line: 25
+
+using System;
+
+public delegate void Foo ();
+
+class D
+{
+ public static implicit operator D (Action d)
+ {
+ return new D ();
+ }
+
+ public static explicit operator D (Foo d)
+ {
+ return new D ();
+ }
+}
+
+class Program
+{
+ static void Main()
+ {
+ D d = (D) Main;
+ }
+}
+++ /dev/null
-// CS0573: `A.a': Structs cannot have instance field initializers
-// Line: 5
-
-partial struct A {
- int a = 1;
-}
+++ /dev/null
-// CS0573: `A.a': Structs cannot have instance field initializers
-// Line: 5
-struct A {
- int a = 1;
-}
-
-class D {
- static void Main ()
- {
- A [] a = new A [10];
-
- }
-}
-// CS0837: The `as' operator cannot be applied to a lambda expression or anonymous method
-// Line: 15
-
+// CS0837: The `as' operator cannot be applied to a lambda expression, anonymous method, or method group
+// Line: 14
class X
{
--- /dev/null
+// CS0837: The `is' operator cannot be applied to a lambda expression, anonymous method, or method group
+// Line: 10
+
+using System;
+
+class Test
+{
+ static void Main ()
+ {
+ var res = Main is object;
+ }
+}
\ No newline at end of file
--- /dev/null
+// CS0837: The `is' operator cannot be applied to a lambda expression, anonymous method, or method group
+// Line: 11
+
+using System;
+using System.Linq.Expressions;
+
+class C
+{
+ public static void Main ()
+ {
+ Expression<Func<bool>> e = () => "1".ToString is string;
+ }
+}
\ No newline at end of file
-// CS0837: The `is' operator cannot be applied to a lambda expression or anonymous method
+// CS0837: The `is' operator cannot be applied to a lambda expression, anonymous method, or method group
// Line: 8
class X
+++ /dev/null
-// CS0840: `Test.Property.get' must have a body because it is not marked abstract or extern. The property can be automatically implemented when you define both accessors
-// Line: 7
-
-
-public abstract class Test
-{
- public string Property { get; }
-}
--- /dev/null
+// CS1501: No overload for method `Foo' takes `0' arguments
+// Line: 12
+
+class C
+{
+ static void Foo (string foo, params object [] moreFoo)
+ {
+ }
+
+ static void Main ()
+ {
+ Foo ();
+ }
+}
\ No newline at end of file
-// CS1644: Feature `automatically implemented properties' cannot be used because it is not part of the C# 2.0 language specification
+// CS1644: Feature `auto-implemented properties' cannot be used because it is not part of the C# 2.0 language specification
// Line: 7
// Compiler options: -langversion:ISO-2
--- /dev/null
+// CS1644: Feature `auto-implemented property initializer' cannot be used because it is not part of the C# 5.0 language specification
+// Line: 7
+// Compiler options: -langversion:5
+
+class C
+{
+ public static int P { get; } = 4;
+}
\ No newline at end of file
--- /dev/null
+// CS1650: Fields of static readonly field `C<T>.t' cannot be assigned to (except in a static constructor or a variable initializer)
+// Line: 17
+
+using System;
+
+interface I
+{
+ int X { get; set; }
+}
+
+class C<T> where T : struct, I
+{
+ static readonly T t;
+
+ public static void Foo ()
+ {
+ t.X = 42;
+ }
+}
+++ /dev/null
-// CS1953: An expression tree cannot contain an expression with method group
-// Line: 11
-
-using System;
-using System.Linq.Expressions;
-
-class C
-{
- public static void Main ()
- {
- Expression<Func<bool>> e = () => "1".ToString is string;
- }
-}
\ No newline at end of file
--- /dev/null
+// CS7007: `X' is not a static class. A using namespace directive can only be applied to static classes or namespace
+// Line: 5
+// Compiler options: -langversion:6
+
+using X;
+
+class X
+{
+}
\ No newline at end of file
--- /dev/null
+// CS8050: `C.P': Only auto-implemented properties can have initializers
+// Line: 6
+
+abstract class C
+{
+ public abstract int P { get; } = 4;
+}
\ No newline at end of file
--- /dev/null
+// CS8051: Auto-implemented property `Test.Property' must have set accessor or initializer
+// Line: 6
+
+public abstract class Test
+{
+ public string Property { get; }
+}
--- /dev/null
+// CS8052: Auto-implemented property `V.P' must have get accessor
+// Line: 6
+
+class V
+{
+ public object P { set; } = 1;
+}
\ No newline at end of file
--- /dev/null
+// CS8053: `I.P': Properties inside interfaces cannot have initializers
+// Line: 6
+
+interface I
+{
+ int P { get; } = 4;
+}
\ No newline at end of file
--- /dev/null
+// CS0573: `A.a': Structs without explicit constructors cannot contain members with initializers
+// Line: 5
+
+partial struct A {
+ int a = 1;
+}
--- /dev/null
+// CS0573: `A.a': Structs without explicit constructors cannot contain members with initializers
+// Line: 5
+
+struct A {
+ int a = 1;
+}
--- /dev/null
+// CS8054: `S.P': Structs without explicit constructors cannot contain members with initializers
+// Line: 6
+
+struct S
+{
+ public decimal P { get; } = -3;
+}
\ No newline at end of file
Modifiers modifiers;
TypeDefinition parent = null;
TypeParameters hoisted_tparams = null;
+ ParametersCompiled method_parameters = parameters;
var src_block = Block.Original.Explicit;
if (src_block.HasCapturedVariable || src_block.HasCapturedThis) {
parent = storey = ec.CurrentAnonymousMethod.Storey;
modifiers = Modifiers.STATIC | Modifiers.PRIVATE;
+
+ //
+ // Convert generated method to closed delegate method where unused
+ // this argument is generated during compilation which speeds up dispatch
+ // by about 25%
+ //
+
+ //
+ // Disabled for now due to JIT bug
+ //
+ //method_parameters = ParametersCompiled.Prefix (method_parameters,
+ // new Parameter (null, null, 0, null, loc), ec.Module.Compiler.BuiltinTypes.Object);
}
if (storey == null && hoisted_tparams == null)
return new AnonymousMethodMethod (parent,
this, storey, new TypeExpression (ReturnType, Location), modifiers,
- member_name, parameters);
+ member_name, method_parameters);
}
protected override Expression DoResolve (ResolveContext ec)
}
bool is_static = (method.ModFlags & Modifiers.STATIC) != 0;
- if (is_static && am_cache == null) {
+ if (is_static && am_cache == null && !ec.IsStaticConstructor) {
//
// Creates a field cache to store delegate instance if it's not generic
//
ordered.Add (arg);
}
+ public override void FlowAnalysis (FlowAnalysisContext fc, List<MovableArgument> movable = null)
+ {
+ foreach (var arg in ordered) {
+ if (arg.ArgType != Argument.AType.Out)
+ arg.FlowAnalysis (fc);
+ }
+
+ base.FlowAnalysis (fc, ordered);
+ }
+
public override Arguments Emit (EmitContext ec, bool dup_args, bool prepareAwait)
{
foreach (var a in ordered) {
return null;
}
- public void FlowAnalysis (FlowAnalysisContext fc)
+ public virtual void FlowAnalysis (FlowAnalysisContext fc, List<MovableArgument> movable = null)
{
bool has_out = false;
foreach (var arg in args) {
continue;
}
- arg.FlowAnalysis (fc);
+ if (movable == null) {
+ arg.FlowAnalysis (fc);
+ continue;
+ }
+
+ var ma = arg as MovableArgument;
+ if (ma != null && !movable.Contains (ma))
+ arg.FlowAnalysis (fc);
}
if (!has_out)
throw new NotImplementedException ();
}
+ public void EmitCatchBlock (EmitContext ec)
+ {
+ var catch_value = LocalVariable.CreateCompilerGenerated (ec.Module.Compiler.BuiltinTypes.Exception, block, Location);
+
+ ec.BeginCatchBlock (catch_value.Type);
+ catch_value.EmitAssign (ec);
+
+ ec.EmitThis ();
+ ec.EmitInt ((int) IteratorStorey.State.After);
+ ec.Emit (OpCodes.Stfld, storey.PC.Spec);
+
+ ((AsyncTaskStorey) Storey).EmitSetException (ec, new LocalVariableReference (catch_value, Location));
+
+ ec.Emit (OpCodes.Leave, move_next_ok);
+ ec.EndExceptionBlock ();
+
+ }
+
protected override void EmitMoveNextEpilogue (EmitContext ec)
{
var storey = (AsyncTaskStorey) Storey;
return new StringConstant (ec.BuiltinTypes, (string)left.GetValue () + (string)right.GetValue (),
left.Location);
- if (lt == InternalType.NullLiteral)
+ if (lt == InternalType.NullLiteral || left.IsNull)
return new StringConstant (ec.BuiltinTypes, "" + right.GetValue (), left.Location);
- if (rt == InternalType.NullLiteral)
+ if (rt == InternalType.NullLiteral || right.IsNull)
return new StringConstant (ec.BuiltinTypes, left.GetValue () + "", left.Location);
return null;
base.Emit ();
}
+ bool HasExplicitConstructor ()
+ {
+ foreach (var m in Members) {
+ var c = m as Constructor;
+ if (c == null)
+ continue;
+
+ if (!c.ParameterInfo.IsEmpty)
+ return true;
+ }
+
+ return false;
+ }
+
public override bool IsUnmanagedType ()
{
if (has_unmanaged_check_done)
public override void RegisterFieldForInitialization (MemberCore field, FieldInitializer expression)
{
- if ((field.ModFlags & Modifiers.STATIC) == 0) {
- Report.Error (573, field.Location, "`{0}': Structs cannot have instance field initializers",
+ if ((field.ModFlags & Modifiers.STATIC) == 0 && !HasExplicitConstructor ()) {
+ Report.Error (8054, field.Location, "`{0}': Structs without explicit constructors cannot contain members with initializers",
field.GetSignatureForError ());
+
return;
}
+
base.RegisterFieldForInitialization (field, expression);
}
-
}
/// <summary>
get { return member_context.IsStatic; }
}
+ public bool IsStaticConstructor {
+ get {
+ return member_context.IsStatic && (flags & Options.ConstructorScope) != 0;
+ }
+ }
+
public bool IsAnonymousStoreyMutateRequired {
get {
return CurrentAnonymousMethod != null &&
//
static class Convert
{
+ [Flags]
+ public enum UserConversionRestriction
+ {
+ None = 0,
+ ImplicitOnly = 1,
+ ProbingOnly = 1 << 1,
+ NullableSourceOnly = 1 << 2
+
+ }
//
// From a one-dimensional array-type S[] to System.Collections.IList<T> and base
// interfaces of this interface, provided there is an implicit reference conversion
//
public static bool ImplicitConversionExists (ResolveContext ec, Expression expr, TypeSpec target_type)
{
- if (ImplicitStandardConversionExists (expr, target_type))
+ if (ImplicitStandardConversionExists (ec, expr, target_type))
return true;
if (expr.Type == InternalType.AnonymousMethod) {
return ame.ImplicitStandardConversionExists (ec, target_type);
}
+ // Conversion from __arglist to System.ArgIterator
+ if (expr.Type == InternalType.Arglist)
+ return target_type == ec.Module.PredefinedTypes.ArgIterator.TypeSpec;
+
+ return UserDefinedConversion (ec, expr, target_type,
+ UserConversionRestriction.ImplicitOnly | UserConversionRestriction.ProbingOnly, Location.Null) != null;
+ }
+
+ public static bool ImplicitStandardConversionExists (ResolveContext rc, Expression expr, TypeSpec target_type)
+ {
if (expr.eclass == ExprClass.MethodGroup) {
- if (target_type.IsDelegate && ec.Module.Compiler.Settings.Version != LanguageVersion.ISO_1) {
+ if (target_type.IsDelegate && rc.Module.Compiler.Settings.Version != LanguageVersion.ISO_1) {
MethodGroupExpr mg = expr as MethodGroupExpr;
if (mg != null)
- return DelegateCreation.ImplicitStandardConversionExists (ec, mg, target_type);
+ return DelegateCreation.ImplicitStandardConversionExists (rc, mg, target_type);
}
return false;
}
- // Conversion from __arglist to System.ArgIterator
- if (expr.Type == InternalType.Arglist)
- return target_type == ec.Module.PredefinedTypes.ArgIterator.TypeSpec;
-
- return UserDefinedConversion (ec, expr, target_type, true, true, Location.Null) != null;
+ return ImplicitStandardConversionExists (expr, target_type);
}
//
// by making use of FindMostEncomp* methods. Applies the correct rules separately
// for explicit and implicit conversion operators.
//
- static TypeSpec FindMostSpecificSource (List<MethodSpec> list, TypeSpec sourceType, Expression source, bool apply_explicit_conv_rules)
+ static TypeSpec FindMostSpecificSource (ResolveContext rc, List<MethodSpec> list, TypeSpec sourceType, Expression source, bool apply_explicit_conv_rules)
{
TypeSpec[] src_types_set = null;
var candidate_set = new List<TypeSpec> ();
foreach (TypeSpec param_type in src_types_set){
- if (ImplicitStandardConversionExists (source, param_type))
+ if (ImplicitStandardConversionExists (rc, source, param_type))
candidate_set.Add (param_type);
}
- if (candidate_set.Count != 0)
+ if (candidate_set.Count != 0) {
+ if (source.eclass == ExprClass.MethodGroup)
+ return InternalType.FakeInternalType;
+
return FindMostEncompassedType (candidate_set);
+ }
}
//
/// </summary>
static public Expression ImplicitUserConversion (ResolveContext ec, Expression source, TypeSpec target, Location loc)
{
- return UserDefinedConversion (ec, source, target, true, false, loc);
+ return UserDefinedConversion (ec, source, target, UserConversionRestriction.ImplicitOnly, loc);
}
/// <summary>
/// </summary>
static Expression ExplicitUserConversion (ResolveContext ec, Expression source, TypeSpec target, Location loc)
{
- return UserDefinedConversion (ec, source, target, false, false, loc);
+ return UserDefinedConversion (ec, source, target, 0, loc);
}
- static void FindApplicableUserDefinedConversionOperators (IList<MemberSpec> operators, Expression source, TypeSpec target, bool implicitOnly, ref List<MethodSpec> candidates)
+ static void FindApplicableUserDefinedConversionOperators (ResolveContext rc, IList<MemberSpec> operators, Expression source, TypeSpec target, UserConversionRestriction restr, ref List<MethodSpec> candidates)
{
if (source.Type.IsInterface) {
// Neither A nor B are interface-types
continue;
var t = op.Parameters.Types[0];
- if (source.Type != t && !ImplicitStandardConversionExists (source, t)) {
- if (implicitOnly)
+ if (source.Type != t && !ImplicitStandardConversionExists (rc, source, t)) {
+ if ((restr & UserConversionRestriction.ImplicitOnly) != 0)
continue;
if (!ImplicitStandardConversionExists (new EmptyExpression (t), source.Type))
- continue;
+ continue;
}
+ if ((restr & UserConversionRestriction.NullableSourceOnly) != 0 && !t.IsNullableType)
+ continue;
+
t = op.ReturnType;
if (t.IsInterface)
t = Nullable.NullableInfo.GetUnderlyingType (t);
if (!ImplicitStandardConversionExists (new EmptyExpression (t), target)) {
- if (implicitOnly)
+ if ((restr & UserConversionRestriction.ImplicitOnly) != 0)
continue;
if (texpr == null)
//
// User-defined conversions
//
- static Expression UserDefinedConversion (ResolveContext ec, Expression source, TypeSpec target, bool implicitOnly, bool probingOnly, Location loc)
+ public static Expression UserDefinedConversion (ResolveContext rc, Expression source, TypeSpec target, UserConversionRestriction restr, Location loc)
{
List<MethodSpec> candidates = null;
TypeSpec target_type = target;
Expression source_type_expr;
bool nullable_source = false;
+ var implicitOnly = (restr & UserConversionRestriction.ImplicitOnly) != 0;
if (source_type.IsNullableType) {
// No unwrapping conversion S? -> T for non-reference types
var operators = MemberCache.GetUserOperator (source_type, Operator.OpType.Implicit, declared_only);
if (operators != null) {
- FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, implicitOnly, ref candidates);
+ FindApplicableUserDefinedConversionOperators (rc, operators, source_type_expr, target_type, restr, ref candidates);
}
if (!implicitOnly) {
operators = MemberCache.GetUserOperator (source_type, Operator.OpType.Explicit, declared_only);
if (operators != null) {
- FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, false, ref candidates);
+ FindApplicableUserDefinedConversionOperators (rc, operators, source_type_expr, target_type, restr, ref candidates);
}
}
}
var operators = MemberCache.GetUserOperator (target_type, Operator.OpType.Implicit, declared_only);
if (operators != null) {
- FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, implicitOnly, ref candidates);
+ FindApplicableUserDefinedConversionOperators (rc, operators, source_type_expr, target_type, restr, ref candidates);
}
if (!implicitOnly) {
operators = MemberCache.GetUserOperator (target_type, Operator.OpType.Explicit, declared_only);
if (operators != null) {
- FindApplicableUserDefinedConversionOperators (operators, source_type_expr, target_type, false, ref candidates);
+ FindApplicableUserDefinedConversionOperators (rc, operators, source_type_expr, target_type, restr, ref candidates);
}
}
}
// Pass original source type to find the best match against input type and
// not the unwrapped expression
//
- s_x = FindMostSpecificSource (candidates, source.Type, source_type_expr, !implicitOnly);
+ s_x = FindMostSpecificSource (rc, candidates, source.Type, source_type_expr, !implicitOnly);
if (s_x == null)
return null;
//
// Unless running in probing more
//
- if (!probingOnly) {
- MethodSpec ambig_arg = null;
+ if ((restr & UserConversionRestriction.ProbingOnly) == 0) {
+ MethodSpec ambig_arg = candidates [0];
+ most_specific_operator = candidates [1];
+ /*
foreach (var candidate in candidates) {
if (candidate.ReturnType == t_x)
most_specific_operator = candidate;
else if (candidate.Parameters.Types[0] == s_x)
ambig_arg = candidate;
}
-
- ec.Report.Error (457, loc,
+ */
+ rc.Report.Error (457, loc,
"Ambiguous user defined operators `{0}' and `{1}' when converting from `{2}' to `{3}'",
ambig_arg.GetSignatureForError (), most_specific_operator.GetSignatureForError (),
source.Type.GetSignatureForError (), target.GetSignatureForError ());
if (s_x != source_type) {
var c = source as Constant;
if (c != null) {
- source = c.Reduce (ec, s_x);
+ source = c.Reduce (rc, s_x);
if (source == null)
c = null;
}
if (c == null) {
source = implicitOnly ?
- ImplicitConversionStandard (ec, source_type_expr, s_x, loc) :
- ExplicitConversionStandard (ec, source_type_expr, s_x, loc);
+ ImplicitConversionStandard (rc, source_type_expr, s_x, loc) :
+ ExplicitConversionStandard (rc, source_type_expr, s_x, loc);
}
} else {
source = source_type_expr;
}
- source = new UserCast (most_specific_operator, source, loc).Resolve (ec);
+ source = new UserCast (most_specific_operator, source, loc).Resolve (rc);
//
// Convert result type when it's different to best operator return type
var unwrap = Nullable.Unwrap.CreateUnwrapped (source);
source = implicitOnly ?
- ImplicitConversionStandard (ec, unwrap, target_type, loc) :
- ExplicitConversionStandard (ec, unwrap, target_type, loc);
+ ImplicitConversionStandard (rc, unwrap, target_type, loc) :
+ ExplicitConversionStandard (rc, unwrap, target_type, loc);
if (source == null)
return null;
if (target.IsNullableType)
- source = new Nullable.LiftedConversion (source, unwrap, target).Resolve (ec);
+ source = new Nullable.LiftedConversion (source, unwrap, target).Resolve (rc);
}
} else {
source = implicitOnly ?
- ImplicitConversionStandard (ec, source, target_type, loc) :
- ExplicitConversionStandard (ec, source, target_type, loc);
+ ImplicitConversionStandard (rc, source, target_type, loc) :
+ ExplicitConversionStandard (rc, source, target_type, loc);
if (source == null)
return null;
// only non-nullable type we need to lift it manually
//
if (nullable_source && !s_x.IsNullableType)
- return new Nullable.LiftedConversion (source, source_type_expr, target).Resolve (ec);
+ return new Nullable.LiftedConversion (source, source_type_expr, target).Resolve (rc);
//
// Target is of nullable type but source type is not, wrap the result expression
}
e = ExplicitUserConversion (ec, expr, target_type, loc);
+
if (e != null)
return e;
report.Error (1669, GetLocation ($1), "__arglist is not valid in this context");
}
;
-
+
property_declaration
: opt_attributes
opt_modifiers
member_type
member_declaration_name
{
+ lexer.parsing_generic_declaration = false;
if (doc_support)
tmpComment = Lexer.consume_doc_comment ();
}
CLOSE_BRACE
{
lbag.AppendToMember (current_property, GetLocation ($10));
+ lexer.parsing_modifiers = true;
+ }
+ opt_property_initializer
+ {
current_property = null;
}
;
+opt_property_initializer
+ : /* empty */
+ | ASSIGN
+ {
+ ++lexer.parsing_block;
+ current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters;
+ start_block (GetLocation ($1));
+ }
+ expression SEMICOLON
+ {
+ --lexer.parsing_block;
+ ((Property)current_property).Initializer = (Expression) $3;
+ lbag.AppendToMember (current_property, GetLocation ($1), GetLocation ($4));
+ end_block (GetLocation ($4));
+ current_local_parameters = null;
+ }
+ ;
indexer_declaration
: opt_attributes opt_modifiers
PushPosition ();
current_token = Token.NONE;
int next_token;
+ int parens = 0;
+
switch (xtoken ()) {
case Token.LITERAL:
case Token.TRUE:
case Token.COLON:
next_token = Token.INTERR_NULLABLE;
break;
+
+ case Token.OPEN_PARENS:
+ case Token.OPEN_PARENS_CAST:
+ case Token.OPEN_PARENS_LAMBDA:
+ next_token = -1;
+ ++parens;
+ break;
default:
next_token = -1;
case Token.COLON:
next_token = Token.INTERR;
- break;
-
+ break;
+
+ case Token.OPEN_PARENS:
+ case Token.OPEN_PARENS_CAST:
+ case Token.OPEN_PARENS_LAMBDA:
+ ++parens;
+ goto default;
+
default:
int ntoken;
int interrs = 1;
int colons = 0;
int braces = 0;
- int parens = 0;
//
// All shorcuts failed, do it hard way
//
--braces;
continue;
case Token.CLOSE_PARENS:
- if (parens > 0)
+ if (parens > 0) {
--parens;
- continue;
+ continue;
+ }
+
+ PopPosition ();
+ return Token.INTERR_NULLABLE;
}
if (braces != 0)
}
}
+ var mg = NamespaceContainer.LookupStaticUsings (rc, Name, Arity, loc);
+ if (mg != null) {
+ if (Arity > 0) {
+ targs.Resolve (rc);
+ mg.SetTypeArguments (rc, targs);
+ }
+ return mg;
+ }
+
if (errorMode) {
if (variable_found) {
rc.Report.Error (841, loc, "A local variable `{0}' cannot be used before it is declared", Name);
//
// Check intermediate value modification which won't have any effect
//
- if (rhs != null && InstanceExpression.Type.IsStruct) {
+ if (rhs != null && TypeSpec.IsValueType (InstanceExpression.Type)) {
var fexpr = InstanceExpression as FieldExpr;
if (fexpr != null) {
if (!fexpr.Spec.IsReadOnly || rc.HasAny (ResolveContext.Options.FieldInitializerScope | ResolveContext.Options.ConstructorScope))
// 0 = the best, int.MaxValue = the worst
// -1 = fatal error
//
- int IsApplicable (ResolveContext ec, ref Arguments arguments, int arg_count, ref MemberSpec candidate, IParametersMember pm, ref bool params_expanded_form, ref bool dynamicArgument, ref TypeSpec returnType)
+ int IsApplicable (ResolveContext ec, ref Arguments arguments, int arg_count, ref MemberSpec candidate, IParametersMember pm, ref bool params_expanded_form, ref bool dynamicArgument, ref TypeSpec returnType, bool errorMode)
{
// Parameters of most-derived type used mainly for named and optional parameters
var pd = pm.Parameters;
lambda_conv_msgs.ClearSession ();
if (i_args.Length != 0) {
+ if (!errorMode) {
+ foreach (var ta in i_args) {
+ if (!ta.IsAccessible (ec))
+ return ti.InferenceScore - 10000;
+ }
+ }
+
ms = ms.MakeGenericMethod (ec, i_args);
}
}
bool params_expanded_form = false;
bool dynamic_argument = false;
TypeSpec rt = pm.MemberType;
- int candidate_rate = IsApplicable (rc, ref candidate_args, args_count, ref member, pm, ref params_expanded_form, ref dynamic_argument, ref rt);
+ int candidate_rate = IsApplicable (rc, ref candidate_args, args_count, ref member, pm, ref params_expanded_form, ref dynamic_argument, ref rt, error_mode);
if (lambda_conv_msgs != null)
lambda_conv_msgs.EndSession ();
break;
}
+ if (args == null)
+ return false;
+
foreach (var arg in args) {
var na = arg as NamedArgument;
if (na == null)
//
// Fill not provided arguments required by params modifier
//
- if (params_initializers == null && pd.HasParams && arg_count + 1 == pd.Count) {
+ if (params_initializers == null && arg_count + 1 == pd.Count) {
if (args == null)
args = new Arguments (1);
public readonly Operator Oper;
public Expression Expr;
- Expression enum_conversion;
+ ConvCast.Mode enum_conversion;
public Unary (Operator op, Expression expr, Location loc)
{
return null;
Expr = best_expr;
- enum_conversion = Convert.ExplicitNumericConversion (ec, new EmptyExpression (best_expr.Type), underlying_type);
+ enum_conversion = Binary.GetEnumResultCast (underlying_type);
type = expr.Type;
return EmptyCast.Create (this, type);
}
//
// Same trick as in Binary expression
//
- if (enum_conversion != null)
- enum_conversion.Emit (ec);
+ if (enum_conversion != 0) {
+ using (ec.With (BuilderContext.Options.CheckedScope, false)) {
+ ConvCast.Emit (ec, enum_conversion);
+ }
+ }
}
public override void EmitBranchable (EmitContext ec, Label target, bool on_true)
return null;
}
- if (expr.Type == InternalType.AnonymousMethod) {
- ec.Report.Error (837, loc, "The `{0}' operator cannot be applied to a lambda expression or anonymous method",
+ if (expr.Type == InternalType.AnonymousMethod || expr.Type == InternalType.MethodGroup) {
+ ec.Report.Error (837, loc, "The `{0}' operator cannot be applied to a lambda expression, anonymous method, or method group",
OperatorName);
return null;
}
if ((oper & Operator.BitwiseMask) != 0) {
expr = EmptyCast.Create (expr, type);
- AddEnumResultCast (type);
+ enum_conversion = GetEnumResultCast (type);
if (oper == Operator.BitwiseAnd && left.Type.IsEnum && right.Type.IsEnum) {
expr = OptimizeAndOperation (expr);
}
public static PredefinedOperator[] CreateStandardLiftedOperatorsTable (ModuleContainer module)
{
+ var types = module.Compiler.BuiltinTypes;
+
+ //
+ // Not strictly lifted but need to be in second group otherwise expressions like
+ // int + null would resolve to +(object, string) instead of +(int?, int?)
+ //
+ var string_operators = new [] {
+ new PredefinedStringOperator (types.String, types.Object, Operator.AdditionMask, types.String),
+ new PredefinedStringOperator (types.Object, types.String, Operator.AdditionMask, types.String),
+ };
+
var nullable = module.PredefinedTypes.Nullable.TypeSpec;
if (nullable == null)
- return new PredefinedOperator [0];
+ return string_operators;
- var types = module.Compiler.BuiltinTypes;
var bool_type = types.Bool;
var nullable_bool = nullable.MakeGenericType (module, new[] { bool_type });
new PredefinedOperator (nullable_long, nullable_int, Operator.NullableMask | Operator.ShiftMask),
new PredefinedOperator (nullable_ulong, nullable_int, Operator.NullableMask | Operator.ShiftMask),
- //
- // Not strictly lifted but need to be in second group otherwise expressions like
- // int + null would resolve to +(object, string) instead of +(int?, int?)
- //
- new PredefinedStringOperator (types.String, types.Object, Operator.AdditionMask, types.String),
- new PredefinedStringOperator (types.Object, types.String, Operator.AdditionMask, types.String),
-
+ string_operators [0],
+ string_operators [1]
};
}
else
expr = ConvertEnumAdditionalResult (expr, enum_type);
- AddEnumResultCast (expr.Type);
+ enum_conversion = GetEnumResultCast (expr.Type);
return expr;
}
else
expr = ConvertEnumAdditionalResult (expr, enum_type);
- AddEnumResultCast (expr.Type);
+ enum_conversion = GetEnumResultCast (expr.Type);
}
return expr;
return EmptyCast.Create (expr, result_type);
}
- void AddEnumResultCast (TypeSpec type)
+ public static ConvCast.Mode GetEnumResultCast (TypeSpec type)
{
if (type.IsNullableType)
type = Nullable.NullableInfo.GetUnderlyingType (type);
switch (type.BuiltinType) {
case BuiltinTypeSpec.Type.SByte:
- enum_conversion = ConvCast.Mode.I4_I1;
- break;
+ return ConvCast.Mode.I4_I1;
case BuiltinTypeSpec.Type.Byte:
- enum_conversion = ConvCast.Mode.I4_U1;
- break;
+ return ConvCast.Mode.I4_U1;
case BuiltinTypeSpec.Type.Short:
- enum_conversion = ConvCast.Mode.I4_I2;
- break;
+ return ConvCast.Mode.I4_I2;
case BuiltinTypeSpec.Type.UShort:
- enum_conversion = ConvCast.Mode.I4_U2;
- break;
+ return ConvCast.Mode.I4_U2;
}
+
+ return 0;
}
//
} else {
texpr = new GenericOpenTypeExpr (nested, loc);
}
+ } else if (expr_resolved is GenericOpenTypeExpr) {
+ texpr = new GenericOpenTypeExpr (nested, loc);
} else {
texpr = new TypeExpression (nested, loc);
}
return null;
}
- if (!(member is PropertyExpr || member is FieldExpr)) {
+ var me = member as MemberExpr;
+ if (me is EventExpr) {
+ me = me.ResolveMemberAccess (ec, null, null);
+ } else if (!(member is PropertyExpr || member is FieldExpr)) {
ec.Report.Error (1913, loc,
"Member `{0}' cannot be initialized. An object initializer may only be used for fields, or properties",
member.GetSignatureForError ());
return null;
}
- var me = member as MemberExpr;
if (me.IsStatic) {
ec.Report.Error (1914, loc,
"Static field or property `{0}' cannot be assigned in an object initializer",
var field = struct_info.Fields[i];
if (!fc.IsStructFieldDefinitelyAssigned (vi, field.Name)) {
- if (field.MemberDefinition is Property.BackingField) {
+ var bf = field.MemberDefinition as Property.BackingField;
+ if (bf != null) {
+ if (bf.Initializer != null)
+ continue;
+
fc.Report.Error (843, loc,
"An automatically implemented property `{0}' must be fully assigned before control leaves the constructor. Consider calling the default struct contructor from a constructor initializer",
field.GetSignatureForError ());
- } else {
- fc.Report.Error (171, loc,
- "Field `{0}' must be fully assigned before control leaves the constructor",
- field.GetSignatureForError ());
+
+ ok = false;
+ continue;
}
+
+ fc.Report.Error (171, loc,
+ "Field `{0}' must be fully assigned before control leaves the constructor",
+ field.GetSignatureForError ());
ok = false;
}
}
else
mod |= Modifiers.VIRTUAL;
}
+ } else if (parameters.HasExtensionMethodType) {
+ mod |= Modifiers.METHOD_EXTENSION;
}
}
//
// The state as we generate the machine
//
- Label move_next_ok;
+ protected Label move_next_ok;
protected Label move_next_error;
LocalBuilder skip_finally;
protected LocalBuilder current_pc;
BodyEnd = ec.DefineLabel ();
+ var async_init = this as AsyncInitializer;
+ if (async_init != null)
+ ec.BeginExceptionBlock ();
+
block.EmitEmbedded (ec);
+ if (async_init != null)
+ async_init.EmitCatchBlock (ec);
+
ec.MarkLabel (BodyEnd);
EmitMoveNextEpilogue (ec);
ec.EmitInt (0);
ec.Emit (OpCodes.Ret);
}
+
+ ec.MarkLabel (move_next_ok);
}
void EmitMoveNext (EmitContext ec)
ec.MarkLabel (BodyEnd);
if (async_init != null) {
- var catch_value = LocalVariable.CreateCompilerGenerated (ec.Module.Compiler.BuiltinTypes.Exception, block, Location);
-
- ec.BeginCatchBlock (catch_value.Type);
- catch_value.EmitAssign (ec);
-
- ec.EmitThis ();
- ec.EmitInt ((int) IteratorStorey.State.After);
- ec.Emit (OpCodes.Stfld, storey.PC.Spec);
-
- ((AsyncTaskStorey) async_init.Storey).EmitSetException (ec, new LocalVariableReference (catch_value, Location));
-
- ec.Emit (OpCodes.Leave, move_next_ok);
- ec.EndExceptionBlock ();
+ async_init.EmitCatchBlock (ec);
}
ec.Mark (Block.Original.EndLocation);
if (!fs.IsPublic && container.MemberDefinition.IsImported && (!fs.MemberType.IsArray && TypeSpec.IsReferenceType (fs.MemberType)))
continue;
+ //if ((fs.Modifiers & (Modifiers.BACKING_FIELD) != 0)
+ // continue;
+
if (fields == null)
fields = new List<FieldSpec> ();
public bool DeclarationFound;
Namespace[] namespace_using_table;
+ TypeSpec[] types_using_table;
Dictionary<string, UsingAliasNamespace> aliases;
public NamespaceContainer (MemberName name, NamespaceContainer parent)
return new ExtensionMethodCandidates (invocationContext, candidates, this, position);
}
+ // LAMESPEC: TODO no spec about priority over normal extension methods yet
+ if (types_using_table != null) {
+ foreach (var t in types_using_table) {
+
+ var res = t.MemberCache.FindExtensionMethods (invocationContext, name, arity);
+ if (res == null)
+ continue;
+
+ if (candidates == null)
+ candidates = res;
+ else
+ candidates.AddRange (res);
+ }
+
+ if (candidates != null)
+ return new ExtensionMethodCandidates (invocationContext, candidates, this, position);
+ }
+
return null;
}
return match;
}
+ public static MethodGroupExpr LookupStaticUsings (IMemberContext mc, string name, int arity, Location loc)
+ {
+ for (var m = mc.CurrentMemberDefinition; m != null; m = m.Parent) {
+
+ var nc = m as NamespaceContainer;
+ if (nc == null)
+ continue;
+
+ List<MemberSpec> candidates = null;
+ if (nc.types_using_table != null) {
+ foreach (var using_type in nc.types_using_table) {
+ var members = MemberCache.FindMembers (using_type, name, true);
+ if (members != null) {
+ foreach (var member in members) {
+ if ((member.Modifiers & Modifiers.METHOD_EXTENSION) != 0)
+ continue;
+
+ if (arity > 0 && member.Arity != arity)
+ continue;
+
+ if (candidates == null)
+ candidates = new List<MemberSpec> ();
+
+ candidates.Add (member);
+ }
+ }
+ }
+ }
+
+ if (candidates != null)
+ return new MethodGroupExpr (candidates, null, loc);
+ }
+
+ return null;
+ }
+
protected override void DefineNamespace ()
{
if (namespace_using_table == null)
namespace_using_table = empty_namespaces;
if (clauses != null) {
- var list = new List<Namespace> (clauses.Count);
+ List<Namespace> namespaces = null;
+ List<TypeSpec> types = null;
+
bool post_process_using_aliases = false;
for (int i = 0; i < clauses.Count; ++i) {
}
var using_ns = entry.ResolvedExpression as NamespaceExpression;
- if (using_ns == null)
- continue;
+ if (using_ns == null) {
- if (list.Contains (using_ns.Namespace)) {
- // Ensure we don't report the warning multiple times in repl
- clauses.RemoveAt (i--);
+ var type = ((TypeExpr)entry.ResolvedExpression).Type;
- Compiler.Report.Warning (105, 3, entry.Location,
- "The using directive for `{0}' appeared previously in this namespace", using_ns.GetSignatureForError ());
+ if (types == null)
+ types = new List<TypeSpec> ();
+
+ if (types.Contains (type)) {
+ Warning_DuplicateEntry (entry);
+ } else {
+ types.Add (type);
+ }
} else {
- list.Add (using_ns.Namespace);
+ if (namespaces == null)
+ namespaces = new List<Namespace> ();
+
+ if (namespaces.Contains (using_ns.Namespace)) {
+ // Ensure we don't report the warning multiple times in repl
+ clauses.RemoveAt (i--);
+
+ Warning_DuplicateEntry (entry);
+ } else {
+ namespaces.Add (using_ns.Namespace);
+ }
}
}
- namespace_using_table = list.ToArray ();
+ namespace_using_table = namespaces == null ? new Namespace [0] : namespaces.ToArray ();
+ if (types != null)
+ types_using_table = types.ToArray ();
if (post_process_using_aliases) {
for (int i = 0; i < clauses.Count; ++i) {
return false;
}
+ void Warning_DuplicateEntry (UsingNamespace entry)
+ {
+ Compiler.Report.Warning (105, 3, entry.Location,
+ "The using directive for `{0}' appeared previously in this namespace",
+ entry.ResolvedExpression.GetSignatureForError ());
+ }
+
public override void Accept (StructuralVisitor visitor)
{
visitor.Visit (this);
{
resolved = expr.ResolveAsTypeOrNamespace (ctx);
var ns = resolved as NamespaceExpression;
- if (ns == null) {
- if (resolved != null) {
- ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (resolved.Type);
- ctx.Module.Compiler.Report.Error (138, Location,
- "`{0}' is a type not a namespace. A using namespace directive can only be applied to namespaces",
- GetSignatureForError ());
+ if (ns != null)
+ return;
+
+ if (resolved != null) {
+ var compiler = ctx.Module.Compiler;
+ var type = resolved.Type;
+ if (compiler.Settings.Version >= LanguageVersion.V_6) {
+ if (!type.IsClass || !type.IsStatic) {
+ compiler.Report.SymbolRelatedToPreviousError (type);
+ compiler.Report.Error (7007, Location,
+ "`{0}' is not a static class. A using namespace directive can only be applied to static classes or namespace",
+ GetSignatureForError ());
+ }
+
+ return;
}
+
+ compiler.Report.SymbolRelatedToPreviousError (type);
+ compiler.Report.Error (138, Location,
+ "`{0}' is a type not a namespace. A using namespace directive can only be applied to namespaces",
+ GetSignatureForError ());
}
}
call.EmitPredefined (ec, NullableInfo.GetHasValue (expr.Type), null);
}
+ public override void EmitSideEffect (EmitContext ec)
+ {
+ expr.EmitSideEffect (ec);
+ }
+
public override Expression EmitToField (EmitContext ec)
{
if (temp_field == null)
if (atype == pa.CallerLineNumberAttribute) {
caller_type = rc.BuiltinTypes.Int;
- if (caller_type != parameter_type && !Convert.ImplicitNumericConversionExists (caller_type, parameter_type)) {
+ if (caller_type != parameter_type && !Convert.ImplicitStandardConversionExists (new IntConstant (caller_type, int.MaxValue, Location.Null), parameter_type)) {
rc.Report.Error (4017, attr.Location,
"The CallerLineNumberAttribute attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'",
caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ());
return new TypeExpression (p_type, location);
}
+ public void SetIndex (int index)
+ {
+ idx = index;
+ }
+
public void Warning_UselessOptionalParameter (Report Report)
{
Report.Warning (1066, 1, Location,
return new ParametersCompiled (parameters, types);
}
+ public static ParametersCompiled Prefix (ParametersCompiled parameters, Parameter p, TypeSpec type)
+ {
+ var ptypes = new TypeSpec [parameters.Count + 1];
+ ptypes [0] = type;
+ Array.Copy (parameters.Types, 0, ptypes, 1, parameters.Count);
+
+ var param = new Parameter [ptypes.Length];
+ param [0] = p;
+ for (int i = 0; i < parameters.Count; ++i) {
+ var pi = parameters [i];
+ param [i + 1] = pi;
+ pi.SetIndex (i + 1);
+ }
+
+ return ParametersCompiled.CreateFullyResolved (param, ptypes);
+ }
+
//
// TODO: This does not fit here, it should go to different version of AParametersCollection
// as the underlying type is not Parameter and some methods will fail to cast
{
readonly Property property;
- public BackingField (Property p)
+ public BackingField (Property p, bool readOnly)
: base (p.Parent, p.type_expr,
Modifiers.BACKING_FIELD | Modifiers.COMPILER_GENERATED | Modifiers.PRIVATE | (p.ModFlags & (Modifiers.STATIC | Modifiers.UNSAFE)),
new MemberName ("<" + p.GetFullName (p.MemberName) + ">k__BackingField", p.Location), null)
{
this.property = p;
+ if (readOnly)
+ ModFlags |= Modifiers.READONLY;
}
public Property OriginalProperty {
{
}
+ public Expression Initializer { get; set; }
+
public override void Accept (StructuralVisitor visitor)
{
visitor.Visit (this);
void CreateAutomaticProperty ()
{
// Create backing field
- backing_field = new BackingField (this);
+ backing_field = new BackingField (this, Initializer != null && Set == null);
if (!backing_field.Define ())
return;
+ if (Initializer != null) {
+ backing_field.Initializer = Initializer;
+ Parent.RegisterFieldForInitialization (backing_field, new FieldInitializer (backing_field, Initializer, Location));
+ backing_field.ModFlags |= Modifiers.READONLY;
+ }
+
Parent.PartialContainer.Members.Add (backing_field);
FieldExpr fe = new FieldExpr (backing_field, Location);
Get.Block = new ToplevelBlock (Compiler, ParametersCompiled.EmptyReadOnlyParameters, Location.Null);
Return r = new Return (fe, Get.Location);
Get.Block.AddStatement (r);
+ Get.ModFlags |= Modifiers.COMPILER_GENERATED;
// Create set block
- Set.Block = new ToplevelBlock (Compiler, Set.ParameterInfo, Location.Null);
- Assign a = new SimpleAssign (fe, new SimpleName ("value", Location.Null), Location.Null);
- Set.Block.AddStatement (new StatementExpression (a, Set.Location));
+ if (Set != null) {
+ Set.Block = new ToplevelBlock (Compiler, Set.ParameterInfo, Location.Null);
+ Assign a = new SimpleAssign (fe, new SimpleName ("value", Location.Null), Location.Null);
+ Set.Block.AddStatement (new StatementExpression (a, Set.Location));
+ Set.ModFlags |= Modifiers.COMPILER_GENERATED;
+ }
}
public override bool Define ()
flags |= MethodAttributes.HideBySig | MethodAttributes.SpecialName;
- if (!IsInterface && (ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) == 0 &&
- AccessorSecond != null && Get.Block == null && Set.Block == null) {
- if (Compiler.Settings.Version <= LanguageVersion.ISO_2)
- Report.FeatureIsNotAvailable (Compiler, Location, "automatically implemented properties");
+ bool auto = AccessorFirst.Block == null && (AccessorSecond == null || AccessorSecond.Block == null) &&
+ (ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) == 0;
+
+ if (Initializer != null) {
+ if (!auto)
+ Report.Error (8050, Location, "`{0}': Only auto-implemented properties can have initializers",
+ GetSignatureForError ());
+
+ if (IsInterface)
+ Report.Error (8053, Location, "`{0}': Properties inside interfaces cannot have initializers",
+ GetSignatureForError ());
+
+ if (Compiler.Settings.Version < LanguageVersion.V_6)
+ Report.FeatureIsNotAvailable (Compiler, Location, "auto-implemented property initializer");
+ }
+
+ if (auto) {
+ if (Get == null) {
+ Report.Error (8052, Location, "Auto-implemented property `{0}' must have get accessor",
+ GetSignatureForError ());
+ return false;
+ }
+
+ if (Initializer == null && AccessorSecond == null) {
+ Report.Error (8051, Location, "Auto-implemented property `{0}' must have set accessor or initializer",
+ GetSignatureForError ());
+ }
+
+ if (Compiler.Settings.Version < LanguageVersion.V_3 && Initializer == null)
+ Report.FeatureIsNotAvailable (Compiler, Location, "auto-implemented properties");
- Get.ModFlags |= Modifiers.COMPILER_GENERATED;
- Set.ModFlags |= Modifiers.COMPILER_GENERATED;
CreateAutomaticProperty ();
}
var res = TrueStatement.FlowAnalysis (fc);
if (FalseStatement == null) {
+ var c = expr as Constant;
+ if (c != null && !c.IsDefaultValue)
+ return true_returns;
+
if (true_returns)
fc.DefiniteAssignment = da_false;
else
// expression might be the expression from the switch, or an
// expression that includes any potential conversions to
//
- Expression SwitchGoverningType (ResolveContext ec, Expression expr)
+ static Expression SwitchGoverningType (ResolveContext rc, Expression expr, bool unwrapExpr)
{
switch (expr.Type.BuiltinType) {
case BuiltinTypeSpec.Type.Byte:
// conversions, we have to report an error
//
Expression converted = null;
- foreach (TypeSpec tt in ec.BuiltinTypes.SwitchUserTypes) {
- Expression e;
-
- e = Convert.ImplicitUserConversion (ec, expr, tt, loc);
+ foreach (TypeSpec tt in rc.Module.PredefinedTypes.SwitchUserTypes) {
+
+ if (!unwrapExpr && tt.IsNullableType && expr.Type.IsNullableType)
+ break;
+
+ var restr = Convert.UserConversionRestriction.ImplicitOnly |
+ Convert.UserConversionRestriction.ProbingOnly;
+
+ if (unwrapExpr)
+ restr |= Convert.UserConversionRestriction.NullableSourceOnly;
+
+ var e = Convert.UserDefinedConversion (rc, expr, tt, restr, Location.Null);
if (e == null)
continue;
// Ignore over-worked ImplicitUserConversions that do
// an implicit conversion in addition to the user conversion.
//
- if (!(e is UserCast))
+ var uc = e as UserCast;
+ if (uc == null)
continue;
if (converted != null){
- ec.Report.ExtraInformation (loc, "(Ambiguous implicit user defined conversion in previous ");
+// rc.Report.ExtraInformation (loc, "(Ambiguous implicit user defined conversion in previous ");
return null;
}
return converted;
}
- public static TypeSpec[] CreateSwitchUserTypes (BuiltinTypes types)
+ public static TypeSpec[] CreateSwitchUserTypes (ModuleContainer module, TypeSpec nullable)
{
+ var types = module.Compiler.BuiltinTypes;
+
// LAMESPEC: For some reason it does not contain bool which looks like csc bug
- return new[] {
+ TypeSpec[] stypes = new[] {
types.SByte,
types.Byte,
types.Short,
types.Char,
types.String
};
+
+ if (nullable != null) {
+
+ Array.Resize (ref stypes, stypes.Length + 9);
+
+ for (int i = 0; i < 9; ++i) {
+ stypes [10 + i] = nullable.MakeGenericType (module, new [] { stypes [i] });
+ }
+ }
+
+ return stypes;
}
public void RegisterLabel (BlockContext rc, SwitchLabel sl)
if (Expr == null)
return false;
- new_expr = SwitchGoverningType (ec, Expr);
+ //
+ // LAMESPEC: User conversion from non-nullable governing type has a priority
+ //
+ new_expr = SwitchGoverningType (ec, Expr, false);
- if (new_expr == null && Expr.Type.IsNullableType) {
- unwrap = Nullable.Unwrap.Create (Expr, false);
- if (unwrap == null)
- return false;
+ if (new_expr == null) {
+ if (Expr.Type.IsNullableType) {
+ unwrap = Nullable.Unwrap.Create (Expr, false);
+ if (unwrap == null)
+ return false;
- new_expr = SwitchGoverningType (ec, unwrap);
+ //
+ // Unwrap + user conversion using non-nullable type is not allowed but user operator
+ // involving nullable Expr and nullable governing type is
+ //
+ new_expr = SwitchGoverningType (ec, unwrap, true);
+ }
}
if (new_expr == null) {
return false;
}
- // Validate switch.
SwitchType = new_expr.Type;
+ if (SwitchType.IsNullableType) {
+ new_expr = unwrap = Nullable.Unwrap.Create (new_expr, true);
+ SwitchType = Nullable.NullableInfo.GetUnderlyingType (SwitchType);
+ }
if (SwitchType.BuiltinType == BuiltinTypeSpec.Type.Bool && ec.Module.Compiler.Settings.Version == LanguageVersion.ISO_1) {
ec.Report.FeatureIsNotAvailable (ec.Module.Compiler, loc, "switch expression of boolean type");
//
ec.Mark (block.StartLocation);
block.IsCompilerGenerated = true;
+ } else {
+ new_expr.EmitSideEffect (ec);
}
block.Emit (ec);
}
}
+ protected override bool DoFlowAnalysis (FlowAnalysisContext fc)
+ {
+ expr.FlowAnalysis (fc);
+ return base.DoFlowAnalysis (fc);
+ }
+
public override bool Resolve (BlockContext ec)
{
expr = expr.Resolve (ec);
ctch.hoisted_temp.Emit (ec);
else
ctch.li.Emit (ec);
+
+ if (!ctch.IsGeneral && ctch.type.Kind == MemberKind.TypeParameter)
+ ec.Emit (OpCodes.Box, ctch.type);
}
var expr_start = ec.DefineLabel ();
public readonly TypeSpec[] OperatorsUnaryMutator;
public readonly TypeSpec[] BinaryPromotionsTypes;
- public readonly TypeSpec[] SwitchUserTypes;
readonly BuiltinTypeSpec[] types;
OperatorsUnaryMutator = UnaryMutator.CreatePredefinedOperatorsTable (this);
BinaryPromotionsTypes = ConstantFold.CreateBinaryPromotionsTypes (this);
- SwitchUserTypes = Switch.CreateSwitchUserTypes (this);
types = new BuiltinTypeSpec[] {
Object, ValueType, Attribute,
public readonly PredefinedType SecurityAction;
public readonly PredefinedType Dictionary;
public readonly PredefinedType Hashtable;
+ public readonly TypeSpec[] SwitchUserTypes;
//
// C# 3.0
Task.Define ();
if (TaskGeneric.Define ())
TaskGeneric.TypeSpec.IsGenericTask = true;
+
+ SwitchUserTypes = Switch.CreateSwitchUserTypes (module, Nullable.TypeSpec);
}
}
using System;
//
-// Parser conditional and cast expression tests
+// parser conditional and cast expression tests
//
class A<T>
struct S
{
}
+
+ struct MyTestStruct : IDisposable
+ {
+ public void Dispose ()
+ {
+ }
+
+ public static implicit operator MyTestStruct (int i)
+ {
+ return new MyTestStruct ();
+ }
+ }
void Test_1 (bool a)
{
bool? b = Test (1, arg:2);
}
+ void Test_17 ()
+ {
+ {
+ using (MyTestStruct? mts = (int?) 1)
+ {
+ }
+ }
+ }
+
static void Helper<T> (T arg)
{
}
static Type simple = typeof (Simple);
}
+class D<U> : C<U>
+{
+}
+
class A
{
public class N<T>
if (typeof (TestAlias).ToString () != "A+N`1[System.Double]")
return 1;
+
+ if (typeof (D<>.Simple).ToString () != "C`1+Simple[T]")
+ return 2;
return 0;
}
--- /dev/null
+using System;
+
+struct S1
+{
+ public static implicit operator int (S1? s)
+ {
+ return 1;
+ }
+}
+
+struct S2
+{
+ public static implicit operator int? (S2? s)
+ {
+ return null;
+ }
+}
+
+struct S3
+{
+ public static implicit operator int? (S3? s)
+ {
+ return 2;
+ }
+}
+
+struct S4
+{
+ public static implicit operator int? (S4 s)
+ {
+ return 3;
+ }
+}
+
+class C
+{
+ public static int Main ()
+ {
+ S1? s1 = new S1 ();
+ switch (s1) {
+ case 1:
+ break;
+ default:
+ return 1;
+ }
+
+ S2? s2 = new S2 ();
+ switch (s2) {
+ case null:
+ break;
+ default:
+ return 2;
+ }
+
+ S3? s3 = new S3 ();
+ switch (s3) {
+ case 2:
+ break;
+ default:
+ return 3;
+ }
+
+ S4 s4 = new S4 ();
+ switch (s4) {
+ case 3:
+ break;
+ default:
+ return 4;
+ }
+
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+interface I<T>
+{
+}
+
+interface IB<T> : I<string>
+{
+
+}
+
+struct S
+{
+ class P
+ {
+ }
+
+ public class C : IB<P>
+ {
+ }
+}
+
+class M
+{
+ static void Test<T> (I<T> iface)
+ {
+ }
+
+ static void Test<T> (IB<T> iface)
+ {
+ }
+
+ static void Main ()
+ {
+ Test (new S.C ());
+ }
+}
--- /dev/null
+using System;
+
+struct S
+{
+ public static int P { get; } = 4;
+
+ public static int Main ()
+ {
+ if (P != 4)
+ return 1;
+
+ var c = new C ();
+ if (c.P != -3)
+ return 2;
+
+ if (c.P2 != 1)
+ return 3;
+
+ c.P2 = 9;
+ if (c.P2 != 9)
+ return 4;
+
+ var s = new S2 (null);
+ if (s.P != 4)
+ return 12;
+
+ if (s.P2 != 1)
+ return 13;
+
+ s.P2 = 9;
+ if (s.P2 != 9)
+ return 14;
+
+ return 0;
+ }
+}
+
+class C
+{
+ public decimal P { get; } = -3;
+ public int P2 { get; set; } = 1;
+}
+
+struct S2
+{
+ public int P { get; } = 4;
+ public int P2 { get; set; } = 1;
+
+ public S2 (object o)
+ {
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+public struct EventInitializerTest
+{
+ public event Action a;
+ public event Action b;
+ public event Action c;
+
+ public static void Main()
+ {
+ Action d = null;
+ var eit = new EventInitializerTest() {
+ a = null,
+ b = delegate {},
+ c = d
+ };
+ }
+}
\ No newline at end of file
--- /dev/null
+class Test
+{
+ public static void Main ()
+ {
+ string p;
+ M (y: p = F (), x: p);
+
+ int i;
+ string p2;
+ M2 (out i, c: p2 = F (), b : p2);
+ }
+
+ public static void M (string x, string y)
+ {
+ }
+
+ static void M2 (out int a, string b, string c)
+ {
+ a = 2;
+ }
+
+ public static string F ()
+ {
+ return null;
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+abstract class A
+{
+ public abstract int[] Foo (params int[] args);
+}
+
+class B : A
+{
+ public override int[] Foo (int[] args = null)
+ {
+ return args;
+ }
+
+ static int Main ()
+ {
+ var b = new B();
+ if (b.Foo().Length != 0)
+ return 1;
+
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+using System.Runtime.CompilerServices;
+using System;
+
+class TestCallerLineNumber
+{
+ static void Test ([CallerLineNumber] object line = null)
+ {
+ }
+
+ static void Test ([CallerLineNumber] decimal line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] double line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] float line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] int line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] uint line = uint.MaxValue)
+ {
+ }
+
+ static void Test ([CallerLineNumber] long line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] ulong line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] decimal? line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] double? line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] float? line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] int? line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] uint? line = uint.MaxValue)
+ {
+ }
+
+ static void Test ([CallerLineNumber] long? line = 1)
+ {
+ }
+
+ static void Test ([CallerLineNumber] ulong? line = 1)
+ {
+ }
+}
+
+class D
+{
+ public static void Main ()
+ {
+ }
+}
\ No newline at end of file
Value_1 = 1
}
+enum E : ushort
+{
+ V = 1
+}
+
public class C
{
public static int Main ()
if (b != (MyEnum)254)
return 4;
+ var e = E.V;
+ checked {
+ var res = ~e;
+ }
+
System.Console.WriteLine ("OK");
return 0;
}
static bool Bar (object t)
{
- return Bar is object;
+ return t is object;
}
}
s = (object)1 + null;
if (s != "1")
return 12;
-
+
+ s = (string)null + (object)null;
+ if (s.Length != 0)
+ return 13;
+
+ s = (object)null + (string)null;
+ if (s.Length != 0)
+ return 14;
+
System.Console.WriteLine ("test ok");
return 0;
}
--- /dev/null
+using System;
+
+class Test
+{
+ public static void Main()
+ {
+ object o;
+ lock (o = new object())
+ {
+ Console.WriteLine (o);
+ }
+
+ Console.WriteLine (o);
+ }
+}
--- /dev/null
+using System;
+
+class D
+{
+ public static implicit operator D (Action d)
+ {
+ return new D ();
+ }
+}
+
+class Program
+{
+ static void Main()
+ {
+ D d = (D) Main;
+ }
+}
--- /dev/null
+using System;
+
+class X
+{
+ public static void Main ()
+ {
+ int i;
+ if (true) {
+ i = 3;
+ }
+
+ Console.WriteLine (i);
+
+ int i2;
+ if (false) {
+ throw new ApplicationException ();
+ } else {
+ i2 = 4;
+ }
+
+ Console.WriteLine (i2);
+ }
+}
\ No newline at end of file
--- /dev/null
+using System.Threading.Tasks;
+using System;
+
+class X
+{
+ static async Task<int> Foo ()
+ {
+ var v = Throws ();
+
+ try {
+ await v;
+ } catch (Exception e) {
+ return 0;
+ }
+
+ return 1;
+ }
+
+ static async Task<int> Throws ()
+ {
+ throw new Exception ();
+ }
+
+ static int Main ()
+ {
+ if (Foo ().Result != 0)
+ return 1;
+
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.IO;
+using System.Collections.Generic;
+
+class C
+{
+ static int Test<T> () where T : Exception
+ {
+ try {
+ throw null;
+ } catch (T t) if (t.Message != null) {
+ return 0;
+ }
+ }
+
+ static int Main()
+ {
+ try {
+ Test<ApplicationException> ();
+ return 1;
+ } catch {
+ }
+
+ if (Test<NullReferenceException> () != 0)
+ return 2;
+
+ return 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+// Compiler options: -langversion:6
+
+using A.B.X;
+
+namespace A.B
+{
+ static class X
+ {
+ public static int Test ()
+ {
+ return 5;
+ }
+ }
+}
+
+namespace C
+{
+ class M
+ {
+ public static int Main ()
+ {
+ if (Test () != 5)
+ return 1;
+
+ return 0;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+// Compiler options: -langversion:6
+
+using System;
+
+namespace A.B
+{
+ static class X
+ {
+ public static int Test (object o)
+ {
+ return 1;
+ }
+ }
+}
+
+namespace A.C
+{
+ static class X
+ {
+ public static int Test (int o)
+ {
+ return 2;
+ }
+ }
+}
+
+namespace C
+{
+ using A.B.X;
+ using A.C.X;
+
+ class M
+ {
+ public static int Main ()
+ {
+ if (Test (3) != 2)
+ return 1;
+
+ return 0;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+// Compiler options: -langversion:6
+
+using System;
+using A.B.X;
+
+namespace A.B
+{
+ static class X
+ {
+ public static int Test (int o)
+ {
+ return 1;
+ }
+ }
+}
+
+namespace A.C
+{
+ static class X
+ {
+ public static int Test (int o)
+ {
+ return 2;
+ }
+ }
+}
+
+namespace C
+{
+ using A.C.X;
+
+ class M
+ {
+ public static int Main ()
+ {
+ if (Test (3) != 2)
+ return 1;
+
+ return 0;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+// Compiler options: -langversion:6
+
+using System;
+
+namespace A.B
+{
+ static class X
+ {
+ public static int Test (object o)
+ {
+ return 1;
+ }
+ }
+}
+
+namespace A.C
+{
+ static class X
+ {
+ private static int Test (int o)
+ {
+ return 2;
+ }
+ }
+}
+
+namespace C
+{
+ using A.B.X;
+ using A.C.X;
+
+ class M
+ {
+ public static int Main ()
+ {
+ if (Test (3) != 1)
+ return 1;
+
+ return 0;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System.Console;
+using System.Linq.Enumerable;
+
+class Test
+{
+ static void Main()
+ {
+ var range = Range (5, 17);
+ WriteLine (range.Where (i => i % 2 == 0).Count ());
+ }
+}
\ No newline at end of file
--- /dev/null
+// Compiler options: -langversion:6
+
+using System;
+using A.B.X;
+using A.C.X;
+
+namespace A.B
+{
+ static class X
+ {
+ public static int Test (object o)
+ {
+ return 1;
+ }
+ }
+}
+
+namespace A.C
+{
+ static class X
+ {
+ public static int Test<T> (T o)
+ {
+ if (typeof (T) != typeof (object))
+ return -1;
+
+ return 2;
+ }
+ }
+}
+
+namespace C
+{
+ class M
+ {
+ public static int Main ()
+ {
+ if (Test<object> ("") != 2)
+ return 1;
+
+ return 0;
+ }
+ }
+}
\ No newline at end of file
<method name="System.Dynamic.DynamicMetaObject BindUnaryOperation(System.Dynamic.UnaryOperationBinder)" attrs="198">\r
<size>61</size>\r
</method>\r
- <method name="System.Object <BindGetIndex>m__0(System.Dynamic.DynamicMetaObject)" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.Object <BindInvoke>m__1(System.Dynamic.DynamicMetaObject)" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.Object <BindInvokeMember>m__2(System.Dynamic.DynamicMetaObject)" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.Object <BindSetIndex>m__3(System.Dynamic.DynamicMetaObject)" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor(DynamicObjectMock, Expression)" attrs="6278">\r
<size>22</size>\r
</method>\r
<method name="Void Assert[T](System.Collections.Generic.IList`1[T], System.Collections.Generic.IList`1[T], System.String)" attrs="145">\r
<size>257</size>\r
</method>\r
+ </type>\r
+ <type name="Tester+<BinaryAddChecked_2>c__AnonStorey0">\r
+ <method name="System.Object <>m__0()" attrs="131">\r
+ <size>98</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<GetIndex_3>c__AnonStorey1">\r
+ <method name="Void <>m__0(System.Dynamic.GetIndexBinder, System.Object[])" attrs="131">\r
+ <size>93</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<InvokeMember_2>c__AnonStorey2">\r
+ <method name="Void <>m__0(System.Dynamic.InvokeMemberBinder, System.Object[])" attrs="131">\r
+ <size>110</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<InvokeMember_6>c__AnonStorey3">\r
+ <method name="Void <>m__0(System.Dynamic.InvokeMemberBinder, System.Object[])" attrs="131">\r
+ <size>120</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<SetIndex_3>c__AnonStorey4">\r
+ <method name="Void <>m__0(System.Dynamic.SetIndexBinder, System.Object[], System.Object)" attrs="131">\r
+ <size>120</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<SetMember_2>c__AnonStorey5">\r
+ <method name="System.Object <>m__0(System.Dynamic.GetMemberBinder)" attrs="131">\r
+ <size>80</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="AssertDynamicObject">\r
+ <method name="System.Object <BindGetIndex>m__0(System.Dynamic.DynamicMetaObject)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.Object <BindInvoke>m__1(System.Dynamic.DynamicMetaObject)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.Object <BindInvokeMember>m__2(System.Dynamic.DynamicMetaObject)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.Object <BindSetIndex>m__3(System.Dynamic.DynamicMetaObject)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester">\r
<method name="Void <BinaryAdd_1>m__0(System.Dynamic.BinaryOperationBinder, System.Object)" attrs="145">\r
<size>73</size>\r
</method>\r
<size>12</size>\r
</method>\r
</type>\r
- <type name="Tester+<BinaryAddChecked_2>c__AnonStorey0">\r
- <method name="System.Object <>m__0()" attrs="131">\r
- <size>98</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<GetIndex_3>c__AnonStorey1">\r
- <method name="Void <>m__0(System.Dynamic.GetIndexBinder, System.Object[])" attrs="131">\r
- <size>93</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<InvokeMember_2>c__AnonStorey2">\r
- <method name="Void <>m__0(System.Dynamic.InvokeMemberBinder, System.Object[])" attrs="131">\r
- <size>110</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<InvokeMember_6>c__AnonStorey3">\r
- <method name="Void <>m__0(System.Dynamic.InvokeMemberBinder, System.Object[])" attrs="131">\r
- <size>120</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<SetIndex_3>c__AnonStorey4">\r
- <method name="Void <>m__0(System.Dynamic.SetIndexBinder, System.Object[], System.Object)" attrs="131">\r
- <size>120</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<SetMember_2>c__AnonStorey5">\r
- <method name="System.Object <>m__0(System.Dynamic.GetMemberBinder)" attrs="131">\r
- <size>80</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="dtest-004.cs">\r
<type name="G`1[T]">\r
<size>26</size>\r
</method>\r
</type>\r
- <type name="Tester">\r
- <method name="Void <SubtractAssignEvent>m__0()" attrs="145">\r
- <size>12</size>\r
- </method>\r
- <method name="Boolean <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="System.String <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__4(Boolean)" attrs="145">\r
- <size>12</size>\r
- </method>\r
- </type>\r
<type name="Tester+<AddAssignCheckedTest>c__AnonStorey2">\r
<method name="Void <>m__0()" attrs="131">\r
<size>234</size>\r
<method name="Void IsTest()" attrs="129">\r
<size>69</size>\r
</method>\r
+ <method name="Void <SubtractAssignEvent>m__0()" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.String <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__4(Boolean)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="dtest-007.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>187</size>\r
</method>\r
- <method name="Int32 <IsEvent>m__4()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
- <type name="Tester">\r
- <method name="Int32 <InvokeTest>m__0(System.String)" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Void <InvokeMember_Error>m__1()" attrs="145">\r
- <size>112</size>\r
- </method>\r
- <method name="Int32 <IsEvent>m__3()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Boolean <Main>m__5(System.Reflection.MethodInfo)" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="System.String <Main>m__6(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__7(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__8(Boolean)" attrs="145">\r
- <size>12</size>\r
- </method>\r
- </type>\r
<type name="Tester+<MemberGetError_Null>c__AnonStorey1">\r
<method name="Void <>m__0()" attrs="131">\r
<size>86</size>\r
</method>\r
</type>\r
<type name="Tester">\r
+ <method name="Int32 <InvokeTest>m__0(System.String)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Void <InvokeMember_Error>m__1()" attrs="145">\r
+ <size>112</size>\r
+ </method>\r
<method name="Void <InvokeConstructor>m__2(System.Decimal)" attrs="145">\r
<size>2</size>\r
</method>\r
+ <method name="Int32 <IsEvent>m__3()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <IsEvent>m__4()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__5(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.String <Main>m__6(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__7(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__8(Boolean)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="dtest-008.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>192</size>\r
</method>\r
- <method name="System.Object <Main>m__0(System.Object)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="DynamicAssignments">\r
+ <method name="System.Object <Main>m__0(System.Object)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="dtest-018.cs">\r
<type name="XValue">\r
<method name="Int32 Main()" attrs="150">\r
<size>542</size>\r
</method>\r
- <method name="Int32 <Main>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>15</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Int32 <Main>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="dtest-025.cs">\r
<type name="S">\r
<method name="Int32 Main()" attrs="150">\r
<size>1101</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>11</size>\r
- </method>\r
- <method name="Void <Main>m__1()" attrs="145">\r
- <size>11</size>\r
- </method>\r
- <method name="Int32 <Main>m__2(Int32 ByRef)" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>11</size>\r
+ </method>\r
+ <method name="Void <Main>m__1()" attrs="145">\r
+ <size>11</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__2(Int32 ByRef)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="dtest-047.cs">\r
<type name="C`1[T]">\r
<method name="Int32 Test(Int32)" attrs="150">\r
<size>171</size>\r
</method>\r
- <method name="Int32 <E>m__0(Int32)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>42</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="C`1[T]">\r
+ <method name="Int32 <E>m__0(Int32)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="dtest-048.cs">\r
<type name="A">\r
<method name="Int32 Main()" attrs="150">\r
<size>72</size>\r
</method>\r
- <method name="Void <Test`1>m__0[T](T)" attrs="145">\r
- <size>103</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
- <type name="C">\r
- <method name="Void <Test3`1>m__1[T](T)" attrs="145">\r
- <size>105</size>\r
- </method>\r
- </type>\r
<type name="C+<Test2>c__AnonStorey0`1[T]">\r
<method name="Void <>m__0()" attrs="131">\r
<size>46</size>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Test`1>m__0[T](T)" attrs="145">\r
+ <size>103</size>\r
+ </method>\r
+ <method name="Void <Test3`1>m__1[T](T)" attrs="145">\r
+ <size>105</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="dtest-055.cs">\r
<type name="B`2[T1,T2]">\r
<method name="Int32 Main()" attrs="150">\r
<size>57</size>\r
</method>\r
- <method name="System.Object <Main>m__0()" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="System.Object <Main>m__0()" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="dtest-058.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>187</size>\r
</method>\r
- <method name="Void <NonInvocable>m__0()" attrs="145">\r
- <size>86</size>\r
- </method>\r
- <method name="Void <Using_1>m__1()" attrs="145">\r
- <size>92</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Void <>m__0()" attrs="131">\r
+ <size>110</size>\r
+ </method>\r
</type>\r
<type name="Tester">\r
+ <method name="Void <NonInvocable>m__0()" attrs="145">\r
+ <size>86</size>\r
+ </method>\r
+ <method name="Void <Using_1>m__1()" attrs="145">\r
+ <size>92</size>\r
+ </method>\r
<method name="Void <NullableConversion>m__2()" attrs="145">\r
<size>106</size>\r
</method>\r
<size>12</size>\r
</method>\r
</type>\r
- <type name="Tester+<Unsafe_1>c__AnonStorey0">\r
- <method name="Void <>m__0()" attrs="131">\r
- <size>110</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="dtest-error-02.cs">\r
<type name="A">\r
<method name="Void Main()" attrs="150">\r
<size>84</size>\r
</method>\r
- <method name="System.String <Main>m__0(Double)" attrs="145">\r
- <size>25</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="System.String <Main>m__0(Double)" attrs="145">\r
+ <size>25</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-062.cs">\r
<type name="X">\r
<method name="Void Main()" attrs="150">\r
<size>43</size>\r
</method>\r
- <method name="Double <Main>m__0(Int32)" attrs="145">\r
- <size>21</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Double <Main>m__0(Int32)" attrs="145">\r
+ <size>21</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-114.cs">\r
<type name="NaturalComparer`1[T]">\r
<method name="Void Main(System.String[])" attrs="150">\r
<size>472</size>\r
</method>\r
- <method name="System.String <Main>m__0(Double)" attrs="145">\r
- <size>25</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>15</size>\r
</method>\r
</type>\r
+ <type name="MyTest">\r
+ <method name="System.String <Main>m__0(Double)" attrs="145">\r
+ <size>25</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-116.cs">\r
<type name="Slow.Test">\r
<method name="T`1[System.Int64] N()" attrs="150">\r
<size>38</size>\r
</method>\r
- <method name="Int32 <M`1>m__0[X](X)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <N>m__1(Int64)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="B">\r
+ <method name="Int32 <M`1>m__0[X](X)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <N>m__1(Int64)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-155.cs">\r
<type name="MyClass`1[T]">\r
<method name="Void Main()" attrs="150">\r
<size>74</size>\r
</method>\r
- <method name="System.String <Main>m__0(Int32)" attrs="145">\r
- <size>22</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="U apply[T,U](T, Mapping`2)" attrs="145">\r
<size>16</size>\r
</method>\r
+ <method name="System.String <Main>m__0(Int32)" attrs="145">\r
+ <size>22</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-162.cs">\r
<method name="Void Main()" attrs="150">\r
<size>69</size>\r
</method>\r
- <method name="Boolean <Main>m__0(System.String)" attrs="145">\r
- <size>20</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Boolean <Main>m__0(System.String)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-185.cs">\r
<method name="Void Main(System.String[])" attrs="150">\r
<size>70</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-281.cs">\r
<type name="List">\r
<method name="Int32 Main()" attrs="150">\r
<size>14</size>\r
</method>\r
- <method name="Void <a>m__0(Int32)" attrs="145">\r
- <size>8</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .cctor()" attrs="6289">\r
- <size>46</size>\r
+ <size>29</size>\r
</method>\r
</type>\r
<type name="TestFunc`1[T]">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="TestClass">\r
+ <method name="Void <a>m__0(Int32)" attrs="145">\r
+ <size>8</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-299.cs">\r
<type name="N.A">\r
<method name="Int32 Main()" attrs="150">\r
<size>189</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__1()" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Thing">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__1()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-362.cs">\r
<type name="C">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Boolean <GetMethodGroup>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Boolean <GetMethodGroup>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-395.cs">\r
<type name="RuleBuilder`1[T]">\r
</method>\r
</type>\r
<type name="C`2[A,B]">\r
- <method name="B <C>m__0(B)" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor(IEnumerable`1)" attrs="6278">\r
<size>47</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="C`2[A,B]">\r
+ <method name="B <C>m__0(B)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-407.cs">\r
<type name="MyColor">\r
<method name="Int32 Foo(System.Func`1[System.Int32])" attrs="145">\r
<size>10</size>\r
</method>\r
- <method name="Int32 <Test_12>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void Test_13(System.Object)" attrs="129">\r
<size>53</size>\r
</method>\r
<method name="Boolean Test(System.Object, Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Void Test_17()" attrs="129">\r
+ <size>52</size>\r
+ </method>\r
+ </type>\r
+ <type name="ConditionalParsing+MyTestStruct">\r
+ <method name="Void Dispose()" attrs="486">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="MyTestStruct op_Implicit(Int32)" attrs="2198">\r
+ <size>18</size>\r
+ </method>\r
+ </type>\r
+ <type name="ConditionalParsing">\r
+ <method name="Int32 <Test_12>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-410.cs">\r
<method name="Void Main()" attrs="150">\r
<size>132</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="Maybe`1[System.String] <Main>m__0(System.String)" attrs="145">\r
<size>14</size>\r
</method>\r
<method name="Maybe`1[System.String] <Main>m__2(System.String)" attrs="145">\r
<size>18</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-412.cs">\r
</type>\r
<type name="M">\r
<method name="Int32 Main()" attrs="150">\r
- <size>53</size>\r
+ <size>90</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="D`1[U]">\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-503.cs">\r
<type name="TestAttribute">\r
<size>7</size>\r
</method>\r
</type>\r
- <type name="Combinator">\r
- <method name="System.Tuple`2[System.Int32,System.Int32] <Main>m__0(Int32)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- </type>\r
<type name="Parser`2[D1,DR1]">\r
<method name="System.IAsyncResult BeginInvoke(D1, System.AsyncCallback, System.Object)" attrs="454">\r
<size>0</size>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Combinator">\r
+ <method name="System.Tuple`2[System.Int32,System.Int32] <Main>m__0(Int32)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-594.cs">\r
<type name="C">\r
</method>\r
</type>\r
</test>\r
- <test name="gtest-anontype-01.cs">\r
- <type name="Test">\r
- <method name="Int32 Main()" attrs="150">\r
- <size>71</size>\r
- </method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
+ <test name="gtest-618.cs">\r
+ <type name="S1">\r
+ <method name="Int32 op_Implicit(System.Nullable`1[S1])" attrs="2198">\r
+ <size>10</size>\r
</method>\r
</type>\r
- <type name="<>__AnonType0`2[<Foo>__T,<Baz>__T]">\r
- <method name="<Foo>__T get_Foo()" attrs="2182">\r
- <size>7</size>\r
- </method>\r
- <method name="<Baz>__T get_Baz()" attrs="2182">\r
- <size>7</size>\r
- </method>\r
- <method name="Boolean Equals(System.Object)" attrs="198">\r
- <size>69</size>\r
- </method>\r
- <method name="Int32 GetHashCode()" attrs="198">\r
- <size>86</size>\r
- </method>\r
- <method name="System.String ToString()" attrs="198">\r
- <size>142</size>\r
+ <type name="S2">\r
+ <method name="System.Nullable`1[System.Int32] op_Implicit(System.Nullable`1[S2])" attrs="2198">\r
+ <size>18</size>\r
</method>\r
- <method name="Void .ctor(<Foo>__T, <Baz>__T)" attrs="6278">\r
- <size>21</size>\r
+ </type>\r
+ <type name="S3">\r
+ <method name="System.Nullable`1[System.Int32] op_Implicit(System.Nullable`1[S3])" attrs="2198">\r
+ <size>15</size>\r
</method>\r
</type>\r
- </test>\r
- <test name="gtest-anontype-02.cs">\r
- <type name="Test">\r
- <method name="System.Object TestA(System.String)" attrs="145">\r
+ <type name="S4">\r
+ <method name="System.Nullable`1[System.Int32] op_Implicit(S4)" attrs="2198">\r
<size>15</size>\r
</method>\r
+ </type>\r
+ <type name="C">\r
<method name="Int32 Main()" attrs="150">\r
- <size>122</size>\r
+ <size>267</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
- <type name="<>__AnonType0`1[<s>__T]">\r
- <method name="<s>__T get_s()" attrs="2182">\r
+ </test>\r
+ <test name="gtest-619.cs">\r
+ <type name="S+P">\r
+ <method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
- <method name="Boolean Equals(System.Object)" attrs="198">\r
- <size>39</size>\r
- </method>\r
- <method name="Int32 GetHashCode()" attrs="198">\r
- <size>63</size>\r
- </method>\r
- <method name="System.String ToString()" attrs="198">\r
- <size>67</size>\r
- </method>\r
- <method name="Void .ctor(<s>__T)" attrs="6278">\r
- <size>14</size>\r
- </method>\r
</type>\r
- <type name="<>__AnonType1`2[<Foo>__T,<Baz>__T]">\r
- <method name="<Foo>__T get_Foo()" attrs="2182">\r
- <size>7</size>\r
- </method>\r
- <method name="<Baz>__T get_Baz()" attrs="2182">\r
+ <type name="S+C">\r
+ <method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
- <method name="Boolean Equals(System.Object)" attrs="198">\r
- <size>69</size>\r
- </method>\r
- <method name="Int32 GetHashCode()" attrs="198">\r
- <size>86</size>\r
- </method>\r
- <method name="System.String ToString()" attrs="198">\r
- <size>142</size>\r
+ </type>\r
+ <type name="M">\r
+ <method name="Void Test[T](I`1[T])" attrs="145">\r
+ <size>2</size>\r
</method>\r
- <method name="Void .ctor(<Foo>__T, <Baz>__T)" attrs="6278">\r
- <size>21</size>\r
+ <method name="Void Test[T](IB`1[T])" attrs="145">\r
+ <size>2</size>\r
</method>\r
- </type>\r
- </test>\r
- <test name="gtest-anontype-03.cs">\r
- <type name="MyClass">\r
- <method name="Int32 get_Baz()" attrs="2182">\r
- <size>11</size>\r
+ <method name="Void Main()" attrs="145">\r
+ <size>12</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
- <size>18</size>\r
+ <size>7</size>\r
</method>\r
</type>\r
+ </test>\r
+ <test name="gtest-anontype-01.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
- <size>82</size>\r
+ <size>71</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="<>__AnonType0`2[<Foo>__T,<Baz>__T]">\r
+ <method name="<Foo>__T get_Foo()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="<Baz>__T get_Baz()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Boolean Equals(System.Object)" attrs="198">\r
+ <size>69</size>\r
+ </method>\r
+ <method name="Int32 GetHashCode()" attrs="198">\r
+ <size>86</size>\r
+ </method>\r
+ <method name="System.String ToString()" attrs="198">\r
+ <size>142</size>\r
+ </method>\r
+ <method name="Void .ctor(<Foo>__T, <Baz>__T)" attrs="6278">\r
+ <size>21</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="gtest-anontype-02.cs">\r
+ <type name="Test">\r
+ <method name="System.Object TestA(System.String)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>122</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="<>__AnonType0`1[<s>__T]">\r
+ <method name="<s>__T get_s()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Boolean Equals(System.Object)" attrs="198">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Int32 GetHashCode()" attrs="198">\r
+ <size>63</size>\r
+ </method>\r
+ <method name="System.String ToString()" attrs="198">\r
+ <size>67</size>\r
+ </method>\r
+ <method name="Void .ctor(<s>__T)" attrs="6278">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
+ <type name="<>__AnonType1`2[<Foo>__T,<Baz>__T]">\r
+ <method name="<Foo>__T get_Foo()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="<Baz>__T get_Baz()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Boolean Equals(System.Object)" attrs="198">\r
+ <size>69</size>\r
+ </method>\r
+ <method name="Int32 GetHashCode()" attrs="198">\r
+ <size>86</size>\r
+ </method>\r
+ <method name="System.String ToString()" attrs="198">\r
+ <size>142</size>\r
+ </method>\r
+ <method name="Void .ctor(<Foo>__T, <Baz>__T)" attrs="6278">\r
+ <size>21</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="gtest-anontype-03.cs">\r
+ <type name="MyClass">\r
+ <method name="Int32 get_Baz()" attrs="2182">\r
+ <size>11</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>18</size>\r
+ </method>\r
+ </type>\r
+ <type name="Test">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>82</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<method name="System.Collections.Generic.IEnumerator`1[T] System.Collections.Generic.IEnumerable<T>.GetEnumerator()" attrs="481">\r
<size>52</size>\r
</method>\r
+ <method name="System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()" attrs="481">\r
+ <size>14</size>\r
+ </method>\r
</type>\r
<type name="Test">\r
<method name="Boolean <Main>m__0(<>__AnonType0`2[System.String,System.Reflection.PropertyInfo])" attrs="145">\r
<size>15</size>\r
</method>\r
</type>\r
- <type name="Test+<Select>c__Iterator0`1[T]">\r
- <method name="System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()" attrs="481">\r
- <size>14</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="gtest-autoproperty-01.cs">\r
<type name="Test">\r
</method>\r
</type>\r
</test>\r
+ <test name="gtest-autoproperty-09.cs">\r
+ <type name="S">\r
+ <method name="Int32 get_P()" attrs="2198">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>192</size>\r
+ </method>\r
+ <method name="Void .cctor()" attrs="6289">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="C">\r
+ <method name="System.Decimal get_P()" attrs="2182">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>27</size>\r
+ </method>\r
+ </type>\r
+ <type name="S2">\r
+ <method name="Int32 get_P()" attrs="2182">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="Void .ctor(Object)" attrs="6278">\r
+ <size>16</size>\r
+ </method>\r
+ </type>\r
+ <type name="C">\r
+ <method name="Int32 get_P2()" attrs="2182">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="Void set_P2(Int32)" attrs="2182">\r
+ <size>8</size>\r
+ </method>\r
+ </type>\r
+ <type name="S2">\r
+ <method name="Int32 get_P2()" attrs="2182">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="Void set_P2(Int32)" attrs="2182">\r
+ <size>8</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="gtest-collectioninit-01.cs">\r
<type name="Test">\r
<method name="Void TestList(System.Collections.Generic.List`1[System.Int32], Int32)" attrs="145">\r
<method name="Int32 Main()" attrs="150">\r
<size>187</size>\r
</method>\r
- <method name="Void <EqualTestDelegate_2>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <EqualTestDelegate_2>m__1()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <EqualTestDelegate_2>m__2()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <EqualTestDelegate_2>m__3()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <EqualTestDelegate_2>m__4()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="System.String <InvokeTest_2>m__5(Int32)" attrs="145">\r
- <size>25</size>\r
- </method>\r
- <method name="Boolean <Main>m__6(System.Reflection.MethodInfo)" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="System.String <Main>m__7(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__8(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__9(Boolean)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void EqualTest_16()" attrs="129">\r
<size>185</size>\r
</method>\r
+ <method name="Void <EqualTestDelegate_2>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <EqualTestDelegate_2>m__1()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <EqualTestDelegate_2>m__2()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <EqualTestDelegate_2>m__3()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <EqualTestDelegate_2>m__4()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="System.String <InvokeTest_2>m__5(Int32)" attrs="145">\r
+ <size>25</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__6(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.String <Main>m__7(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__8(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__9(Boolean)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-etree-02.cs">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="System.Object <CreateDependent_DependentsNull>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="NotifyingPropertyTest">\r
+ <method name="System.Object <CreateDependent_DependentsNull>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-etree-25.cs">\r
<type name="Foo">\r
<method name="Void Test[U](U)" attrs="150">\r
<size>25</size>\r
</method>\r
- <method name="Boolean <Test`1>m__0[U](System.String)" attrs="145">\r
- <size>15</size>\r
- </method>\r
</type>\r
<type name="A">\r
<method name="Void Main()" attrs="150">\r
<method name="Void Method[T](System.Collections.Generic.IEnumerable`1[T], System.Func`2[T,System.Boolean])" attrs="145">\r
<size>2</size>\r
</method>\r
+ <method name="Boolean <Test`1>m__0[U](System.String)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-exmethod-42.cs">\r
</method>\r
</type>\r
</test>\r
+ <test name="gtest-initialize-13.cs">\r
+ <type name="EventInitializerTest">\r
+ <method name="Void add_a(System.Action)" attrs="2182">\r
+ <size>42</size>\r
+ </method>\r
+ <method name="Void remove_a(System.Action)" attrs="2182">\r
+ <size>42</size>\r
+ </method>\r
+ <method name="Void add_b(System.Action)" attrs="2182">\r
+ <size>42</size>\r
+ </method>\r
+ <method name="Void remove_b(System.Action)" attrs="2182">\r
+ <size>42</size>\r
+ </method>\r
+ <method name="Void add_c(System.Action)" attrs="2182">\r
+ <size>42</size>\r
+ </method>\r
+ <method name="Void remove_c(System.Action)" attrs="2182">\r
+ <size>42</size>\r
+ </method>\r
+ <method name="Void Main()" attrs="150">\r
+ <size>68</size>\r
+ </method>\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="gtest-iter-01.cs">\r
<type name="C">\r
<method name="Void Main()" attrs="150">\r
<size>44</size>\r
</method>\r
</type>\r
- <type name="Mono.Rocks.Test">\r
- <method name="System.Nullable`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.Int32]] <Main>m__0(Int32)" attrs="145">\r
- <size>37</size>\r
- </method>\r
- </type>\r
<type name="Mono.Rocks.Sequence+<CreateUnfoldrIterator>c__Iterator0`2[TSource,TResult]">\r
<method name="System.Collections.Generic.IEnumerator`1[TResult] System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()" attrs="481">\r
<size>52</size>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="Mono.Rocks.Test">\r
+ <method name="System.Nullable`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.Int32]] <Main>m__0(Int32)" attrs="145">\r
+ <size>37</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-iter-07.cs">\r
<type name="Test">\r
<method name="Void Reset()" attrs="486">\r
<size>6</size>\r
</method>\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()" attrs="481">\r
<size>14</size>\r
</method>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-iter-28.cs">\r
<method name="System.Collections.Generic.IEnumerable`1[System.Int32] FromTo(Int32, Int32)" attrs="150">\r
<size>37</size>\r
</method>\r
- <method name="System.String <Main>m__0(Int32)" attrs="145">\r
- <size>22</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="MyTest">\r
+ <method name="System.String <Main>m__0(Int32)" attrs="145">\r
+ <size>22</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-01.cs">\r
<type name="IntFunc">\r
<method name="Int32 Main()" attrs="150">\r
<size>328</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>12</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
- <size>11</size>\r
- </method>\r
<method name="Void .ctor(Int32)" attrs="6273">\r
<size>14</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
- </type>\r
- <type name="X">\r
- <method name="Void <Main>m__2(Int32)" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="X+<Main>c__AnonStorey0">\r
<method name="Void <>m__0(Int32)" attrs="131">\r
<size>9</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
+ <size>11</size>\r
+ </method>\r
+ <method name="Void <Main>m__2(Int32)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-02.cs">\r
<type name="funcs">\r
<method name="Void Main()" attrs="150">\r
<size>36</size>\r
</method>\r
- <method name="System.String <Main>m__0(System.String)" attrs="145">\r
- <size>19</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="System.String <Main>m__0(System.String)" attrs="145">\r
+ <size>19</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-03.cs">\r
<type name="Func`2[TArg0,TResult]">\r
<method name="Int32 Main()" attrs="150">\r
<size>147</size>\r
</method>\r
- <method name="System.String <Main>m__0(System.String)" attrs="145">\r
- <size>38</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
- <size>38</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="System.String <Main>m__0(System.String)" attrs="145">\r
+ <size>38</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
+ <size>38</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-06.cs">\r
<type name="TestClass">\r
<method name="Int32 Main()" attrs="150">\r
<size>44</size>\r
</method>\r
- <method name="Void <Main>m__0(F)" attrs="145">\r
- <size>31</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="TestClass">\r
+ <method name="Void <Main>m__0(F)" attrs="145">\r
+ <size>31</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-07.cs">\r
<type name="D">\r
<method name="Void Main()" attrs="150">\r
<size>208</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__1()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__2()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__3()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__4()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__5(Boolean)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__1()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__2()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__3()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__4()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__5(Boolean)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-08.cs">\r
<type name="C">\r
<method name="Int32 Main()" attrs="150">\r
<size>344</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="Int32 <Main>m__0(Int32)" attrs="145">\r
<size>12</size>\r
</method>\r
<method name="Int32 <Main>m__6(Int32)" attrs="145">\r
<size>12</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-09.cs">\r
<method name="Void Main()" attrs="150">\r
<size>114</size>\r
</method>\r
- <method name="System.String <Main>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="System.String <Main>m__1()" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.String <Main>m__2(System.String)" attrs="145">\r
- <size>13</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="System.String <Main>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="System.String <Main>m__1()" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.String <Main>m__2(System.String)" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-10.cs">\r
<type name="C">\r
<method name="Void Bar()" attrs="145">\r
<size>36</size>\r
</method>\r
- <method name="Void <Bar>m__0(Int32)" attrs="145">\r
- <size>6</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ </type>\r
+ <type name="TestUnary">\r
+ <method name="Void <Bar>m__0(Int32)" attrs="145">\r
+ <size>6</size>\r
+ </method>\r
+ </type>\r
+ <type name="Program">\r
<method name="System.String <Bar>m__0(System.String)" attrs="145">\r
<size>14</size>\r
</method>\r
<method name="Void Foo[T]()" attrs="145">\r
<size>15</size>\r
</method>\r
- <method name="T <Foo`1>m__0[T](T)" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="T <Foo`1>m__0[T](T)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-15.cs">\r
</test>\r
<test name="gtest-lambda-20.cs">\r
<type name="Z">\r
- <method name="Void <Z>m__0()" attrs="145">\r
- <size>7</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>38</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Z">\r
+ <method name="Void <Z>m__0()" attrs="145">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-21.cs">\r
<type name="Program">\r
<method name="Int32 Main()" attrs="150">\r
<size>108</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="System.String <Bar>m__0(System.String)" attrs="145">\r
<size>14</size>\r
</method>\r
<method name="Void <Main>m__2(System.String)" attrs="145">\r
<size>7</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-22.cs">\r
<method name="Void Main()" attrs="150">\r
<size>137</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Product)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Product <Main>m__1(Product)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Boolean <>m__0(Product)" attrs="131">\r
+ <size>60</size>\r
+ </method>\r
</type>\r
<type name="MainClass">\r
+ <method name="Int32 <Main>m__0(Product)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Product <Main>m__1(Product)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="<>__AnonType0`2[System.Linq.IGrouping`2[System.Int32,Product],System.Collections.Generic.IEnumerable`1[Product]] <Main>m__2(System.Linq.IGrouping`2[System.Int32,Product])" attrs="145">\r
<size>56</size>\r
</method>\r
</type>\r
<type name="MainClass+<Main>c__AnonStorey0">\r
- <method name="Boolean <>m__0(Product)" attrs="131">\r
- <size>60</size>\r
- </method>\r
<method name="System.Decimal <>m__1(Product)" attrs="145">\r
<size>14</size>\r
</method>\r
<method name="Int32 Main()" attrs="150">\r
<size>90</size>\r
</method>\r
- <method name="System.String <Main>m__0(System.String)" attrs="145">\r
- <size>20</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="System.String <Main>m__0(System.String)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-24.cs">\r
<method name="Void <>m__1(System.String)" attrs="131">\r
<size>47</size>\r
</method>\r
- <method name="System.String <>m__2()" attrs="145">\r
- <size>13</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="System.String <>m__2()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-25.cs">\r
<method name="Void Execute(System.Action)" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-27.cs">\r
<method name="IA`1[T][] Test2[T](System.Func`2[IB,IA`1[T][]])" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="System.String[] <Main>m__0(IB)" attrs="145">\r
<size>14</size>\r
</method>\r
<method name="IA`1[System.String][] <Main>m__1(IB)" attrs="145">\r
<size>14</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-28.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>53</size>\r
</method>\r
- <method name="G`1[System.Int32][] <Main>m__0(G`1[System.Int32][])" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="G`1[System.Int32][] <Main>m__0(G`1[System.Int32][])" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-29.cs">\r
<method name="Void M3[T](System.Action`1[C`1[T[]][]])" attrs="145">\r
<size>2</size>\r
</method>\r
- <method name="Void <Main>m__1(C`1[System.Int16][])" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__2(C`1[System.Int16[]][])" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void <Main>m__0(Int32[][])" attrs="145">\r
<size>2</size>\r
</method>\r
+ <method name="Void <Main>m__1(C`1[System.Int16][])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__2(C`1[System.Int16[]][])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-30.cs">\r
<method name="Void Main()" attrs="150">\r
<size>38</size>\r
</method>\r
- <method name="System.Func`2[T,System.Object] <Method`1>m__0[T](System.Object)" attrs="145">\r
- <size>33</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="System.Func`2[T,System.Object] <Method`1>m__0[T](System.Object)" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-lambda-31.cs">\r
<type name="Test">\r
<method name="Void Main()" attrs="145">\r
<size>34</size>\r
</method>\r
- <method name="Byte <Main>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Byte <Main>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-lambda-33.cs">\r
<method name="Void Do(System.String[])" attrs="129">\r
<size>17</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__3(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__7(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__8(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__9(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__A(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__B(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__C(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__D(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__1A(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__1D(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__20(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__21(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__22(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__2A(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__2F(<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__32(<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__33(<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>15</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="from.C+<Main>c__AnonStorey0">\r
+ <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__0(Int32)" attrs="131">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__1(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="131">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__2(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="131">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__3(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="131">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="<>__AnonType1`2[System.Int32,System.Collections.Generic.IEnumerable`1[System.Int32]] <>m__4(Int32)" attrs="131">\r
+ <size>55</size>\r
+ </method>\r
+ </type>\r
<type name="from.C">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="System.Nullable`1[System.Boolean] <Main>m__2(System.Nullable`1[System.Boolean])" attrs="145">\r
<size>10</size>\r
</method>\r
- <method name="<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32] <Main>m__31(System.Linq.IGrouping`2[System.Int32,System.Int32], Int32)" attrs="145">\r
- <size>16</size>\r
+ <method name="Int32 <Main>m__3(Int32)" attrs="145">\r
+ <size>10</size>\r
</method>\r
<method name="Int32 <Main>m__4(Int32, Int32)" attrs="145">\r
<size>10</size>\r
<method name="Int32 <Main>m__6(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Int32 <Main>m__7(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__8(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__9(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__A(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__B(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__C(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__D(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__E(from.ITest)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__F(Int32, from.ITest)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="Int32 <Main>m__10(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Int32 <Main>m__11(from.ITest)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__12(Int32, from.ITest)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="Int32 <Main>m__13(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Int32 <Main>m__14(from.ITest)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="<>__AnonType0`2[System.Int32,from.ITest] <Main>m__15(Int32, from.ITest)" attrs="145">\r
+ <size>16</size>\r
+ </method>\r
<method name="Int32 <Main>m__16(<>__AnonType0`2[System.Int32,from.ITest])" attrs="145">\r
<size>15</size>\r
</method>\r
+ <method name="Int32 <Main>m__17(from.ITest)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__18(<>__AnonType0`2[System.Int32,from.ITest], from.ITest)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
<method name="Int32 <Main>m__19(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Int32 <Main>m__1A(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="Int32 <Main>m__1B(Int32, System.Collections.Generic.IEnumerable`1[System.Int32])" attrs="145">\r
<size>10</size>\r
</method>\r
<method name="Int32 <Main>m__1C(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Int32 <Main>m__1D(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="Int32 <Main>m__1E(Int32, System.Collections.Generic.IEnumerable`1[System.Int32])" attrs="145">\r
<size>10</size>\r
</method>\r
<method name="Int32 <Main>m__1F(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Int32 <Main>m__20(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__21(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__22(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="System.Linq.IGrouping`2[System.Int32,System.Int32] <Main>m__23(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="145">\r
<size>10</size>\r
</method>\r
<method name="Int32 <Main>m__29(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
+ <method name="Int32 <Main>m__2A(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32] <Main>m__2B(System.Linq.IGrouping`2[System.Int32,System.Int32], Int32)" attrs="145">\r
<size>16</size>\r
</method>\r
<method name="<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32] <Main>m__2E(System.Linq.IGrouping`2[System.Int32,System.Int32], Int32)" attrs="145">\r
<size>16</size>\r
</method>\r
+ <method name="Int32 <Main>m__2F(<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
<method name="Int32 <Main>m__30(<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
<size>15</size>\r
</method>\r
+ <method name="<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32] <Main>m__31(System.Linq.IGrouping`2[System.Int32,System.Int32], Int32)" attrs="145">\r
+ <size>16</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__32(<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__33(<>__AnonType3`2[System.Linq.IGrouping`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
<method name="System.Linq.IGrouping`2[System.Int32,System.Int32] <Main>m__34(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="145">\r
<size>10</size>\r
</method>\r
</method>\r
</type>\r
<type name="from.C+<Main>c__AnonStorey0">\r
- <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__0(Int32)" attrs="131">\r
- <size>15</size>\r
- </method>\r
- <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__1(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="131">\r
- <size>15</size>\r
- </method>\r
- <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__2(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="131">\r
- <size>15</size>\r
- </method>\r
- <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__3(System.Linq.IGrouping`2[System.Int32,System.Int32])" attrs="131">\r
- <size>15</size>\r
- </method>\r
- <method name="<>__AnonType1`2[System.Int32,System.Collections.Generic.IEnumerable`1[System.Int32]] <>m__4(Int32)" attrs="131">\r
- <size>55</size>\r
- </method>\r
<method name="Int32 <>m__5(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
</type>\r
- <type name="from.C">\r
- <method name="Int32 <Main>m__E(from.ITest)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Int32 <Main>m__F(Int32, from.ITest)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__11(from.ITest)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Int32 <Main>m__12(Int32, from.ITest)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__14(from.ITest)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="<>__AnonType0`2[System.Int32,from.ITest] <Main>m__15(Int32, from.ITest)" attrs="145">\r
- <size>16</size>\r
- </method>\r
- <method name="Int32 <Main>m__17(from.ITest)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Int32 <Main>m__18(<>__AnonType0`2[System.Int32,from.ITest], from.ITest)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="gtest-linq-02.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
<size>528</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="Int32 <Main>m__0(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
<method name="Int32 <Main>m__3(Int32)" attrs="145">\r
<size>11</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-03.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>197</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="Boolean <Main>m__0(Int32)" attrs="145">\r
<size>13</size>\r
</method>\r
<method name="Int32 <Main>m__2(Int32)" attrs="145">\r
<size>12</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-04.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>589</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="Int32 <Main>m__0(Int32)" attrs="145">\r
<size>12</size>\r
</method>\r
<method name="Int32 <Main>m__3(Int32)" attrs="145">\r
<size>10</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-05.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>1354</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__2(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__3(Int32)" attrs="145">\r
- <size>12</size>\r
- </method>\r
- <method name="System.String <Main>m__4(System.String)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__5(System.String)" attrs="145">\r
- <size>15</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="OrderByTests">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__2(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__3(Int32)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ <method name="System.String <Main>m__4(System.String)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__5(System.String)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
<method name="Int32 <Main>m__6(Data)" attrs="145">\r
<size>15</size>\r
</method>\r
<method name="Int32 Main()" attrs="150">\r
<size>423</size>\r
</method>\r
- <method name="<>__AnonType0`2[System.Int32,System.Int32] <Main>m__0(Int32)" attrs="145">\r
- <size>18</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(<>__AnonType0`2[System.Int32,System.Int32])" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="<>__AnonType0`2[System.Int32,System.Int32] <Main>m__2(Int32)" attrs="145">\r
- <size>18</size>\r
- </method>\r
- <method name="<>__AnonType1`2[<>__AnonType0`2[System.Int32,System.Int32],System.Int32] <Main>m__3(<>__AnonType0`2[System.Int32,System.Int32])" attrs="145">\r
- <size>23</size>\r
- </method>\r
- <method name="Boolean <Main>m__4(<>__AnonType1`2[<>__AnonType0`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>26</size>\r
- </method>\r
- <method name="Int32 <Main>m__5(<>__AnonType1`2[<>__AnonType0`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>15</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>21</size>\r
</method>\r
</type>\r
+ <type name="Let">\r
+ <method name="<>__AnonType0`2[System.Int32,System.Int32] <Main>m__0(Int32)" attrs="145">\r
+ <size>18</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(<>__AnonType0`2[System.Int32,System.Int32])" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="<>__AnonType0`2[System.Int32,System.Int32] <Main>m__2(Int32)" attrs="145">\r
+ <size>18</size>\r
+ </method>\r
+ <method name="<>__AnonType1`2[<>__AnonType0`2[System.Int32,System.Int32],System.Int32] <Main>m__3(<>__AnonType0`2[System.Int32,System.Int32])" attrs="145">\r
+ <size>23</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__4(<>__AnonType1`2[<>__AnonType0`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>26</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__5(<>__AnonType1`2[<>__AnonType0`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-linq-07.cs">\r
<type name="SelectMany">\r
<method name="System.Collections.Generic.IEnumerable`1[System.String] <>m__3(Int32)" attrs="131">\r
<size>15</size>\r
</method>\r
+ <method name="System.Collections.Generic.IEnumerable`1[System.String] <>m__1(Int32)" attrs="131">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__2(<>__AnonType0`2[System.Int32,System.String])" attrs="131">\r
+ <size>20</size>\r
+ </method>\r
</type>\r
<type name="SelectMany">\r
<method name="<>__AnonType0`2[System.Int32,System.String] <Main>m__0(Int32, System.String)" attrs="145">\r
<size>16</size>\r
</method>\r
</type>\r
- <type name="SelectMany+<Main>c__AnonStorey0">\r
- <method name="System.Collections.Generic.IEnumerable`1[System.String] <>m__1(Int32)" attrs="131">\r
- <size>20</size>\r
- </method>\r
- <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__2(<>__AnonType0`2[System.Int32,System.String])" attrs="131">\r
- <size>20</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="gtest-linq-08.cs">\r
<type name="TestA">\r
<method name="Int32 Main()" attrs="150">\r
<size>171</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="TestA <Main>m__0(TestA)" attrs="145">\r
<size>10</size>\r
</method>\r
<method name="Boolean <Main>m__1(TestA)" attrs="145">\r
<size>25</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-09.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>981</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="<>__AnonType0`1[<Result>__T]">\r
+ <method name="<Result>__T get_Result()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Boolean Equals(System.Object)" attrs="198">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Int32 GetHashCode()" attrs="198">\r
+ <size>63</size>\r
+ </method>\r
+ <method name="System.String ToString()" attrs="198">\r
+ <size>67</size>\r
+ </method>\r
+ <method name="Void .ctor(<Result>__T)" attrs="6278">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
+ <type name="<>__AnonType1`2[<a>__T,<b>__T]">\r
+ <method name="<a>__T get_a()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="<b>__T get_b()" attrs="2182">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Boolean Equals(System.Object)" attrs="198">\r
+ <size>69</size>\r
+ </method>\r
+ <method name="Int32 GetHashCode()" attrs="198">\r
+ <size>86</size>\r
+ </method>\r
+ <method name="System.String ToString()" attrs="198">\r
+ <size>142</size>\r
+ </method>\r
+ <method name="Void .ctor(<a>__T, <b>__T)" attrs="6278">\r
+ <size>21</size>\r
+ </method>\r
+ </type>\r
+ <type name="Join">\r
<method name="Int32 <Main>m__0(Data)" attrs="145">\r
<size>15</size>\r
</method>\r
<method name="Data <Main>m__F(<>__AnonType1`2[Data,Data])" attrs="145">\r
<size>15</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
- </type>\r
- <type name="<>__AnonType0`1[<Result>__T]">\r
- <method name="<Result>__T get_Result()" attrs="2182">\r
- <size>7</size>\r
- </method>\r
- <method name="Boolean Equals(System.Object)" attrs="198">\r
- <size>39</size>\r
- </method>\r
- <method name="Int32 GetHashCode()" attrs="198">\r
- <size>63</size>\r
- </method>\r
- <method name="System.String ToString()" attrs="198">\r
- <size>67</size>\r
- </method>\r
- <method name="Void .ctor(<Result>__T)" attrs="6278">\r
- <size>14</size>\r
- </method>\r
- </type>\r
- <type name="<>__AnonType1`2[<a>__T,<b>__T]">\r
- <method name="<a>__T get_a()" attrs="2182">\r
- <size>7</size>\r
- </method>\r
- <method name="<b>__T get_b()" attrs="2182">\r
- <size>7</size>\r
- </method>\r
- <method name="Boolean Equals(System.Object)" attrs="198">\r
- <size>69</size>\r
- </method>\r
- <method name="Int32 GetHashCode()" attrs="198">\r
- <size>86</size>\r
- </method>\r
- <method name="System.String ToString()" attrs="198">\r
- <size>142</size>\r
- </method>\r
- <method name="Void .ctor(<a>__T, <b>__T)" attrs="6278">\r
- <size>21</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-10.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>781</size>\r
</method>\r
- <method name="Int32 <Main>m__0(DataA)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(DataB)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="<>__AnonType1`2[System.String,System.String] <Main>m__4(<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]], DataB)" attrs="145">\r
- <size>47</size>\r
- </method>\r
- <method name="Int32 <Main>m__5(DataA)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Int32 <Main>m__6(DataB)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="<>__AnonType1`2[System.String,System.String] <Main>m__9(<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]], DataB)" attrs="145">\r
- <size>47</size>\r
- </method>\r
- <method name="Int32 <Main>m__A(DataA)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Int32 <Main>m__B(DataB)" attrs="145">\r
- <size>15</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="GroupJoin">\r
+ <method name="Int32 <Main>m__0(DataA)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(DataB)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
<method name="<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]] <Main>m__2(DataA, System.Collections.Generic.IEnumerable`1[DataB])" attrs="145">\r
<size>16</size>\r
</method>\r
<method name="System.Collections.Generic.IEnumerable`1[DataB] <Main>m__3(<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]])" attrs="145">\r
<size>20</size>\r
</method>\r
+ <method name="<>__AnonType1`2[System.String,System.String] <Main>m__4(<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]], DataB)" attrs="145">\r
+ <size>47</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__5(DataA)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__6(DataB)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
<method name="<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]] <Main>m__7(DataA, System.Collections.Generic.IEnumerable`1[DataB])" attrs="145">\r
<size>16</size>\r
</method>\r
<method name="System.Collections.Generic.IEnumerable`1[DataB] <Main>m__8(<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]])" attrs="145">\r
<size>20</size>\r
</method>\r
+ <method name="<>__AnonType1`2[System.String,System.String] <Main>m__9(<>__AnonType0`2[DataA,System.Collections.Generic.IEnumerable`1[DataB]], DataB)" attrs="145">\r
+ <size>47</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__A(DataA)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__B(DataB)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
<method name="DataA <Main>m__C(DataA, System.Collections.Generic.IEnumerable`1[DataB])" attrs="145">\r
<size>10</size>\r
</method>\r
<method name="Int32 Main()" attrs="150">\r
<size>303</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="Boolean <Main>m__0(Int32)" attrs="145">\r
<size>13</size>\r
</method>\r
<method name="Int32 <Main>m__4(Int32)" attrs="145">\r
<size>12</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-12.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>502</size>\r
</method>\r
- <method name="<>__AnonType0`2[System.String,System.Int32] <XX>m__0(System.String)" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="Boolean <Main>m__2(System.String)" attrs="145">\r
- <size>18</size>\r
- </method>\r
- <method name="<>__AnonType0`2[System.String,System.Int32] <Main>m__4(System.String)" attrs="145">\r
- <size>21</size>\r
- </method>\r
- <method name="<>__AnonType1`2[System.Char,System.Int32] <XX>m__6(Char)" attrs="145">\r
- <size>16</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="NestedQuery+<XX>c__AnonStorey0">\r
+ <method name="Boolean <>m__0(<>__AnonType1`2[System.Char,System.Int32])" attrs="131">\r
+ <size>22</size>\r
+ </method>\r
+ </type>\r
+ <type name="NestedQuery+<Main>c__AnonStorey1">\r
+ <method name="Boolean <>m__0(<>__AnonType1`2[System.Char,System.Int32])" attrs="131">\r
+ <size>23</size>\r
+ </method>\r
+ </type>\r
<type name="NestedQuery">\r
+ <method name="<>__AnonType0`2[System.String,System.Int32] <XX>m__0(System.String)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
<method name="System.Collections.Generic.IEnumerable`1[System.Char] <XX>m__1(<>__AnonType0`2[System.String,System.Int32])" attrs="145">\r
<size>117</size>\r
</method>\r
+ <method name="Boolean <Main>m__2(System.String)" attrs="145">\r
+ <size>18</size>\r
+ </method>\r
<method name="System.Collections.Generic.IEnumerable`1[System.Char] <Main>m__3(System.String)" attrs="145">\r
<size>44</size>\r
</method>\r
+ <method name="<>__AnonType0`2[System.String,System.Int32] <Main>m__4(System.String)" attrs="145">\r
+ <size>21</size>\r
+ </method>\r
<method name="System.Collections.Generic.IEnumerable`1[System.Char] <Main>m__5(<>__AnonType0`2[System.String,System.Int32])" attrs="145">\r
<size>118</size>\r
</method>\r
+ <method name="<>__AnonType1`2[System.Char,System.Int32] <XX>m__6(Char)" attrs="145">\r
+ <size>16</size>\r
+ </method>\r
<method name="Char <XX>m__7(<>__AnonType1`2[System.Char,System.Int32])" attrs="145">\r
<size>14</size>\r
</method>\r
<size>15</size>\r
</method>\r
</type>\r
- <type name="NestedQuery+<XX>c__AnonStorey0">\r
- <method name="Boolean <>m__0(<>__AnonType1`2[System.Char,System.Int32])" attrs="131">\r
- <size>22</size>\r
- </method>\r
- </type>\r
- <type name="NestedQuery+<Main>c__AnonStorey1">\r
- <method name="Boolean <>m__0(<>__AnonType1`2[System.Char,System.Int32])" attrs="131">\r
- <size>23</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="gtest-linq-13.cs">\r
<type name="Program">\r
<method name="Void Foo(TypeDefinition)" attrs="145">\r
<size>48</size>\r
</method>\r
- <method name="MethodDefinition <Foo>m__0(MethodDefinition)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>10</size>\r
</method>\r
</type>\r
+ <type name="Program">\r
+ <method name="MethodDefinition <Foo>m__0(MethodDefinition)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-linq-14.cs">\r
<type name="Person">\r
<method name="Void Main()" attrs="150">\r
<size>79</size>\r
</method>\r
- <method name="Int32 <Main>m__0(NameCollisionTest.Data)" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="Boolean <Main>m__1(Int32)" attrs="145">\r
- <size>13</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="NameCollisionTest.C">\r
+ <method name="Int32 <Main>m__0(NameCollisionTest.Data)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__1(Int32)" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-linq-16.cs">\r
<type name="C">\r
<method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__0()" attrs="131">\r
<size>74</size>\r
</method>\r
+ <method name="Int32 <>m__2(<>__AnonType0`2[System.Int32,System.Int32])" attrs="131">\r
+ <size>22</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<Test_2>c__AnonStorey1">\r
+ <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__0()" attrs="131">\r
+ <size>74</size>\r
+ </method>\r
+ <method name="Int32 <>m__2(<>__AnonType0`2[System.Int32,System.Int32])" attrs="131">\r
+ <size>22</size>\r
+ </method>\r
</type>\r
<type name="C">\r
<method name="System.Func`1[System.Collections.Generic.IEnumerable`1[System.Int32]] <Test_2>m__0(Int32)" attrs="145">\r
<method name="<>__AnonType0`2[System.Int32,System.Int32] <>m__1(Int32)" attrs="145">\r
<size>16</size>\r
</method>\r
- <method name="Int32 <>m__2(<>__AnonType0`2[System.Int32,System.Int32])" attrs="131">\r
- <size>22</size>\r
- </method>\r
</type>\r
<type name="C+<Test_2>c__AnonStorey1">\r
- <method name="System.Collections.Generic.IEnumerable`1[System.Int32] <>m__0()" attrs="131">\r
- <size>74</size>\r
- </method>\r
<method name="<>__AnonType0`2[System.Int32,System.Int32] <>m__1(Int32)" attrs="145">\r
<size>16</size>\r
</method>\r
- <method name="Int32 <>m__2(<>__AnonType0`2[System.Int32,System.Int32])" attrs="131">\r
- <size>22</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-17.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>169</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-linq-18.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>658</size>\r
</method>\r
- <method name="<>__AnonType0`2[System.Int32,System.Boolean] <Main>m__0(Int32)" attrs="145">\r
- <size>50</size>\r
- </method>\r
- <method name="Boolean <Main>m__1(<>__AnonType0`2[System.Int32,System.Boolean])" attrs="145">\r
- <size>19</size>\r
- </method>\r
- <method name="Boolean <Main>m__2(<>__AnonType0`2[System.Int32,System.Boolean])" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Boolean <Main>m__4(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Boolean <Main>m__5(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Boolean <Main>m__6(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="<>__AnonType1`2[System.Int32,System.Int32] <Main>m__7(Int32)" attrs="145">\r
- <size>18</size>\r
- </method>\r
- <method name="<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32] <Main>m__8(<>__AnonType1`2[System.Int32,System.Int32])" attrs="145">\r
- <size>23</size>\r
- </method>\r
- <method name="Boolean <Main>m__9(<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Boolean <Main>m__A(<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>23</size>\r
- </method>\r
- <method name="Int32 <Main>m__B(<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="Boolean <Main>m__C(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Boolean <Main>m__D(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Int32 <Main>m__E(Int32, Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Boolean <Main>m__F(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
- <method name="Boolean <Main>m__10(Int32)" attrs="145">\r
- <size>39</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
- <type name="C">\r
- <method name="Int32 <Main>m__11(Int32, System.Collections.Generic.IEnumerable`1[System.Int32])" attrs="145">\r
- <size>10</size>\r
- </method>\r
- </type>\r
<type name="C+<Main>c__AnonStorey0">\r
<method name="Boolean <>m__0(Int32)" attrs="131">\r
<size>17</size>\r
<size>17</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="<>__AnonType0`2[System.Int32,System.Boolean] <Main>m__0(Int32)" attrs="145">\r
+ <size>50</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__1(<>__AnonType0`2[System.Int32,System.Boolean])" attrs="145">\r
+ <size>19</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__2(<>__AnonType0`2[System.Int32,System.Boolean])" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__4(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__5(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__6(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="<>__AnonType1`2[System.Int32,System.Int32] <Main>m__7(Int32)" attrs="145">\r
+ <size>18</size>\r
+ </method>\r
+ <method name="<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32] <Main>m__8(<>__AnonType1`2[System.Int32,System.Int32])" attrs="145">\r
+ <size>23</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__9(<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__A(<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>23</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__B(<>__AnonType2`2[<>__AnonType1`2[System.Int32,System.Int32],System.Int32])" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__C(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__D(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__E(Int32, Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__F(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__10(Int32)" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__11(Int32, System.Collections.Generic.IEnumerable`1[System.Int32])" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-linq-19.cs">\r
<type name="Test">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Char <E>m__0(Char)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .cctor()" attrs="6289">\r
- <size>45</size>\r
+ <size>28</size>\r
+ </method>\r
+ <method name="Char <E>m__0(Char)" attrs="145">\r
+ <size>10</size>\r
</method>\r
</type>\r
</test>\r
<method name="Void Main()" attrs="150">\r
<size>139</size>\r
</method>\r
- <method name="Maybe`1[System.Int32] <Main>m__0(Int32)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="<>__AnonType0`2[System.Int32,System.Int32] <Main>m__1(Int32, Int32)" attrs="145">\r
- <size>16</size>\r
- </method>\r
- <method name="Maybe`1[System.Int32] <Main>m__2(<>__AnonType0`2[System.Int32,System.Int32])" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Int32 <Main>m__3(<>__AnonType0`2[System.Int32,System.Int32], Int32)" attrs="145">\r
- <size>24</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>21</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Maybe`1[System.Int32] <Main>m__0(Int32)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="<>__AnonType0`2[System.Int32,System.Int32] <Main>m__1(Int32, Int32)" attrs="145">\r
+ <size>16</size>\r
+ </method>\r
+ <method name="Maybe`1[System.Int32] <Main>m__2(<>__AnonType0`2[System.Int32,System.Int32])" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__3(<>__AnonType0`2[System.Int32,System.Int32], Int32)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-linq-21.cs">\r
<type name="Program">\r
<method name="Int32 Main()" attrs="150">\r
<size>20</size>\r
</method>\r
- <method name="Int32 <Test>m__0(A)" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Int32 <Test>m__0(A)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-linq-25.cs">\r
<method name="Void Test(System.Action)" attrs="145">\r
<size>8</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>162</size>\r
- </method>\r
- <method name="<>__AnonType0`2[A,B] <Main>m__2(A, B)" attrs="145">\r
- <size>16</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(<>__AnonType0`2[A,B])" attrs="145">\r
- <size>75</size>\r
- </method>\r
- <method name="<>__AnonType1`2[A,B] <Main>m__4(<>__AnonType0`2[A,B])" attrs="145">\r
- <size>26</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="C">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>162</size>\r
+ </method>\r
<method name="System.Collections.Generic.IEnumerable`1[B] <Main>m__1(A)" attrs="145">\r
<size>15</size>\r
</method>\r
+ <method name="<>__AnonType0`2[A,B] <Main>m__2(A, B)" attrs="145">\r
+ <size>16</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(<>__AnonType0`2[A,B])" attrs="145">\r
+ <size>75</size>\r
+ </method>\r
+ <method name="<>__AnonType1`2[A,B] <Main>m__4(<>__AnonType0`2[A,B])" attrs="145">\r
+ <size>26</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-linq-26.cs">\r
<method name="Void Main()" attrs="150">\r
<size>80</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="System.String <Main>m__0(Test.C)" attrs="145">\r
<size>15</size>\r
</method>\r
<method name="System.String <Main>m__1(Test.C)" attrs="145">\r
<size>14</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-linq-27.cs">\r
<method name="Void Main()" attrs="150">\r
<size>152</size>\r
</method>\r
- <method name="System.String <Main>m__0(System.String)" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="System.Collections.Generic.IEnumerable`1[System.Boolean] <>m__0(System.String)" attrs="131">\r
<size>82</size>\r
</method>\r
+ </type>\r
+ <type name="C+<Main>c__AnonStorey0+<Main>c__AnonStorey1">\r
+ <method name="Boolean <>m__0(Char)" attrs="131">\r
+ <size>24</size>\r
+ </method>\r
+ </type>\r
+ <type name="C">\r
+ <method name="System.String <Main>m__0(System.String)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<Main>c__AnonStorey0">\r
<method name="<>__AnonType0`2[System.String,System.Boolean] <>m__1(System.String)" attrs="145">\r
<size>55</size>\r
</method>\r
<size>15</size>\r
</method>\r
</type>\r
- <type name="C+<Main>c__AnonStorey0+<Main>c__AnonStorey1">\r
- <method name="Boolean <>m__0(Char)" attrs="131">\r
- <size>24</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="gtest-linq-28.cs">\r
<type name="C">\r
<method name="Int32 Main()" attrs="150">\r
<size>222</size>\r
</method>\r
- <method name="<>__AnonType0`2[System.Char,System.Collections.Generic.IEnumerable`1[System.Char]] <Main>m__0(Char)" attrs="145">\r
- <size>54</size>\r
- </method>\r
- <method name="Char <Main>m__2(Char)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="C">\r
+ <method name="<>__AnonType0`2[System.Char,System.Collections.Generic.IEnumerable`1[System.Char]] <Main>m__0(Char)" attrs="145">\r
+ <size>54</size>\r
+ </method>\r
<method name="System.Collections.Generic.IEnumerable`1[System.Char] <Main>m__1(<>__AnonType0`2[System.Char,System.Collections.Generic.IEnumerable`1[System.Char]])" attrs="145">\r
<size>15</size>\r
</method>\r
+ <method name="Char <Main>m__2(Char)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-named-01.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>201</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="C+<Main>c__AnonStorey0">\r
<method name="Void .ctor()" attrs="6278">\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-named-02.cs">\r
<type name="D">\r
</method>\r
</type>\r
</test>\r
+ <test name="gtest-named-05.cs">\r
+ <type name="Test">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>38</size>\r
+ </method>\r
+ <method name="Void M(System.String, System.String)" attrs="150">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void M2(Int32 ByRef, System.String, System.String)" attrs="145">\r
+ <size>5</size>\r
+ </method>\r
+ <method name="System.String F()" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="gtest-optional-01.cs">\r
<type name="C">\r
<method name="Void TestA(Int32)" attrs="150">\r
<method name="Void Main()" attrs="145">\r
<size>45</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0(Int32)" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0(Int32)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-optional-15.cs">\r
<method name="Void Wrap[T](System.Func`2[IPackageRepository,T], T)" attrs="145">\r
<size>2</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="IPackage <Main>m__0(IPackageRepository)" attrs="145">\r
<size>14</size>\r
</method>\r
<method name="IPackage <Main>m__1(IPackageRepository)" attrs="145">\r
<size>14</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="gtest-optional-20.cs">\r
<method name="System.Collections.Generic.IEnumerator`1[System.Int32] System.Collections.Generic.IEnumerable<int>.GetEnumerator()" attrs="481">\r
<size>26</size>\r
</method>\r
+ <method name="System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()" attrs="481">\r
+ <size>14</size>\r
+ </method>\r
</type>\r
<type name="CallerMemberTest">\r
<method name="Void <Main>m__0()" attrs="145">\r
<size>24</size>\r
</method>\r
</type>\r
- <type name="CallerMemberTest+<Enumerator>c__Iterator0">\r
- <method name="System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()" attrs="481">\r
- <size>14</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="gtest-optional-23.cs">\r
<type name="CallerLineNumberTest">\r
<method name="Void Main()" attrs="150">\r
<size>75</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>11</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6273">\r
<size>17</size>\r
</method>\r
<method name="Void TraceStatic2(Double, System.Decimal)" attrs="145">\r
<size>2</size>\r
</method>\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>11</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-optional-24.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>148</size>\r
</method>\r
- <method name="Boolean <Main>m__0(System.String)" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Boolean <Main>m__0(System.String)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="gtest-optional-29.cs">\r
</method>\r
</type>\r
</test>\r
+ <test name="gtest-optional-32.cs">\r
+ <type name="A">\r
+ <method name="Int32[] Foo(Int32[])" attrs="1478">\r
+ <size>0</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6276">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="B">\r
+ <method name="Int32[] Foo(Int32[])" attrs="198">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="145">\r
+ <size>42</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="gtest-optional-33.cs">\r
+ <type name="TestCallerLineNumber">\r
+ <method name="Void Test(System.Object)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Decimal)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(Double)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(Single)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(UInt32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(Int64)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(UInt64)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Nullable`1[System.Decimal])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Nullable`1[System.Double])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Nullable`1[System.Single])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Nullable`1[System.Int32])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Nullable`1[System.UInt32])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Nullable`1[System.Int64])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void Test(System.Nullable`1[System.UInt64])" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="D">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="gtest-partial-01.cs">\r
<type name="B`1[U]">\r
<method name="Void .ctor()" attrs="6278">\r
<method name="Int32 Main()" attrs="150">\r
<size>64</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="D">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-variance-13.cs">\r
<type name="A">\r
<method name="Int32 Main()" attrs="150">\r
<size>61</size>\r
</method>\r
- <method name="Void <Main>m__0(System.Object)" attrs="145">\r
- <size>7</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Main>m__0(System.Object)" attrs="145">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-variance-16.cs">\r
<type name="S">\r
<method name="Int32 Bar(Foo`1[System.String], System.String)" attrs="145">\r
<size>16</size>\r
</method>\r
- <method name="Int32 <Main>m__0(System.Object)" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Int32 <Main>m__0(System.Object)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="gtest-variance-5.cs">\r
<type name="BothVariants`2[T1,T2]">\r
<method name="Int32 Main()" attrs="150">\r
<size>129</size>\r
</method>\r
- <method name="Int32 <Main>m__0()" attrs="145">\r
- <size>11</size>\r
- </method>\r
- <method name="Int32 <Main>m__1()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Int32 <Main>m__0()" attrs="145">\r
+ <size>11</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-276.cs">\r
<type name="EventTestClass">\r
<method name="Int32 Main()" attrs="150">\r
<size>68</size>\r
</method>\r
- <method name="Double <Main>m__0(Int32)" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Double <Main>m__0(Int32)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-327.cs">\r
<type name="X2">\r
<method name="Int32 Main()" attrs="150">\r
<size>21</size>\r
</method>\r
- <method name="Void <Test>m__0(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Test>m__0(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-481.cs">\r
<type name="TestDelegate">\r
<method name="Int32 Main()" attrs="150">\r
<size>50</size>\r
</method>\r
- <method name="Void <Main>m__0(Int32 ByRef)" attrs="145">\r
- <size>5</size>\r
- </method>\r
</type>\r
<type name="TestDelegate">\r
<method name="System.IAsyncResult BeginInvoke(Int32 ByRef, System.AsyncCallback, System.Object)" attrs="454">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="TestClass">\r
+ <method name="Void <Main>m__0(Int32 ByRef)" attrs="145">\r
+ <size>5</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-482.cs">\r
<type name="X">\r
<method name="Void Main(System.String[])" attrs="150">\r
<size>9</size>\r
</method>\r
- <method name="Boolean <foo>m__0(System.Object)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Tests">\r
+ <method name="Boolean <foo>m__0(System.Object)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-502.cs">\r
<type name="Base">\r
<method name="Void Main()" attrs="150">\r
<size>32</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>36</size>\r
- </method>\r
</type>\r
<type name="FooHandler">\r
<method name="System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object)" attrs="454">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>36</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-537.cs">\r
<type name="Base">\r
<method name="Void set_test(Boolean)" attrs="2193">\r
<size>2</size>\r
</method>\r
- <method name="Void <Main>m__0(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="ClassMain">\r
+ <method name="Void <Main>m__0(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-542.cs">\r
<type name="ARec">\r
<method name="Int32 Main()" attrs="150">\r
<size>70</size>\r
</method>\r
- <method name="Int32 <Main>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test1.CC">\r
+ <method name="Int32 <Main>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-579.cs">\r
<type name="TestCase">\r
<test name="test-640.cs">\r
<type name="C">\r
<method name="Int32 Main()" attrs="150">\r
- <size>128</size>\r
+ <size>139</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</type>\r
<type name="C">\r
<method name="Void Main()" attrs="150">\r
- <size>8</size>\r
+ <size>19</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<size>27</size>\r
</method>\r
<method name="Boolean Bar(System.Object)" attrs="145">\r
- <size>10</size>\r
+ <size>16</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<method name="Int32 Main()" attrs="150">\r
<size>64</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-675.cs">\r
<type name="B">\r
<test name="test-77.cs">\r
<type name="XX">\r
<method name="Int32 Main()" attrs="150">\r
- <size>393</size>\r
+ <size>443</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
<method name="Void Main()" attrs="150">\r
<size>14</size>\r
</method>\r
- <method name="Void <Test>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="A">\r
+ <method name="Void <Test>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-782.cs">\r
<type name="Test">\r
<method name="Void Main()" attrs="150">\r
<size>77</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
+ <method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
<size>7</size>\r
</method>\r
</type>\r
<method name="Void Main()" attrs="150">\r
<size>39</size>\r
</method>\r
- <method name="Void <Main>m__0(System.Object, System.String)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Void <Main>m__0(System.Object, System.String)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-849.cs">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-899.cs">\r
+ <type name="Test">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>49</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-9.cs">\r
<type name="X">\r
<method name="Int32 Main(System.String[])" attrs="150">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-900.cs">\r
+ <type name="D">\r
+ <method name="D op_Implicit(System.Action)" attrs="2198">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="Program">\r
+ <method name="Void Main()" attrs="145">\r
+ <size>37</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-901.cs">\r
+ <type name="X">\r
+ <method name="Void Main()" attrs="150">\r
+ <size>22</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-91.cs">\r
<type name="Abstract">\r
<method name="Void .ctor()" attrs="6276">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Void <f>m__0()" attrs="145">\r
- <size>27</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .cctor()" attrs="6289">\r
- <size>35</size>\r
+ <size>18</size>\r
+ </method>\r
+ <method name="Void <f>m__0()" attrs="145">\r
+ <size>27</size>\r
</method>\r
</type>\r
</test>\r
<method name="Void Main()" attrs="150">\r
<size>82</size>\r
</method>\r
- <method name="Void <op_Implicit>m__0()" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Void <op_Implicit>m__0()" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-11.cs">\r
<type name="D">\r
<method name="Int32 Main()" attrs="150">\r
<size>132</size>\r
</method>\r
- <method name="Void <Main>m__0(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__1(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="X">\r
+ <method name="Void <Main>m__0(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__1(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
<method name="Void <Main>m__2(Int32[])" attrs="145">\r
<size>2</size>\r
</method>\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="TDelegate <CreateMethodUnscoped`1>m__0[TDelegate](System.Object)" attrs="145">\r
- <size>15</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="TDelegate <CreateMethodUnscoped`1>m__0[TDelegate](System.Object)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-114.cs">\r
<type name="T">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Int32 <SomeCaller>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Int32 <SomeCaller>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-anon-115.cs">\r
<method name="Void Func[T](TestFunc`1[T])" attrs="145">\r
<size>2</size>\r
</method>\r
- <method name="Void <a>m__0(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>47</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="TestClass">\r
+ <method name="Void <a>m__0(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-117.cs">\r
<type name="C">\r
<method name="Void Main()" attrs="150">\r
<size>76</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-118.cs">\r
<type name="C">\r
<method name="Void Main()" attrs="150">\r
<size>101</size>\r
</method>\r
- <method name="T <Test2`1>m__0[T](T)" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
- <size>24</size>\r
- </method>\r
- <method name="System.String <Main>m__2(Int32)" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.String <Main>m__3(Int32)" attrs="145">\r
- <size>14</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="T <Test2`1>m__0[T](T)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="System.String <Main>m__2(Int32)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.String <Main>m__3(Int32)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-119.cs">\r
<type name="Test">\r
<method name="Void Main()" attrs="150">\r
<size>7</size>\r
</method>\r
- <method name="Int32 <TestNaturalSort>m__0(System.String, System.String)" attrs="145">\r
- <size>114</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>120</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Int32 <TestNaturalSort>m__0(System.String, System.String)" attrs="145">\r
+ <size>114</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-12.cs">\r
<type name="predicate">\r
<method name="System.Collections.ArrayList Find(predicate, System.Collections.ArrayList)" attrs="145">\r
<size>96</size>\r
</method>\r
- <method name="Boolean <Main>m__0(System.Object)" attrs="145">\r
- <size>20</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Boolean <Main>m__0(System.Object)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-120.cs">\r
<type name="C`1[T]">\r
<method name="Void Run()" attrs="145">\r
<size>2</size>\r
</method>\r
- <method name="Void <Foo`1>m__0[U]()" attrs="145">\r
- <size>6</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="C`1[T]">\r
+ <method name="Void <Foo`1>m__0[U]()" attrs="145">\r
+ <size>6</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-121.cs">\r
<type name="EmptyDelegate">\r
<method name="Int32 Main()" attrs="150">\r
<size>95</size>\r
</method>\r
- <method name="Int32 <Main>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Int32 <Main>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-123.cs">\r
<type name="MemberAccessData">\r
<method name="Void <InstanceTests>m__0()" attrs="129">\r
<size>7</size>\r
</method>\r
- <method name="Void <Main>m__3()" attrs="145">\r
- <size>62</size>\r
- </method>\r
- <method name="Void <Main>m__4()" attrs="145">\r
- <size>54</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>15</size>\r
</method>\r
</type>\r
- <type name="C">\r
- <method name="Void <Main>m__1()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="Void <Main>m__2()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="Void <Main>m__5(E)" attrs="145">\r
- <size>35</size>\r
- </method>\r
- </type>\r
<type name="C+<Main>c__AnonStorey0">\r
<method name="Void <>m__0()" attrs="131">\r
<size>49</size>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Main>m__1()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="Void <Main>m__2()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="Void <Main>m__3()" attrs="145">\r
+ <size>62</size>\r
+ </method>\r
+ <method name="Void <Main>m__4()" attrs="145">\r
+ <size>54</size>\r
+ </method>\r
+ <method name="Void <Main>m__5(E)" attrs="145">\r
+ <size>35</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-124.cs">\r
<type name="Disposable`1[T]">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
<method name="TDest <GetUpcaster`2>m__0[TSource,TDest](TSource)" attrs="145">\r
<size>20</size>\r
</method>\r
<method name="TDest <GetDowncaster`2>m__1[TSource,TDest](TSource)" attrs="145">\r
<size>20</size>\r
</method>\r
- <method name="Void .ctor()" attrs="6278">\r
- <size>7</size>\r
- </method>\r
</type>\r
</test>\r
<test name="test-anon-127.cs">\r
<method name="Void <>m__0(System.Object, System.EventArgs)" attrs="131">\r
<size>37</size>\r
</method>\r
- <method name="Void <>m__1(System.Object, System.EventArgs)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Void <>m__1(System.Object, System.EventArgs)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-anon-132.cs">\r
<method name="System.Func`1[T] XX()" attrs="145">\r
<size>40</size>\r
</method>\r
- <method name="T <XX>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="C`1[T]">\r
+ <method name="T <XX>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ </type>\r
<type name="C2`1[T]">\r
<method name="C`1[T] <XX>m__0()" attrs="145">\r
<size>9</size>\r
<method name="Void Test_3[T]()" attrs="134">\r
<size>21</size>\r
</method>\r
- <method name="Void <Test_3`1>m__0[T]()" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Void <Test_3`1>m__0[T]()" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-143.cs">\r
<type name="TestC">\r
<method name="System.Func`1[System.Type] Test[T]()" attrs="150">\r
<size>21</size>\r
</method>\r
- <method name="System.Type <Test`1>m__0[T]()" attrs="145">\r
- <size>18</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="System.Type <Test`1>m__0[T]()" attrs="145">\r
+ <size>18</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-anon-144.cs">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Void <ThisCausesACrash`1>m__0[I](System.Object, System.EventArgs)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Void <ThisCausesACrash`1>m__0[I](System.Object, System.EventArgs)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-anon-145.cs">\r
<method name="Void AnyMethod[T]()" attrs="134">\r
<size>21</size>\r
</method>\r
- <method name="Void <AnyMethod`1>m__0[T]()" attrs="145">\r
- <size>32</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <AnyMethod`1>m__0[T]()" attrs="145">\r
+ <size>32</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-146.cs">\r
<type name="TheClass">\r
<size>7</size>\r
</method>\r
</type>\r
- <type name="Test">\r
- <method name="Void <Main>m__0(Int32, Int32, Int32)" attrs="145">\r
- <size>24</size>\r
- </method>\r
- </type>\r
<type name="C+<Curry>c__AnonStorey0`3+<Curry>c__AnonStorey1`3[T1,T2,T3]">\r
<method name="System.Action`1[T3] <>m__0(T2)" attrs="131">\r
<size>52</size>\r
<size>35</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Void <Main>m__0(Int32, Int32, Int32)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-148.cs">\r
<type name="Func`1[TResult]">\r
<size>8</size>\r
</method>\r
</type>\r
- <type name="Foo">\r
- <method name="Inner <Main>m__0(System.String)" attrs="145">\r
- <size>21</size>\r
- </method>\r
- </type>\r
<type name="Foo+foo_fn">\r
<method name="Inner Invoke(System.String)" attrs="454">\r
<size>0</size>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Foo">\r
+ <method name="Inner <Main>m__0(System.String)" attrs="145">\r
+ <size>21</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-150.cs">\r
<type name="M">\r
<method name="Void UseATemplate()" attrs="134">\r
<size>37</size>\r
</method>\r
- <method name="Void <UseATemplate>m__0(System.Collections.Generic.List`1[System.Int32] ByRef)" attrs="145">\r
- <size>17</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="TestComp.Program+MyClass">\r
+ <method name="Void <UseATemplate>m__0(System.Collections.Generic.List`1[System.Int32] ByRef)" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-154.cs">\r
<type name="Class">\r
<method name="Void IFoo<T>.Test()" attrs="481">\r
<size>38</size>\r
</method>\r
- <method name="Void <Test>m__0()" attrs="145">\r
- <size>8</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X`1[T]">\r
+ <method name="Void <Test>m__0()" attrs="145">\r
+ <size>8</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-158.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
<size>22</size>\r
</method>\r
- <method name="T <Foo`1>m__0[T](T)" attrs="145">\r
- <size>77</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="T <Foo`1>m__0[T](T)" attrs="145">\r
+ <size>77</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-166.cs">\r
<type name="A">\r
<method name="Int32 Main()" attrs="150">\r
<size>22</size>\r
</method>\r
- <method name="Void <Test`2>m__0[T,U]()" attrs="145">\r
- <size>39</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="A">\r
+ <method name="Void <Test`2>m__0[T,U]()" attrs="145">\r
+ <size>39</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-167.cs">\r
<type name="Foo">\r
<method name="Void Main()" attrs="150">\r
<size>36</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>89</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>89</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-anon-168.cs">\r
<method name="Void Main()" attrs="150">\r
<size>113</size>\r
</method>\r
- <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
- <size>51</size>\r
- </method>\r
- <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
- <size>46</size>\r
- </method>\r
- <method name="Int32 <Main>m__2(Int32)" attrs="145">\r
- <size>42</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Program">\r
+ <method name="Int32 <Main>m__0(Int32)" attrs="145">\r
+ <size>51</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1(Int32)" attrs="145">\r
+ <size>46</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__2(Int32)" attrs="145">\r
+ <size>42</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-169.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
<size>74</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>18</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>18</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-170.cs">\r
<type name="MyClass">\r
<method name="Int32 Main()" attrs="150">\r
<size>44</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="TestGotoLabels.GotoLabelsTest">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-27.cs">\r
<type name="D">\r
<method name="System.String <Hello>m__0()" attrs="129">\r
<size>217</size>\r
</method>\r
- <method name="Void <Hello>m__1(System.String)" attrs="145">\r
- <size>8</size>\r
- </method>\r
- <method name="Void <Hello>m__2(System.String)" attrs="145">\r
- <size>8</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>108</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Void <Hello>m__1(System.String)" attrs="145">\r
+ <size>8</size>\r
+ </method>\r
+ <method name="Void <Hello>m__2(System.String)" attrs="145">\r
+ <size>8</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-30.cs">\r
<type name="X">\r
<method name="Void Main()" attrs="150">\r
<size>36</size>\r
</method>\r
- <method name="System.Object <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
- <size>26</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="System.Object <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>26</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-32.cs">\r
<type name="StringSender">\r
<method name="Void Main()" attrs="150">\r
<size>37</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor(TestMethod)" attrs="6278">\r
<size>8</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-37.cs">\r
<type name="DelegateInit">\r
<method name="Void Main(System.String[])" attrs="150">\r
<size>12</size>\r
</method>\r
- <method name="Void <_print>m__0()" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .cctor()" attrs="6289">\r
- <size>35</size>\r
+ <size>18</size>\r
</method>\r
</type>\r
<type name="DelegateInit+FooDelegate">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="DelegateInit">\r
+ <method name="Void <_print>m__0()" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-38.cs">\r
<type name="Simple">\r
<method name="Void Main()" attrs="150">\r
<size>14</size>\r
</method>\r
- <method name="Simple <Test>m__0()" attrs="145">\r
- <size>45</size>\r
- </method>\r
- <method name="Void <Test>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Simple <Test>m__0()" attrs="145">\r
+ <size>45</size>\r
+ </method>\r
+ <method name="Void <Test>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-43.cs">\r
<type name="Simple">\r
<method name="Int32 Main()" attrs="150">\r
<size>14</size>\r
</method>\r
- <method name="Void <a>m__0(Int32)" attrs="145">\r
- <size>8</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .cctor()" attrs="6289">\r
- <size>46</size>\r
+ <size>29</size>\r
</method>\r
</type>\r
<type name="TestFunc">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="TestClass">\r
+ <method name="Void <a>m__0(Int32)" attrs="145">\r
+ <size>8</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-46.cs">\r
<type name="Foo">\r
<method name="Void Main()" attrs="150">\r
<size>12</size>\r
</method>\r
- <method name="Void <Print>m__0()" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void .cctor()" attrs="6289">\r
- <size>35</size>\r
+ <size>18</size>\r
</method>\r
</type>\r
<type name="FooDelegate">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="Void <Print>m__0()" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-52.cs">\r
<type name="X">\r
<method name="Void Main(System.String[])" attrs="150">\r
<size>51</size>\r
</method>\r
- <method name="Void <Main>m__0(Observable)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Observable">\r
+ <method name="Void <Main>m__0(Observable)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-57.cs">\r
<type name="X">\r
<method name="Void Main()" attrs="150">\r
<size>70</size>\r
</method>\r
- <method name="Void <Main>m__0(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Main>m__1(System.String ByRef)" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Main>m__0(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Main>m__1(System.String ByRef)" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-69.cs">\r
<type name="TargetAccessDelegate">\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
- </type>\r
- <type name="C">\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- </type>\r
- <type name="C+<Main>c__AnonStorey1">\r
<method name="Void <>m__0()" attrs="131">\r
<size>49</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-71.cs">\r
<type name="Program">\r
<method name="Void Test_1()" attrs="145">\r
<size>37</size>\r
</method>\r
- <method name="Void <Main>m__0(System.Object)" attrs="145">\r
- <size>16</size>\r
- </method>\r
- <method name="Void <Test_1>m__1(System.Object)" attrs="145">\r
- <size>32</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="T">\r
+ <method name="Void <Main>m__0(System.Object)" attrs="145">\r
+ <size>16</size>\r
+ </method>\r
+ <method name="Void <Test_1>m__1(System.Object)" attrs="145">\r
+ <size>32</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-74.cs">\r
<type name="Foo">\r
<method name="Void Main(System.String[])" attrs="150">\r
<size>36</size>\r
</method>\r
- <method name="System.String[,] <Main>m__0()" attrs="145">\r
- <size>42</size>\r
- </method>\r
</type>\r
<type name="Foo+SimpleDelegate">\r
<method name="System.String[,] Invoke()" attrs="454">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Foo">\r
+ <method name="System.String[,] <Main>m__0()" attrs="145">\r
+ <size>42</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-75.cs">\r
<type name="D">\r
<method name="Void TestMe()" attrs="129">\r
<size>152</size>\r
</method>\r
- <method name="Boolean <TestMe>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="Boolean <TestMe>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-76.cs">\r
<type name="FactoryDelegate">\r
<method name="Int32 Main()" attrs="150">\r
<size>63</size>\r
</method>\r
- <method name="Void <Main>m__0()" attrs="145">\r
- <size>19</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="DelegateTest">\r
+ <method name="Void <Main>m__0()" attrs="145">\r
+ <size>19</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-79.cs">\r
<type name="Test">\r
<method name="Void set_Handler(System.EventHandler)" attrs="2182">\r
<size>9</size>\r
</method>\r
- <method name="Void <get_DoNothingEventHandler>m__0(System.Object, System.EventArgs)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void <get_DoSomethingEventHandler>m__1(System.Object, System.EventArgs)" attrs="129">\r
<size>16</size>\r
</method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>18</size>\r
</method>\r
+ <method name="Void <get_DoNothingEventHandler>m__0(System.Object, System.EventArgs)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-anon-81.cs">\r
<size>7</size>\r
</method>\r
</type>\r
- <type name="MainClass">\r
- <method name="Void <Test2>m__0(System.String)" attrs="145">\r
- <size>28</size>\r
- </method>\r
- <method name="Void <Test3>m__1()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <Test4>m__2()" attrs="145">\r
- <size>32</size>\r
- </method>\r
- <method name="Void <Test4>m__3()" attrs="145">\r
- <size>29</size>\r
- </method>\r
- </type>\r
<type name="MainClass+<Main>c__AnonStorey0">\r
<method name="Void <>m__1(System.String)" attrs="131">\r
<size>14</size>\r
<method name="Int32 <>m__0(Int32)" attrs="131">\r
<size>54</size>\r
</method>\r
- <method name="Int32 <>m__1(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="MainClass+<Test2>c__AnonStorey1">\r
<method name="Void <>m__0()" attrs="131">\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="MainClass">\r
+ <method name="Void <Test2>m__0(System.String)" attrs="145">\r
+ <size>28</size>\r
+ </method>\r
+ <method name="Void <Test3>m__1()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <Test4>m__2()" attrs="145">\r
+ <size>32</size>\r
+ </method>\r
+ <method name="Void <Test4>m__3()" attrs="145">\r
+ <size>29</size>\r
+ </method>\r
+ </type>\r
+ <type name="MainClass+<Test5>c__AnonStorey4">\r
+ <method name="Int32 <>m__1(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-83.cs">\r
<type name="C">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Void <MyDelegate>m__0(System.Object, System.EventArgs)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>42</size>\r
</method>\r
+ <method name="Void <MyDelegate>m__0(System.Object, System.EventArgs)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-anon-84.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>27</size>\r
</method>\r
- <method name="C <field>m__0(Int32)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>43</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="C <field>m__0(Int32)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-85.cs">\r
<type name="X">\r
<size>9</size>\r
</method>\r
</type>\r
- <type name="C+<Test>c__AnonStorey2">\r
- <method name="Void <>m__2()" attrs="145">\r
- <size>4</size>\r
- </method>\r
- </type>\r
<type name="C+<Test>c__AnonStorey2+<Test>c__AnonStorey1">\r
<method name="Void <>m__0()" attrs="131">\r
<size>21</size>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C+<Test>c__AnonStorey2">\r
+ <method name="Void <>m__2()" attrs="145">\r
+ <size>4</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-anon-89.cs">\r
<type name="C">\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Void <>m__0(System.Object, System.EventArgs)" attrs="131">\r
+ <size>24</size>\r
+ </method>\r
</type>\r
<type name="BaseTest.MainClass">\r
<method name="Void <Main>m__0(System.Object, System.EventArgs)" attrs="145">\r
<size>13</size>\r
</method>\r
</type>\r
- <type name="BaseTest.MainClass+<>c__AnonStorey1">\r
- <method name="Void <>m__0(System.Object, System.EventArgs)" attrs="131">\r
- <size>24</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="test-anon-94.cs">\r
<type name="Program">\r
<method name="Int32 Main()" attrs="150">\r
<size>20</size>\r
</method>\r
- <method name="Void <Test>m__0()" attrs="145">\r
- <size>63</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>25</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Test>m__0()" attrs="145">\r
+ <size>63</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-01.cs">\r
<type name="Program">\r
<method name="System.Threading.Tasks.Task RunAsync()" attrs="145">\r
<size>48</size>\r
</method>\r
- <method name="Void <RunAsync>m__0()" attrs="145">\r
- <size>62</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="Program">\r
+ <method name="Void <RunAsync>m__0()" attrs="145">\r
+ <size>62</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-02.cs">\r
<type name="C">\r
</type>\r
<type name="C+<SynchronousCall>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>49</size>\r
+ <size>79</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</type>\r
<type name="Program+<Main>c__async7">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>44</size>\r
+ <size>69</size>\r
</method>\r
</type>\r
<type name="Program+<Main>c__AnonStorey1">\r
<size>52</size>\r
</method>\r
</type>\r
- <type name="Program">\r
- <method name="System.Threading.Tasks.Task`1[System.Decimal] <Main>m__0(System.Decimal)" attrs="145">\r
- <size>41</size>\r
- </method>\r
- </type>\r
<type name="Program+<Main>c__AnonStorey1">\r
<method name="System.Threading.Tasks.Task`1[System.Decimal] <>m__3(System.Decimal)" attrs="131">\r
<size>49</size>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="Program">\r
+ <method name="System.Threading.Tasks.Task`1[System.Decimal] <Main>m__0(System.Decimal)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-07.cs">\r
<type name="Program">\r
</type>\r
<type name="Program+<Main>c__async4">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>43</size>\r
- </method>\r
- </type>\r
- <type name="Program">\r
- <method name="System.Threading.Tasks.Task`1[System.Int16] <Main>m__0(Int16)" attrs="145">\r
- <size>41</size>\r
+ <size>68</size>\r
</method>\r
</type>\r
<type name="Program+<Main>c__AnonStorey1">\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="Program">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int16] <Main>m__0(Int16)" attrs="145">\r
+ <size>41</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-08.cs">\r
<type name="AsyncTypeInference">\r
<method name="Void Test2[T](System.Func`2[System.Int32,T])" attrs="145">\r
<size>10</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0(Int32)" attrs="145">\r
- <size>33</size>\r
- </method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__1(Int32)" attrs="145">\r
- <size>33</size>\r
- </method>\r
- <method name="System.Threading.Tasks.Task <Main>m__2(Int32)" attrs="145">\r
- <size>33</size>\r
- </method>\r
- <method name="System.Threading.Tasks.Task <Main>m__3(Int32)" attrs="145">\r
- <size>33</size>\r
- </method>\r
- <method name="Int32 <TT>m__4()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
<type name="AsyncTypeInference+<Main>c__asyncB">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>37</size>\r
- </method>\r
- </type>\r
- <type name="AsyncTypeInference+<Main>c__async2">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="AsyncTypeInference+<Main>c__async5">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <size>67</size>\r
</method>\r
</type>\r
<type name="AsyncTypeInference+<Main>c__async2">\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="AsyncTypeInference">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0(Int32)" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__1(Int32)" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task <Main>m__2(Int32)" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task <Main>m__3(Int32)" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Int32 <TT>m__4()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="AsyncTypeInference+<Main>c__async2">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="AsyncTypeInference+<Main>c__async5">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-09.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
<size>57</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int16] <Main>m__0(System.String)" attrs="145">\r
- <size>33</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
<type name="Test+<Main>c__async2">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>38</size>\r
+ <size>63</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="Test">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int16] <Main>m__0(System.String)" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-10.cs">\r
<type name="C">\r
<method name="Void MoveNext()" attrs="486">\r
<size>338</size>\r
</method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
</type>\r
<type name="C+<TestCompositionCall_2>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
</method>\r
</type>\r
<type name="C+<TestCompositionCall_1>c__async0">\r
- <method name="System.String <>m__0()" attrs="145">\r
- <size>21</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionCall_2>c__async1">\r
- <method name="System.String <>m__0()" attrs="145">\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionCall_3>c__async2">\r
- <method name="Byte <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_1>c__async3">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_2>c__async4">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_3>c__async5">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_4>c__async6">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionCall_1>c__async0">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <method name="System.String <>m__0()" attrs="145">\r
+ <size>21</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
<size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionCall_2>c__async1">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <method name="System.String <>m__0()" attrs="145">\r
<size>13</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionCall_3>c__async2">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Byte <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_1>c__async3">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_2>c__async4">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_3>c__async5">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="C+<TestCompositionPair_4>c__async6">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
</test>\r
<method name="Void MoveNext()" attrs="486">\r
<size>266</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="C+<TestStack_1>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
<size>327</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="C+<TestStack_2>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
<size>302</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="C+<TestStack_3>c__async2">\r
<method name="Void MoveNext()" attrs="486">\r
<size>467</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="C+<TestStack_4>c__async3">\r
<method name="Void MoveNext()" attrs="486">\r
<size>323</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="C+<TestStack_5>c__async4">\r
<method name="Void MoveNext()" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="G`1+<TestStack_1>c__async0[T]">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<TestStack_1>c__async0">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<TestStack_2>c__async1">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<TestStack_3>c__async2">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<TestStack_4>c__async3">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-12.cs">\r
<type name="C">\r
<method name="Void MoveNext()" attrs="486">\r
<size>455</size>\r
</method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
<method name="Int32 <>m__0()" attrs="145">\r
<size>17</size>\r
</method>\r
<method name="Int32 <>m__2()" attrs="145">\r
<size>9</size>\r
</method>\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
- </method>\r
</type>\r
</test>\r
<test name="test-async-13.cs">\r
<method name="Int32 Main()" attrs="150">\r
<size>187</size>\r
</method>\r
- <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
- <size>45</size>\r
- </method>\r
- <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Tester <CastTest_2>m__4()" attrs="129">\r
<size>9</size>\r
</method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_1>c__async0">\r
- <method name="Boolean <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_2>c__async1">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Double <>m__3()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_3>c__async2">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__3()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_4>c__async3">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_5>c__async4">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_6>c__async5">\r
- <method name="Int64 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_7>c__async6">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_8>c__async7">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Byte <>m__1()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<ArrayAccessTest_9>c__async8">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__3()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__4()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__5()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="S <>m__6()" attrs="145">\r
- <size>25</size>\r
- </method>\r
- </type>\r
- <type name="Tester">\r
<method name="System.Threading.Tasks.Task`1[System.Boolean] NewArrayInitTest_7()" attrs="129">\r
<size>33</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.Decimal <>m__2()" attrs="145">\r
- <size>19</size>\r
- </method>\r
- <method name="System.Decimal <>m__4()" attrs="145">\r
- <size>19</size>\r
- </method>\r
</type>\r
<type name="Tester+<ArrayAccessTest_4>c__async3">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester">\r
<method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_11()" attrs="129">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<AssignTest_1>c__asyncB">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<AssignTest_2>c__asyncC">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.Nullable`1[System.SByte] <>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
</type>\r
<type name="Tester+<AssignTest_3>c__asyncD">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<BinaryTest_1>c__asyncE">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<BinaryTest_2>c__asyncF">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.Nullable`1[System.Boolean] <>m__0()" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Boolean] <>m__1()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Boolean] <>m__2()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Boolean] <>m__3()" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Boolean] <>m__4()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Boolean] <>m__5()" attrs="145">\r
- <size>14</size>\r
- </method>\r
</type>\r
<type name="Tester+<BinaryTest_4>c__async11">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.Nullable`1[System.Int16] <>m__0()" attrs="145">\r
- <size>14</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Byte] <>m__1()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Decimal] <>m__2()" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="System.Nullable`1[System.Decimal] <>m__3()" attrs="145">\r
- <size>17</size>\r
- </method>\r
</type>\r
<type name="Tester+<BinaryTest_5>c__async12">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<CallTest_2>c__async15">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
</type>\r
<type name="Tester+<CallTest_3>c__async16">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<CallTest_4>c__async17">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="E <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<CallTest_5>c__async18">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.Decimal <>m__0()" attrs="145">\r
- <size>15</size>\r
- </method>\r
</type>\r
<type name="Tester+<CastTest_2>c__async1A">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.String <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
</type>\r
<type name="Tester+<CoalescingTest_2>c__async1C">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.Nullable`1[System.Int16] <>m__0()" attrs="145">\r
- <size>17</size>\r
- </method>\r
- <method name="Byte <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<ConditionalTest_1>c__async1D">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<ConditionalTest_2>c__async1E">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<ConditionalTest_3>c__async1F">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Boolean <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<ConditionalTest_4>c__async20">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<DelegateInvoke_4>c__async21">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0(Int32)" attrs="145">\r
- <size>11</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<EventInvoke_1>c__async22">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<IndexerTest_1>c__async24">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<IndexerTest_2>c__async25">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<IndexerTest_3>c__async26">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<IndexerTest_4>c__async27">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<IndexerTest_5>c__async28">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<IndexerTest_6>c__async29">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<IndexerTest_7>c__async2A">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Tester <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
</type>\r
<type name="Tester+<IsTest_2>c__async2C">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.Nullable`1[System.UInt32] <>m__0()" attrs="145">\r
- <size>14</size>\r
- </method>\r
</type>\r
<type name="Tester+<LogicalUserOperator_1>c__async2D">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Base <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="Base <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
</type>\r
<type name="Tester+<LogicalUserOperator_2>c__async2E">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Base <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
</type>\r
<type name="Tester+<LogicalUserOperator_3>c__async2F">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Base <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="Base <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewTest_1>c__async30">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewTest_2>c__async31">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewDelegate_1>c__async32">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewInitTest_1>c__async34">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__3()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__4()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__5()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewInitTest_2>c__async35">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.String <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__3()" attrs="145">\r
- <size>10</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewArrayInitTest_1>c__async36">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewArrayInitTest_2>c__async37">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewArrayInitTest_3>c__async38">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Byte <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewArrayInitTest_4>c__async39">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="UInt16 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="UInt16 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewArrayInitTest_5>c__async3A">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="S <>m__0()" attrs="145">\r
- <size>25</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewArrayInitTest_6>c__async3B">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<NewArrayInitTest_7>c__async3C">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<PropertyTest_2>c__async3E">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<PropertyTest_3>c__async3F">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__2()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<StringConcatTest_1>c__async40">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="System.String <>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="System.String <>m__1()" attrs="145">\r
- <size>13</size>\r
- </method>\r
- <method name="System.String <>m__2()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<UnaryTest_1>c__async41">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<UnaryTest_2>c__async42">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<VariableInitializer_1>c__async44">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
- <method name="Int32 <>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="Tester+<ArrayAccessTest_5>c__async4+<ArrayAccessTest_5>c__AnonStorey45">\r
<method name="Int32 <>m__0()" attrs="131">\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="Tester">\r
+ <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>45</size>\r
+ </method>\r
+ <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_1>c__async0">\r
+ <method name="Boolean <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_2>c__async1">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Double <>m__3()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_3>c__async2">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="System.Decimal <>m__2()" attrs="145">\r
+ <size>19</size>\r
+ </method>\r
+ <method name="Int32 <>m__3()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="System.Decimal <>m__4()" attrs="145">\r
+ <size>19</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_4>c__async3">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_5>c__async4">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_6>c__async5">\r
+ <method name="Int64 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_7>c__async6">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_8>c__async7">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Byte <>m__1()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_9>c__async8">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__3()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__4()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__5()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="S <>m__6()" attrs="145">\r
+ <size>25</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_10>c__async9">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ArrayAccessTest_11>c__asyncA">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<AssignTest_1>c__asyncB">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<AssignTest_2>c__asyncC">\r
+ <method name="System.Nullable`1[System.SByte] <>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<AssignTest_3>c__asyncD">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<BinaryTest_1>c__asyncE">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<BinaryTest_3>c__async10">\r
+ <method name="System.Nullable`1[System.Boolean] <>m__0()" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Boolean] <>m__1()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Boolean] <>m__2()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Boolean] <>m__3()" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Boolean] <>m__4()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Boolean] <>m__5()" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<BinaryTest_4>c__async11">\r
+ <method name="System.Nullable`1[System.Int16] <>m__0()" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Byte] <>m__1()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Decimal] <>m__2()" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.Nullable`1[System.Decimal] <>m__3()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CallTest_1>c__async14">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CallTest_2>c__async15">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CallTest_3>c__async16">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CallTest_4>c__async17">\r
+ <method name="E <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CastTest_1>c__async19">\r
+ <method name="System.Decimal <>m__0()" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CoalescingTest_1>c__async1B">\r
+ <method name="System.String <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<CoalescingTest_2>c__async1C">\r
+ <method name="System.Nullable`1[System.Int16] <>m__0()" attrs="145">\r
+ <size>17</size>\r
+ </method>\r
+ <method name="Byte <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ConditionalTest_1>c__async1D">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ConditionalTest_2>c__async1E">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ConditionalTest_3>c__async1F">\r
+ <method name="Boolean <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<ConditionalTest_4>c__async20">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<DelegateInvoke_4>c__async21">\r
+ <method name="Int32 <>m__0(Int32)" attrs="145">\r
+ <size>11</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<FieldTest_1>c__async23">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_1>c__async24">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_2>c__async25">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_3>c__async26">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_4>c__async27">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_5>c__async28">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IndexerTest_6>c__async29">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IsTest_1>c__async2B">\r
+ <method name="Tester <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<IsTest_2>c__async2C">\r
+ <method name="System.Nullable`1[System.UInt32] <>m__0()" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<LogicalUserOperator_1>c__async2D">\r
+ <method name="Base <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Base <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<LogicalUserOperator_2>c__async2E">\r
+ <method name="Base <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<LogicalUserOperator_3>c__async2F">\r
+ <method name="Base <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Base <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewTest_1>c__async30">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewTest_2>c__async31">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewDelegate_1_0>c__async33">\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewInitTest_1>c__async34">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__3()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__4()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__5()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewInitTest_2>c__async35">\r
+ <method name="System.String <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__3()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_1>c__async36">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_2>c__async37">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_3>c__async38">\r
+ <method name="Byte <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_4>c__async39">\r
+ <method name="UInt16 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="UInt16 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_5>c__async3A">\r
+ <method name="S <>m__0()" attrs="145">\r
+ <size>25</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewArrayInitTest_6>c__async3B">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<PropertyTest_1>c__async3D">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<PropertyTest_2>c__async3E">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<PropertyTest_3>c__async3F">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__2()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<StringConcatTest_1>c__async40">\r
+ <method name="System.String <>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="System.String <>m__1()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="System.String <>m__2()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<UnaryTest_1>c__async41">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<UnaryTest_3>c__async43">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<VariableInitializer_1>c__async44">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ <method name="Int32 <>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-14.cs">\r
<type name="C">\r
<method name="Int32 Main()" attrs="150">\r
<size>214</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
- <size>33</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="C+<TestResult>c__async0">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="C+<Main>c__async1">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="C">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
+ <size>33</size>\r
</method>\r
</type>\r
<type name="C+<TestResult>c__async0">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="C+<Main>c__async1">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
</test>\r
<method name="Void MoveNext()" attrs="486">\r
<size>295</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ </type>\r
+ <type name="Tester+<NewInitTestGen>c__async0`1[T]">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<NewInitCol>c__async1">\r
<method name="Int32 <>m__0()" attrs="145">\r
<size>9</size>\r
</method>\r
<method name="Int32 Main()" attrs="150">\r
<size>187</size>\r
</method>\r
- <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>331</size>\r
</method>\r
</type>\r
+ <type name="Tester+<SwitchTest_1>c__async0">\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<Using_1>c__async1">\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester+<Foreach_1>c__async2">\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester">\r
+ <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
<type name="Tester+<SwitchTest_1>c__async0">\r
<method name="System.String <>m__0()" attrs="145">\r
<size>13</size>\r
<size>36</size>\r
</method>\r
</type>\r
- <type name="Tester+<SwitchTest_1>c__async0">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<Using_1>c__async1">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
- </method>\r
- </type>\r
- <type name="Tester+<Foreach_1>c__async2">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
- </method>\r
- </type>\r
</test>\r
<test name="test-async-17.cs">\r
<type name="Tester">\r
<method name="Int32 Main()" attrs="150">\r
<size>187</size>\r
</method>\r
- <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="Tester+<TestException_1>c__async0">\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>7</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_2>c__async1">\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>7</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_3>c__async2">\r
- <method name="System.Threading.Tasks.Task <>m__0()" attrs="145">\r
- <size>33</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_4>c__async3">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_5>c__async4">\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>7</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_6>c__async5">\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>7</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_7>c__async6">\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>7</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_3>c__async2+<TestException_3>c__async7">\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>7</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="Tester">\r
+ <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
+ <size>12</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_1>c__async0">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>7</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_2>c__async1">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>7</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_3>c__async2">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="System.Threading.Tasks.Task <>m__0()" attrs="145">\r
+ <size>33</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_4>c__async3">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_5>c__async4">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>7</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_6>c__async5">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>7</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_7>c__async6">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>7</size>\r
</method>\r
</type>\r
<type name="Tester+<TestException_3>c__async2+<TestException_3>c__async7">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>7</size>\r
</method>\r
</type>\r
</test>\r
<method name="Int32 Main()" attrs="150">\r
<size>187</size>\r
</method>\r
- <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
- <size>20</size>\r
- </method>\r
- <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
- <size>15</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
- <size>12</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="Tester+<Add_1>c__async0">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<AssignCompound_1>c__async1">\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<Convert_1>c__async2">\r
- <method name="System.Object <>m__0()" attrs="145">\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<Invocation_1>c__async3">\r
- <method name="System.Object <>m__0()" attrs="145">\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="Tester">\r
+ <method name="Boolean <Main>m__0(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>20</size>\r
+ </method>\r
+ <method name="System.String <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__2(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>15</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(Boolean)" attrs="145">\r
+ <size>12</size>\r
+ </method>\r
+ </type>\r
<type name="Tester+<Add_1>c__async0">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="Tester+<AssignCompound_1>c__async1">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
</method>\r
</type>\r
<type name="Tester+<Convert_1>c__async2">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <method name="System.Object <>m__0()" attrs="145">\r
<size>13</size>\r
</method>\r
</type>\r
<type name="Tester+<Invocation_1>c__async3">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <method name="System.Object <>m__0()" attrs="145">\r
<size>13</size>\r
</method>\r
</type>\r
</type>\r
<type name="A+<async>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>38</size>\r
+ <size>63</size>\r
</method>\r
</type>\r
<type name="A">\r
<method name="Void M1()" attrs="145">\r
<size>92</size>\r
</method>\r
- <method name="Void <M1>m__0(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <M1>m__1(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Void <M1>m__2(Int32)" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</type>\r
<type name="A+<async>c__async2">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>37</size>\r
+ <size>62</size>\r
</method>\r
</type>\r
<type name="A+<CastTest>c__async3">\r
</type>\r
<type name="A+async>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>31</size>\r
+ <size>61</size>\r
</method>\r
</type>\r
<type name="D">\r
</type>\r
<type name="D+<M>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>31</size>\r
+ <size>61</size>\r
</method>\r
</type>\r
<type name="asyncAttribute+async">\r
<size>7</size>\r
</method>\r
</type>\r
+ <type name="AwaitNS.Formals">\r
+ <method name="Void <M1>m__0(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <M1>m__1(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Void <M1>m__2(Int32)" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-23.cs">\r
<type name="MyContext">\r
<method name="Void MoveNext()" attrs="486">\r
<size>197</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>21</size>\r
- </method>\r
</type>\r
<type name="MyContext">\r
<method name="Void .ctor(ManualResetEvent)" attrs="6278">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>21</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-async-24.cs">\r
<method name="Void MoveNext()" attrs="486">\r
<size>275</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-async-25.cs">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Int32 <CompilationTestOnly>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>15</size>\r
</method>\r
</type>\r
+ <type name="Program">\r
+ <method name="Int32 <CompilationTestOnly>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-26.cs">\r
<type name="ConsoleApplication1.Program">\r
<method name="Int32 Main()" attrs="150">\r
<size>95</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
- <size>47</size>\r
- </method>\r
- <method name="Int32 <Main>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="ConsoleApplication1.Program">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
+ <size>47</size>\r
+ </method>\r
+ <method name="Int32 <Main>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-27.cs">\r
<type name="MainClass">\r
<method name="Void MoveNext()" attrs="486">\r
<size>196</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-async-28.cs">\r
<method name="Void MoveNext()" attrs="486">\r
<size>282</size>\r
</method>\r
- <method name="Int32 <>m__0(Int32)" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-async-29.cs">\r
</type>\r
<type name="C+<Test2>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>59</size>\r
+ <size>89</size>\r
</method>\r
</type>\r
<type name="C+<Test>c__async0">\r
<method name="Int32 Main()" attrs="150">\r
<size>409</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
- <size>33</size>\r
- </method>\r
- <method name="Boolean <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
- <size>24</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="System.Threading.Tasks.Task NestedAsyncAnonymousMethod()" attrs="150">\r
<size>33</size>\r
</method>\r
- <method name="Boolean <Main>m__2(System.Type)" attrs="145">\r
- <size>24</size>\r
- </method>\r
- <method name="Boolean <Main>m__3(System.Reflection.MethodInfo)" attrs="145">\r
- <size>24</size>\r
- </method>\r
</type>\r
<type name="N.M.C+<NestedAsyncAnonymousMethod>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>27</size>\r
- </method>\r
</type>\r
<type name="N.M.C+<NestedAsyncAnonymousMethod>c__async1+<NestedAsyncAnonymousMethod>c__async2">\r
<method name="Void MoveNext()" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="N.M.C">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__1(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__2(System.Type)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ </type>\r
+ <type name="N.M.C+<NestedAsyncAnonymousMethod>c__async1">\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>27</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-36.cs">\r
<type name="X">\r
<method name="Void MoveNext()" attrs="486">\r
<size>272</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>7</size>\r
- </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>7</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-async-38.cs">\r
<method name="Void MoveNext()" attrs="486">\r
<size>220</size>\r
</method>\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-async-40.cs">\r
<method name="Void MoveNext()" attrs="486">\r
<size>196</size>\r
</method>\r
- <method name="Void <>m__0()" attrs="145">\r
- <size>2</size>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
</method>\r
</type>\r
<type name="Program">\r
</method>\r
</type>\r
<type name="Program+<Main>c__async1">\r
- <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
- <size>13</size>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>2</size>\r
</method>\r
</type>\r
</test>\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Int32 <ReturnOne>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
</method>\r
</type>\r
<type name="AmbiguousGeneric+<NestedVoidTestSuccess>c__async0">\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <>m__0()" attrs="145">\r
- <size>33</size>\r
- </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="AmbiguousGeneric">\r
+ <method name="Int32 <ReturnOne>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="AmbiguousGeneric+<NestedVoidTestSuccess>c__async0">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <>m__0()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-42.cs">\r
<type name="A">\r
</type>\r
<type name="C+<Test>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>60</size>\r
+ <size>90</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</type>\r
<type name="App+<Test>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>51</size>\r
+ <size>76</size>\r
</method>\r
</type>\r
<type name="App+<Test>c__async0">\r
</type>\r
<type name="Program+<LoadPlayers>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>87</size>\r
+ <size>117</size>\r
</method>\r
</type>\r
<type name="Program">\r
<method name="System.Threading.Tasks.Task Throw()" attrs="145">\r
<size>33</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task <Main>m__0()" attrs="145">\r
- <size>33</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="System.Threading.Tasks.Task <Main>m__0()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-53.cs">\r
<type name="Y">\r
</type>\r
<type name="X+<Foo>c__AnonStorey1+<Foo>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>43</size>\r
+ <size>73</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</type>\r
<type name="B+<GetAsync>c__async0">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>49</size>\r
+ <size>74</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</type>\r
<type name="X+<AddItemAt>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>43</size>\r
+ <size>68</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</type>\r
<type name="X+<Foo>c__async6">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>100</size>\r
+ <size>130</size>\r
</method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
<method name="Int32 Main()" attrs="150">\r
<size>152</size>\r
</method>\r
- <method name="Boolean <Call>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Boolean <Call>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-64.cs">\r
<type name="X">\r
<method name="T Invoke[T](System.Func`1[System.Threading.Tasks.Task`1[T]])" attrs="145">\r
<size>18</size>\r
</method>\r
- <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
- <size>33</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="X">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-async-65.cs">\r
<type name="C">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-async-73.cs">\r
+ <type name="X">\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] Foo()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.Int32] Throws()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="145">\r
+ <size>32</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="X+<Foo>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>214</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ <type name="X+<Throws>c__async1">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>63</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-cls-00.cs">\r
<type name="CLSCLass_6">\r
<method name="Void add_Disposed(Delegate)" attrs="2182">\r
<method name="Void Test_Capturing_1(Int32)" attrs="129">\r
<size>28</size>\r
</method>\r
- <method name="Void <Test_1>m__0()" attrs="145">\r
- <size>6</size>\r
- </method>\r
- <method name="Void <Test_2>m__1()" attrs="145">\r
- <size>7</size>\r
- </method>\r
- <method name="Void <Test_3>m__2()" attrs="145">\r
- <size>7</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>14</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <Test_1>m__0()" attrs="145">\r
+ <size>6</size>\r
+ </method>\r
+ <method name="Void <Test_2>m__1()" attrs="145">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Void <Test_3>m__2()" attrs="145">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-debug-15.cs">\r
<type name="Foo">\r
<method name="Void Test_4()" attrs="129">\r
<size>485</size>\r
</method>\r
- <method name="Int32 <Test_4>m__0()" attrs="145">\r
- <size>10</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Int32 <Test_4>m__0()" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-debug-19.cs">\r
<type name="C">\r
<method name="System.Threading.Tasks.Task`1[System.Boolean] Test_3()" attrs="129">\r
<size>33</size>\r
</method>\r
- <method name="Void <RunAsync>m__0()" attrs="145">\r
- <size>2</size>\r
- </method>\r
- <method name="Int32 <RunAsync_2>m__1()" attrs="145">\r
- <size>9</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<method name="Void MoveNext()" attrs="486">\r
<size>1229</size>\r
</method>\r
- <method name="Int32 <>m__0()" attrs="145">\r
- <size>9</size>\r
- </method>\r
</type>\r
<type name="C+<Test_1>c__async0">\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
+ <type name="C">\r
+ <method name="Void <RunAsync>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ <method name="Int32 <RunAsync_2>m__1()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
+ <type name="C+<Test_3>c__async2">\r
+ <method name="Int32 <>m__0()" attrs="145">\r
+ <size>9</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-debug-20.cs">\r
<type name="S`1[T]">\r
<method name="Void Main()" attrs="150">\r
<size>2</size>\r
</method>\r
- <method name="Program <Test_4>m__0()" attrs="145">\r
- <size>13</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
+ <method name="Program <Test_4>m__0()" attrs="145">\r
+ <size>13</size>\r
+ </method>\r
</type>\r
</test>\r
<test name="test-debug-24.cs">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-ex-filter-06.cs">\r
+ <type name="C">\r
+ <method name="Int32 Test[T]()" attrs="145">\r
+ <size>61</size>\r
+ </method>\r
+ <method name="Int32 Main()" attrs="145">\r
+ <size>49</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-externalias-01.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
<method name="Void Test()" attrs="134">\r
<size>43</size>\r
</method>\r
- <method name="Void <Test>m__0()" attrs="145">\r
- <size>7</size>\r
- </method>\r
<method name="Void .ctor()" attrs="6278">\r
<size>7</size>\r
</method>\r
<size>0</size>\r
</method>\r
</type>\r
+ <type name="Mono.Sms.Main">\r
+ <method name="Void <Test>m__0()" attrs="145">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
</test>\r
<test name="test-partial-22.cs">\r
<type name="C">\r
</method>\r
</type>\r
</test>\r
+ <test name="test-static-using-01.cs">\r
+ <type name="A.B.X">\r
+ <method name="Int32 Test()" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="C.M">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>28</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-static-using-02.cs">\r
+ <type name="A.B.X">\r
+ <method name="Int32 Test(System.Object)" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="A.C.X">\r
+ <method name="Int32 Test(Int32)" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="C.M">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>29</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-static-using-03.cs">\r
+ <type name="A.B.X">\r
+ <method name="Int32 Test(Int32)" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="A.C.X">\r
+ <method name="Int32 Test(Int32)" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="C.M">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>29</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-static-using-04.cs">\r
+ <type name="A.B.X">\r
+ <method name="Int32 Test(System.Object)" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="A.C.X">\r
+ <method name="Int32 Test(Int32)" attrs="145">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="C.M">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>34</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-static-using-05.cs">\r
+ <type name="Test">\r
+ <method name="Void Main()" attrs="145">\r
+ <size>56</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__0(Int32)" attrs="145">\r
+ <size>14</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
+ <test name="test-static-using-06.cs">\r
+ <type name="A.B.X">\r
+ <method name="Int32 Test(System.Object)" attrs="150">\r
+ <size>10</size>\r
+ </method>\r
+ </type>\r
+ <type name="A.C.X">\r
+ <method name="Int32 Test[T](T)" attrs="150">\r
+ <size>47</size>\r
+ </method>\r
+ </type>\r
+ <type name="C.M">\r
+ <method name="Int32 Main()" attrs="150">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-var-01.cs">\r
<type name="Test">\r
<method name="Int32 Main()" attrs="150">\r
--- /dev/null
+/Test/en.*/
+/Test/html.*/
+/Test/DocTest.*
+/.v2.txt
+/.v0.txt
run-test-local: run-mono-shlib-cop-test
run-mono-shlib-cop-test: $(the_lib) $(TEST_INPUT)
- $(RUNTIME) $(the_lib) $(TEST_INPUT) | diff - test.dll.out
+ MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(the_lib) $(TEST_INPUT) | diff - test.dll.out
$(TEST_INPUT) : test.cs
$(CSCOMPILE) -target:library $< -out:$@
private static extern int g_module_close (IntPtr handle);
// Warning
- [DllImport ("libglib-2.0.so")]
- private static extern void g_free (IntPtr mem);
+ [DllImport ("libMonoPosixHelper.so")]
+ private static extern int Mono_Posix_Stdlib_TMP_MAX ();
// Error: no such library
[DllImport ("does-not-exist")]
Test ()
{
g_module_close (IntPtr.Zero);
- g_free (IntPtr.Zero);
+ Mono_Posix_Stdlib_TMP_MAX ();
Foo ();
RenameMe ();
DoesNotExist ();
<configuration>
+ <dllmap dll="libMonoPosixHelper.so" target="../../../support/.libs/libMonoPosixHelper.so" />
<dllmap dll="libgmodule-2.0.so" target="libgmodule-2.0.so.0"/>
<dllmap dll="renamed-lib" target="libc.so.6"/>
</configuration>
error: in Mono.Unmanaged.Check.Test.Foo: Could not load library `does-not-exist': ./libdoes-not-exist.so: cannot open shared object file: No such file or directory
error: in Mono.Unmanaged.Check.Test.RenameMe: library `libc.so.6' is missing symbol `RenameMe'
error: in Mono.Unmanaged.Check.Test.DoesNotExist: library `libc.so.6' is missing symbol `DoesNotExist'
-warning: in Mono.Unmanaged.Check.Test.g_free: Library `libglib-2.0.so' might be a development library
+warning: in Mono.Unmanaged.Check.Test.Mono_Posix_Stdlib_TMP_MAX: Library `../../../support/.libs/libMonoPosixHelper.so' might be a development library
reflection-internals.h \
file-mmap-posix.c \
file-mmap-windows.c \
- file-mmap.h
+ file-mmap.h \
+ object-offsets.h \
+ abi-details.h \
+ metadata-cross-helpers.c
# These source files have compile time dependencies on GC code
--- /dev/null
+/*
+ * Copyright 2014 Xamarin Inc
+ */
+#ifndef __MONO_METADATA_ABI_DETAILS_H__
+#define __MONO_METADATA_ABI_DETAILS_H__
+
+#include <config.h>
+#include <glib.h>
+
+#define MONO_ABI_ALIGNOF(type) MONO_ALIGN_ ## type
+#define MONO_CURRENT_ABI_ALIGNOF(type) ((int)G_STRUCT_OFFSET(struct { char c; type x; }, x))
+
+
+#undef DECL_OFFSET
+#undef DECL_OFFSET2
+#define DECL_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field = -1,
+#define DECL_OFFSET2(struct,field,offset) MONO_OFFSET_ ## struct ## _ ## field = offset,
+#define DECL_ALIGN(type) MONO_ALIGN_ ##type = MONO_CURRENT_ABI_ALIGNOF (type),
+#define DECL_ALIGN2(type,size) MONO_ALIGN_ ##type = size,
+
+enum {
+#include "object-offsets.h"
+};
+
+#ifdef USED_CROSS_COMPILER_OFFSETS
+#define MONO_STRUCT_OFFSET(struct,field) MONO_OFFSET_ ## struct ## _ ## field
+#else
+#define MONO_STRUCT_OFFSET(struct,field) (MONO_OFFSET_ ## struct ## _ ## field == -1, G_STRUCT_OFFSET (struct,field))
+#endif
+
+#endif
return mono_domain_from_appdomain (ad);
}
+/**
+ * mono_domain_set_config:
+ * @domain: MonoDomain initialized with the appdomain we want to change
+ * @base_dir: new base directory for the appdomain
+ * @config_file_name: path to the new configuration for the app domain
+ *
+ * Used to set the system configuration for an appdomain
+ *
+ * Without using this, embedded builds will get 'System.Configuration.ConfigurationErrorsException:
+ * Error Initializing the configuration system. ---> System.ArgumentException:
+ * The 'ExeConfigFilename' argument cannot be null.' for some managed calls.
+ */
+void
+mono_domain_set_config (MonoDomain *domain, const char *base_dir, const char *config_file_name)
+{
+ MONO_OBJECT_SETREF (domain->setup, application_base, mono_string_new (domain, base_dir));
+ MONO_OBJECT_SETREF (domain->setup, configuration_file, mono_string_new (domain, config_file_name));
+}
+
static MonoAppDomainSetup*
copy_app_domain_setup (MonoDomain *domain, MonoAppDomainSetup *setup)
{
MONO_API MonoDomain *
mono_domain_create_appdomain (char *friendly_name, char *configuration_file);
+MONO_API void
+mono_domain_set_config (MonoDomain *domain, const char *base_dir, const char *config_file_name);
+
MONO_API MonoDomain *
mono_domain_get (void);
}
void *
-mono_gc_scan_object (void *obj)
+mono_gc_scan_object (void *obj, void *gc_data)
{
g_assert_not_reached ();
return NULL;
#include "object.h"
#include "loader.h"
#include "cil-coff.h"
+#include "metadata/abi-details.h"
#include "metadata/cominterop.h"
#include "metadata/marshal.h"
#include "metadata/method-builder.h"
// load src
mono_mb_emit_ldloc (mb, 0);
mono_mb_emit_byte (mb, CEE_LDIND_REF);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
/* load the RCW from the ComInteropProxy*/
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoComInteropProxy, com_object));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoComInteropProxy, com_object));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
if (conv == MONO_MARSHAL_CONV_OBJECT_INTERFACE) {
/* get real proxy object, which is a ComInteropProxy in this case*/
temp_obj = mono_mb_add_local (mb, &mono_defaults.object_class->byval_arg);
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
/* load the RCW from the ComInteropProxy*/
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoComInteropProxy, com_object));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoComInteropProxy, com_object));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
/* load args and make the call on the RCW */
cache_proxy = mono_class_get_method_from_name (com_interop_proxy_class, "CacheProxy", 0);
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
mono_mb_emit_managed_call (mb, cache_proxy, NULL);
}
} d;
struct _MonoJitInfo *next_jit_code_hash;
gpointer code_start;
- /* This might contain an id for the unwind info instead of a register mask */
- guint32 used_regs;
+ guint32 unwind_info;
int code_size;
guint32 num_clauses:15;
/* Whenever the code is domain neutral or 'shared' */
{
MonoJitInfo *ji;
- mono_appdomains_lock ();
+ g_assert (mono_root_domain);
+ mono_domain_lock (mono_root_domain);
/*
* We reuse MonoJitInfoTable to store AOT module info,
* this gives us async-safe lookup.
*/
- g_assert (mono_root_domain);
if (!mono_root_domain->aot_modules) {
mono_root_domain->num_jit_info_tables ++;
mono_root_domain->aot_modules = jit_info_table_new (mono_root_domain);
ji->code_size = (guint8*)end - (guint8*)start;
jit_info_table_add (mono_root_domain, &mono_root_domain->aot_modules, ji);
- mono_appdomains_unlock ();
+ mono_domain_unlock (mono_root_domain);
}
void
MMAP_FILE_ACCESS_READ_WRITE_EXECUTE = 5,
};
-#ifndef DEFFILEMODE
-#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |Â S_IROTH |Â S_IWOTH)
+#ifdef PLATFORM_ANDROID
+#define DEFAULT_FILEMODE 0666
+#else
+#define DEFAULT_FILEMODE DEFFILEMODE
#endif
static int mmap_init_state;
}
if (path) //FIXME use io portability?
- fd = open (c_path, file_mode_to_unix (mode) | access_mode_to_unix (access), DEFFILEMODE);
+ fd = open (c_path, file_mode_to_unix (mode) | access_mode_to_unix (access), DEFAULT_FILEMODE);
else
fd = dup (input_fd);
return (void*)handle;
}
-#define MONO_ANON_FILE_TEMPLATE "/tmp/mono.anonmap.XXXXXXXXX"
+#define MONO_ANON_FILE_TEMPLATE "/mono.anonmap.XXXXXXXXX"
static void*
open_memory_map (MonoString *mapName, int mode, gint64 *capacity, int access, int options, int *error)
{
//XXX should we ftruncate if the file is smaller than capacity?
} else {
int fd;
- char file_name [sizeof (MONO_ANON_FILE_TEMPLATE) + 1];
- int unused G_GNUC_UNUSED;
+ char *file_name;
+ const char *tmp_dir;
+ int unused G_GNUC_UNUSED, alloc_size;
if (mode == FILE_MODE_OPEN) {
*error = FILE_NOT_FOUND;
}
*capacity = align_up_to_page_size (*capacity);
- strcpy (file_name, MONO_ANON_FILE_TEMPLATE);
+ tmp_dir = g_get_tmp_dir ();
+ alloc_size = strlen (tmp_dir) + strlen (MONO_ANON_FILE_TEMPLATE) + 1;
+ if (alloc_size > 1024) {//rather fail that stack overflow
+ *error = COULD_NOT_MAP_MEMORY;
+ goto done;
+ }
+ file_name = alloca (alloc_size);
+ strcpy (file_name, tmp_dir);
+ strcat (file_name, MONO_ANON_FILE_TEMPLATE);
+
fd = mkstemp (file_name);
if (fd == -1) {
*error = COULD_NOT_MAP_MEMORY;
* foreach (ref in GC references in the are structure pointed to by ADDR)
* mark_func (ref)
*/
-typedef void (*MonoGCMarkFunc) (void **addr);
-typedef void (*MonoGCRootMarkFunc) (void *addr, MonoGCMarkFunc mark_func);
+typedef void (*MonoGCMarkFunc) (void **addr, void *gc_data);
+typedef void (*MonoGCRootMarkFunc) (void *addr, MonoGCMarkFunc mark_func, void *gc_data);
/* Create a descriptor with a user defined marking function */
MONO_API void *mono_gc_make_root_descr_user (MonoGCRootMarkFunc marker);
* - in the second pass, it should mark the remaining areas of the stack
* using precise marking by calling mono_gc_scan_object ().
*/
- void (*thread_mark_func) (gpointer user_data, guint8 *stack_start, guint8 *stack_end, gboolean precise);
+ void (*thread_mark_func) (gpointer user_data, guint8 *stack_start, guint8 *stack_end, gboolean precise, void *gc_data);
} MonoGCCallbacks;
/* Set the callback functions callable by the GC */
void mono_gc_conservatively_scan_area (void *start, void *end) MONO_INTERNAL;
/* Scan OBJ, returning its new address */
-void *mono_gc_scan_object (void *obj) MONO_INTERNAL;
+void *mono_gc_scan_object (void *obj, void *gc_data) MONO_INTERNAL;
/* Return the bitmap encoded by a descriptor */
gsize* mono_gc_get_bitmap_for_descr (void *descr, int *numbits) MONO_INTERNAL;
static guint32
finalizer_thread (gpointer unused)
{
+ gboolean wait = TRUE;
+
while (!finished) {
/* Wait to be notified that there's at least one
* finaliser to run
g_assert (mono_domain_get () == mono_get_root_domain ());
+ if (wait) {
/* An alertable wait is required so this thread can be suspended on windows */
#ifdef MONO_HAS_SEMAPHORES
- MONO_SEM_WAIT_ALERTABLE (&finalizer_sem, TRUE);
+ MONO_SEM_WAIT_ALERTABLE (&finalizer_sem, TRUE);
#else
- WaitForSingleObjectEx (finalizer_event, INFINITE, TRUE);
+ WaitForSingleObjectEx (finalizer_event, INFINITE, TRUE);
#endif
+ }
+ wait = TRUE;
mono_threads_perform_thread_dump ();
reference_queue_proccess_all ();
- SetEvent (pending_done_event);
+#ifdef MONO_HAS_SEMAPHORES
+ /* Avoid posting the pending done event until there are pending finalizers */
+ if (MONO_SEM_TIMEDWAIT (&finalizer_sem, 0) == 0)
+ /* Don't wait again at the start of the loop */
+ wait = FALSE;
+ else
+ SetEvent (pending_done_event);
+#else
+ SetEvent (pending_done_event);
+#endif
}
SetEvent (shutdown_event);
#include "metadata/tabledefs.h"
#include "metadata/exception.h"
#include "metadata/appdomain.h"
+#include "mono/metadata/abi-details.h"
#include "mono/metadata/debug-helpers.h"
#include "mono/metadata/threadpool.h"
#include "mono/metadata/threads.h"
mono_mb_emit_proxy_check (MonoMethodBuilder *mb, int branch_code)
{
int pos;
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoVTable, klass));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX);
mono_mb_emit_xdomain_check (MonoMethodBuilder *mb, int branch_code)
{
int pos;
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoRealProxy, target_domain_id));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoRealProxy, target_domain_id));
mono_mb_emit_byte (mb, CEE_LDIND_I4);
mono_mb_emit_icon (mb, -1);
pos = mono_mb_emit_branch (mb, branch_code);
if (offset < 0)
mono_marshal_find_bitfield_offset (MonoClass, contextbound, &offset, &mask);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, remote_class));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, remote_class));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoRemoteClass, proxy_class));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoRemoteClass, proxy_class));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
mono_mb_emit_ldflda (mb, offset);
mono_mb_emit_byte (mb, CEE_LDIND_U1);
/* copy the elements */
mono_mb_emit_ldloc (mb, 1);
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoArray, vector));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoArray, vector));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_ldloc (mb, 0);
mono_mb_emit_icon (mb, mspec->data.array_data.num_elem * esize);
mono_mb_emit_ldloc (mb, 1);
mono_mb_emit_ldloc (mb, 0);
mono_mb_emit_byte (mb, CEE_LDIND_REF);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoArray, vector));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoArray, vector));
mono_mb_emit_icon (mb, mspec->data.array_data.num_elem * esize);
mono_mb_emit_byte (mb, CEE_PREFIX1);
mono_mb_emit_byte (mb, CEE_CPBLK);
mono_mb_emit_ldloc (mb, 1);
mono_mb_emit_ldloc (mb, 0);
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoSafeHandle, handle));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoSafeHandle, handle));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_byte (mb, CEE_STIND_I);
break;
case MONO_MARSHAL_CONV_HANDLEREF: {
mono_mb_emit_ldloc (mb, 1);
mono_mb_emit_ldloc (mb, 0);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoHandleRef, handle));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoHandleRef, handle));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_byte (mb, CEE_STIND_I);
/* Get the target domain id */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
mono_mb_emit_byte (mb, CEE_DUP);
mono_mb_emit_stloc (mb, loc_real_proxy);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoRealProxy, target_domain_id));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoRealProxy, target_domain_id));
mono_mb_emit_byte (mb, CEE_LDIND_I4);
mono_mb_emit_stloc (mb, loc_domainid);
/* get this->prev */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoMulticastDelegate, prev));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoMulticastDelegate, prev));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
mono_mb_emit_stloc (mb, local_prev);
mono_mb_emit_ldloc (mb, local_prev);
/* get this->target */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoDelegate, target));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoDelegate, target));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
mono_mb_emit_stloc (mb, local_target);
for (i = 0; i < sig->param_count; ++i)
mono_mb_emit_ldarg (mb, i + 1);
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
mono_mb_emit_byte (mb, CEE_LDIND_I );
mono_mb_emit_op (mb, CEE_CALLI, sig);
for (i = 0; i < sig->param_count; ++i)
mono_mb_emit_ldarg (mb, i + 1);
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
mono_mb_emit_byte (mb, CEE_LDIND_I );
mono_mb_emit_op (mb, CEE_CALLI, invoke_sig);
}
/* if this->rp->context == mono_context_get goto pos3 */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoRealProxy, context));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoRealProxy, context));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
mono_mb_emit_icall (mb, mono_context_get);
pos3 = mono_mb_emit_branch (mb, CEE_BEQ);
/* return the address of the field from this->rp->unwrapped_server */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoRealProxy, unwrapped_server));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoRealProxy, unwrapped_server));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX);
mono_mb_emit_byte (mb, CEE_MONO_OBJADDR);
/* Pull the handle field from SafeHandle */
mono_mb_emit_ldarg (mb, argnum);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoSafeHandle, handle));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoSafeHandle, handle));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, conv_arg);
/* refval.handle = returned_handle */
mono_mb_emit_ldarg (mb, argnum);
mono_mb_emit_byte (mb, CEE_LDIND_REF);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoSafeHandle, handle));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoSafeHandle, handle));
mono_mb_emit_ldloc (mb, conv_arg);
mono_mb_emit_byte (mb, CEE_STIND_I);
} else {
/* Set the return.handle to the value, am using ldflda, not sure if thats a good idea */
mono_mb_emit_ldloc (mb, 3);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoSafeHandle, handle));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoSafeHandle, handle));
mono_mb_emit_ldloc (mb, intptr_handle_slot);
mono_mb_emit_byte (mb, CEE_STIND_I);
break;
break;
}
mono_mb_emit_ldarg_addr (mb, argnum);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoHandleRef, handle));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoHandleRef, handle));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, conv_arg);
if (eklass->blittable) {
mono_mb_emit_ldloc (mb, conv_arg);
mono_mb_emit_byte (mb, CEE_CONV_I);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoArray, vector));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoArray, vector));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_ldarg (mb, argnum);
mono_mb_emit_ldloc (mb, conv_arg);
/* src */
mono_mb_emit_ldloc (mb, conv_arg);
mono_mb_emit_byte (mb, CEE_CONV_I);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoArray, vector));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoArray, vector));
mono_mb_emit_byte (mb, CEE_ADD);
/* length */
mono_mb_emit_ldloc (mb, conv_arg);
/*obj_vtable = obj->vtable;*/
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, 0);
/*obj_vtable = obj->vtable;*/
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, 0);
#ifndef DISABLE_JIT
/* get the real proxy from the transparent proxy*/
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoTransparentProxy, rp));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoTransparentProxy, rp));
mono_mb_emit_byte (mb, CEE_LDIND_REF);
/* get the reflection type from the type handle */
load_array_class (MonoMethodBuilder *mb, int aklass)
{
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoVTable, klass));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, element_class));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, element_class));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, aklass);
}
load_value_class (MonoMethodBuilder *mb, int vklass)
{
mono_mb_emit_ldarg (mb, 2);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoVTable, klass));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, vklass);
}
/* if (vklass->idepth < aklass->idepth) goto failue */
mono_mb_emit_ldloc (mb, vklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, idepth));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, idepth));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
mono_mb_emit_ldloc (mb, aklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, idepth));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, idepth));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
b2 = mono_mb_emit_branch (mb, CEE_BLT_UN);
/* if (vklass->supertypes [aklass->idepth - 1] != aklass) goto failure */
mono_mb_emit_ldloc (mb, vklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, supertypes));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, supertypes));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_ldloc (mb, aklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, idepth));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, idepth));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
mono_mb_emit_icon (mb, 1);
mono_mb_emit_byte (mb, CEE_SUB);
/* vt = value->vtable */
mono_mb_emit_ldarg (mb, 2);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, vtable);
/* uiid = klass->interface_id; */
mono_mb_emit_ldloc (mb, aklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, interface_id));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, interface_id));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
mono_mb_emit_stloc (mb, uiid);
/*if (uiid > vt->max_interface_id)*/
mono_mb_emit_ldloc (mb, uiid);
mono_mb_emit_ldloc (mb, vtable);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoVTable, max_interface_id));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoVTable, max_interface_id));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
b2 = mono_mb_emit_branch (mb, CEE_BGT_UN);
/*vt->interface_bitmap*/
mono_mb_emit_ldloc (mb, vtable);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoVTable, interface_bitmap));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoVTable, interface_bitmap));
mono_mb_emit_byte (mb, CEE_LDIND_I);
/*uiid >> 3*/
/* aklass = array->vtable->klass->element_class */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoVTable, klass));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, element_class));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, element_class));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, aklass);
/* vklass = value->vtable->klass */
mono_mb_emit_ldarg (mb, 2);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoObject, vtable));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoObject, vtable));
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoVTable, klass));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, vklass);
/* if (vklass->idepth < aklass->idepth) goto failue */
mono_mb_emit_ldloc (mb, vklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, idepth));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, idepth));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
mono_mb_emit_ldloc (mb, aklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, idepth));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, idepth));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
b2 = mono_mb_emit_branch (mb, CEE_BLT_UN);
/* if (vklass->supertypes [aklass->idepth - 1] != aklass) goto failure */
mono_mb_emit_ldloc (mb, vklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, supertypes));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, supertypes));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_ldloc (mb, aklass);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoClass, idepth));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoClass, idepth));
mono_mb_emit_byte (mb, CEE_LDIND_U2);
mono_mb_emit_icon (mb, 1);
mono_mb_emit_byte (mb, CEE_SUB);
/* bounds = array->bounds; */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoArray, bounds));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoArray, bounds));
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, bounds);
/* ind = idx0 - bounds [0].lower_bound */
mono_mb_emit_ldarg (mb, 1);
mono_mb_emit_ldloc (mb, bounds);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
mono_mb_emit_byte (mb, CEE_SUB);
/* if (ind >= bounds [0].length) goto exeception; */
mono_mb_emit_ldloc (mb, ind);
mono_mb_emit_ldloc (mb, bounds);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoArrayBounds, length));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoArrayBounds, length));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
/* note that we use unsigned comparison */
/* realidx = idxi - bounds [i].lower_bound */
mono_mb_emit_ldarg (mb, 1 + i);
mono_mb_emit_ldloc (mb, bounds);
- mono_mb_emit_icon (mb, (i * sizeof (MonoArrayBounds)) + G_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
+ mono_mb_emit_icon (mb, (i * sizeof (MonoArrayBounds)) + MONO_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
mono_mb_emit_byte (mb, CEE_SUB);
/* if (realidx >= bounds [i].length) goto exeception; */
mono_mb_emit_ldloc (mb, realidx);
mono_mb_emit_ldloc (mb, bounds);
- mono_mb_emit_icon (mb, (i * sizeof (MonoArrayBounds)) + G_STRUCT_OFFSET (MonoArrayBounds, length));
+ mono_mb_emit_icon (mb, (i * sizeof (MonoArrayBounds)) + MONO_STRUCT_OFFSET (MonoArrayBounds, length));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
branch_positions [i] = mono_mb_emit_branch (mb, CEE_BGE_UN);
/* ind = ind * bounds [i].length + realidx */
mono_mb_emit_ldloc (mb, ind);
mono_mb_emit_ldloc (mb, bounds);
- mono_mb_emit_icon (mb, (i * sizeof (MonoArrayBounds)) + G_STRUCT_OFFSET (MonoArrayBounds, length));
+ mono_mb_emit_icon (mb, (i * sizeof (MonoArrayBounds)) + MONO_STRUCT_OFFSET (MonoArrayBounds, length));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
mono_mb_emit_byte (mb, CEE_MUL);
/* return array->vector + ind * element_size */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoArray, vector));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoArray, vector));
mono_mb_emit_ldloc (mb, ind);
mono_mb_emit_icon (mb, elem_size);
mono_mb_emit_byte (mb, CEE_MUL);
return klass->marshal_info->native_size;
}
-/* __alignof__ returns the preferred alignment of values not the actual alignment used by
- the compiler so is wrong e.g. for Linux where doubles are aligned on a 4 byte boundary
- but __alignof__ returns 8 - using G_STRUCT_OFFSET works better */
-#define ALIGNMENT(type) G_STRUCT_OFFSET(struct { char c; type x; }, x)
-
/*
* mono_type_native_stack_size:
* @t: the type to return the size it uses on the stack
*align = 4;
return 4;
case MONO_TYPE_R8:
- *align = ALIGNMENT (gdouble);
+ *align = MONO_ABI_ALIGNOF (double);
return 8;
case MONO_TYPE_I8:
case MONO_TYPE_U8:
- *align = ALIGNMENT (glong);
+ *align = MONO_ABI_ALIGNOF (gint64);
return 8;
case MONO_TYPE_GENERICINST:
if (!mono_type_generic_inst_is_valuetype (t)) {
return 4;
case MONO_NATIVE_I8:
case MONO_NATIVE_U8:
- *align = ALIGNMENT(guint64);
+ *align = MONO_ABI_ALIGNOF (gint64);
return 8;
case MONO_NATIVE_R4:
*align = 4;
return 4;
case MONO_NATIVE_R8:
- *align = ALIGNMENT(double);
+ *align = MONO_ABI_ALIGNOF (double);
return 8;
case MONO_NATIVE_INT:
case MONO_NATIVE_UINT:
case MONO_NATIVE_ASANY:
case MONO_NATIVE_FUNC:
case MONO_NATIVE_LPSTRUCT:
- *align = ALIGNMENT(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
case MONO_NATIVE_STRUCT:
klass = mono_class_from_mono_type (type);
--- /dev/null
+#include "config.h"
+
+#ifdef ENABLE_EXTENSION_MODULE
+#include "../../../mono-extensions/mono/metadata/metadata-cross-helpers.c"
+#endif
+
#include "class.h"
#include "marshal.h"
#include "debug-helpers.h"
+#include "abi-details.h"
#include <mono/utils/mono-error-internals.h>
#include <mono/utils/bsearch.h>
}
#endif
-#define abi__alignof__(type) G_STRUCT_OFFSET(struct { char c; type x; }, x)
-
static int i8_align;
/*
return 0;
}
if (t->byref) {
- *align = abi__alignof__(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
}
*align = 1;
return 0;
case MONO_TYPE_BOOLEAN:
- *align = abi__alignof__(gint8);
+ *align = MONO_ABI_ALIGNOF (gint8);
return 1;
case MONO_TYPE_I1:
case MONO_TYPE_U1:
- *align = abi__alignof__(gint8);
+ *align = MONO_ABI_ALIGNOF (gint8);
return 1;
case MONO_TYPE_CHAR:
case MONO_TYPE_I2:
case MONO_TYPE_U2:
- *align = abi__alignof__(gint16);
+ *align = MONO_ABI_ALIGNOF (gint16);
return 2;
case MONO_TYPE_I4:
case MONO_TYPE_U4:
- *align = abi__alignof__(gint32);
+ *align = MONO_ABI_ALIGNOF (gint32);
return 4;
case MONO_TYPE_R4:
- *align = abi__alignof__(float);
+ *align = MONO_ABI_ALIGNOF (float);
return 4;
case MONO_TYPE_I8:
case MONO_TYPE_U8:
- if (i8_align)
- *align = i8_align;
- else
- *align = abi__alignof__(gint64);
+ *align = MONO_ABI_ALIGNOF (gint64);
return 8;
case MONO_TYPE_R8:
- *align = abi__alignof__(double);
+ *align = MONO_ABI_ALIGNOF (double);
return 8;
case MONO_TYPE_I:
case MONO_TYPE_U:
- *align = abi__alignof__(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
case MONO_TYPE_STRING:
- *align = abi__alignof__(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
case MONO_TYPE_OBJECT:
- *align = abi__alignof__(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
case MONO_TYPE_VALUETYPE: {
if (t->data.klass->enumtype)
case MONO_TYPE_PTR:
case MONO_TYPE_FNPTR:
case MONO_TYPE_ARRAY:
- *align = abi__alignof__(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
case MONO_TYPE_TYPEDBYREF:
return mono_class_value_size (mono_defaults.typed_reference_class, (guint32*)align);
else
return mono_class_value_size (mono_class_from_mono_type (t), (guint32*)align);
} else {
- *align = abi__alignof__(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
}
}
case MONO_TYPE_VAR:
case MONO_TYPE_MVAR:
/* FIXME: Martin, this is wrong. */
- *align = abi__alignof__(gpointer);
+ *align = MONO_ABI_ALIGNOF (gpointer);
return sizeof (gpointer);
default:
g_error ("mono_type_size: type 0x%02x unknown", t->type);
int tmp;
#if SIZEOF_VOID_P == SIZEOF_REGISTER
int stack_slot_size = sizeof (gpointer);
- int stack_slot_align = abi__alignof__ (gpointer);
+ int stack_slot_align = MONO_ABI_ALIGNOF (gpointer);
#elif SIZEOF_VOID_P < SIZEOF_REGISTER
int stack_slot_size = SIZEOF_REGISTER;
int stack_slot_align = SIZEOF_REGISTER;
*align = stack_slot_align;
return stack_slot_size * 3;
case MONO_TYPE_R4:
- *align = abi__alignof__(float);
+ *align = MONO_ABI_ALIGNOF (float);
return sizeof (float);
case MONO_TYPE_I8:
case MONO_TYPE_U8:
- if (i8_align)
- *align = i8_align;
- else
- *align = abi__alignof__(gint64);
+ *align = MONO_ABI_ALIGNOF (gint64);
return sizeof (gint64);
case MONO_TYPE_R8:
- *align = abi__alignof__(double);
+ *align = MONO_ABI_ALIGNOF (double);
return sizeof (double);
case MONO_TYPE_VALUETYPE: {
guint32 size;
#include "config.h"
#include "loader.h"
+#include "mono/metadata/abi-details.h"
#include "mono/metadata/method-builder.h"
#include "mono/metadata/tabledefs.h"
#include "mono/metadata/exception.h"
mono_mb_emit_op (mb, CEE_NEWOBJ, ctor);
if (msg != NULL) {
mono_mb_emit_byte (mb, CEE_DUP);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoException, message));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoException, message));
mono_mb_emit_ldstr (mb, (char*)msg);
mono_mb_emit_byte (mb, CEE_STIND_REF);
}
#include <glib.h>
#include <string.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/monitor.h>
#include <mono/metadata/threads-types.h>
#include <mono/metadata/exception.h>
* an object.
*/
-struct _MonoThreadsSync
-{
- gsize owner; /* thread ID */
- guint32 nest;
-#ifdef HAVE_MOVING_COLLECTOR
- gint32 hash_code;
-#endif
- volatile gint32 entry_count;
- HANDLE entry_sem;
- GSList *wait_list;
- void *data;
-};
typedef struct _MonitorArray MonitorArray;
/*
ldarg 0 obj
conv.i objp
- ldc.i4 G_STRUCT_OFFSET(MonoObject, synchronisation) objp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoObject, synchronisation) objp off
add &syncp
ldind.i syncp
stloc syncp
mono_mb_emit_byte (mb, CEE_LDARG_0);
mono_mb_emit_byte (mb, CEE_CONV_I);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoObject, synchronisation));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoObject, synchronisation));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, syncp_loc);
static MonoMethod *compare_exchange_method;
int obj_null_branch, true_locktaken_branch = 0, syncp_null_branch, has_owner_branch, other_owner_branch, tid_branch, thin_hash_branch;
int tid_loc, syncp_loc, owner_loc;
- int thread_tls_offset;
gboolean is_v4 = mono_method_signature (monitor_enter_method)->param_count == 2;
int fast_path_idx = is_v4 ? FASTPATH_ENTERV4 : FASTPATH_ENTER;
WrapperInfo *info;
/* The !is_v4 version is not used/tested */
g_assert (is_v4);
- thread_tls_offset = mono_thread_get_tls_offset ();
- if (thread_tls_offset == -1)
- return NULL;
-
if (monitor_il_fastpaths [fast_path_idx])
return monitor_il_fastpaths [fast_path_idx];
+ if (!mono_get_runtime_callbacks ()->tls_key_supported (TLS_KEY_THREAD))
+ return NULL;
+
if (!compare_exchange_method) {
MonoMethodDesc *desc;
MonoClass *class;
/*
mono. tls thread_tls_offset threadp
- ldc.i4 G_STRUCT_OFFSET(MonoThread, tid) threadp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThread, tid) threadp off
add &tid
ldind.i tid
stloc tid
ldloc syncp syncp
- ldc.i4 G_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
add &owner
ldind.i owner
stloc owner
mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX);
mono_mb_emit_byte (mb, CEE_MONO_TLS);
mono_mb_emit_i4 (mb, TLS_KEY_THREAD);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoInternalThread, tid));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoInternalThread, tid));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, tid_loc);
mono_mb_emit_ldloc (mb, syncp_loc);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoThreadsSync, owner));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoThreadsSync, owner));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_stloc (mb, owner_loc);
/*
ldloc syncp syncp
- ldc.i4 G_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
add &owner
ldloc tid &owner tid
ldc.i4 0 &owner tid 0
*/
mono_mb_emit_ldloc (mb, syncp_loc);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoThreadsSync, owner));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoThreadsSync, owner));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_ldloc (mb, tid_loc);
mono_mb_emit_byte (mb, CEE_LDC_I4_0);
ldloc tid owner tid
brne.s other_owner
ldloc syncp syncp
- ldc.i4 G_STRUCT_OFFSET(MonoThreadsSync, nest) syncp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThreadsSync, nest) syncp off
add &nest
dup &nest &nest
ldind.i4 &nest nest
mono_mb_emit_ldloc (mb, tid_loc);
other_owner_branch = mono_mb_emit_short_branch (mb, CEE_BNE_UN_S);
mono_mb_emit_ldloc (mb, syncp_loc);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoThreadsSync, nest));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoThreadsSync, nest));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_DUP);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
MonoMethodBuilder *mb;
MonoMethod *res;
int obj_null_branch, has_waiting_branch, has_syncp_branch, owned_branch, nested_branch, thin_hash_branch;
- int thread_tls_offset;
int syncp_loc;
WrapperInfo *info;
- thread_tls_offset = mono_thread_get_tls_offset ();
- if (thread_tls_offset == -1)
- return NULL;
-
if (monitor_il_fastpaths [FASTPATH_EXIT])
return monitor_il_fastpaths [FASTPATH_EXIT];
+ if (!mono_get_runtime_callbacks ()->tls_key_supported (TLS_KEY_THREAD))
+ return NULL;
+
mb = mono_mb_new (mono_defaults.monitor_class, "FastMonitorExit", MONO_WRAPPER_UNKNOWN);
mb->method->slot = -1;
/*
has_syncp:
ldloc syncp syncp
- ldc.i4 G_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
add &owner
ldind.i owner
mono. tls thread_tls_offset owner threadp
- ldc.i4 G_STRUCT_OFFSET(MonoThread, tid) owner threadp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThread, tid) owner threadp off
add owner &tid
ldind.i owner tid
beq.s owned
mono_mb_patch_short_branch (mb, has_syncp_branch);
mono_mb_emit_ldloc (mb, syncp_loc);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoThreadsSync, owner));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoThreadsSync, owner));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
mono_mb_emit_byte (mb, MONO_CUSTOM_PREFIX);
mono_mb_emit_byte (mb, CEE_MONO_TLS);
mono_mb_emit_i4 (mb, TLS_KEY_THREAD);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoInternalThread, tid));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoInternalThread, tid));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
owned_branch = mono_mb_emit_short_branch (mb, CEE_BEQ_S);
/*
owned:
ldloc syncp syncp
- ldc.i4 G_STRUCT_OFFSET(MonoThreadsSync, nest) syncp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThreadsSync, nest) syncp off
add &nest
dup &nest &nest
ldind.i4 &nest nest
mono_mb_patch_short_branch (mb, owned_branch);
mono_mb_emit_ldloc (mb, syncp_loc);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoThreadsSync, nest));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoThreadsSync, nest));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_DUP);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
pop &nest
pop
ldloc syncp syncp
- ldc.i4 G_STRUCT_OFFSET(MonoThreadsSync, entry_count) syncp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThreadsSync, entry_count) syncp off
add &count
ldind.i4 count
brtrue.s has_waiting
mono_mb_emit_byte (mb, CEE_POP);
mono_mb_emit_byte (mb, CEE_POP);
mono_mb_emit_ldloc (mb, syncp_loc);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoThreadsSync, entry_count));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoThreadsSync, entry_count));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I4);
has_waiting_branch = mono_mb_emit_short_branch (mb, CEE_BRTRUE_S);
/*
ldloc syncp syncp
- ldc.i4 G_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
+ ldc.i4 MONO_STRUCT_OFFSET(MonoThreadsSync, owner) syncp off
add &owner
ldnull &owner 0
stind.i
*/
mono_mb_emit_ldloc (mb, syncp_loc);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoThreadsSync, owner));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoThreadsSync, owner));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDNULL);
mono_mb_emit_byte (mb, CEE_STIND_I);
#define ENCODE_OFF_SIZE(o,s) (((o) << 8) | ((s) & 0xff))
- *owner_offset = ENCODE_OFF_SIZE (G_STRUCT_OFFSET (MonoThreadsSync, owner), sizeof (ts.owner));
- *nest_offset = ENCODE_OFF_SIZE (G_STRUCT_OFFSET (MonoThreadsSync, nest), sizeof (ts.nest));
- *entry_count_offset = ENCODE_OFF_SIZE (G_STRUCT_OFFSET (MonoThreadsSync, entry_count), sizeof (ts.entry_count));
+ *owner_offset = ENCODE_OFF_SIZE (MONO_STRUCT_OFFSET (MonoThreadsSync, owner), sizeof (ts.owner));
+ *nest_offset = ENCODE_OFF_SIZE (MONO_STRUCT_OFFSET (MonoThreadsSync, nest), sizeof (ts.nest));
+ *entry_count_offset = ENCODE_OFF_SIZE (MONO_STRUCT_OFFSET (MonoThreadsSync, entry_count), sizeof (ts.entry_count));
}
gboolean
#include <glib.h>
#include <mono/metadata/object.h>
+#include <mono/io-layer/io-layer.h>
#include "mono/utils/mono-compiler.h"
G_BEGIN_DECLS
+struct _MonoThreadsSync
+{
+ gsize owner; /* thread ID */
+ guint32 nest;
+#ifdef HAVE_MOVING_COLLECTOR
+ gint32 hash_code;
+#endif
+ volatile gint32 entry_count;
+ HANDLE entry_sem;
+ GSList *wait_list;
+ void *data;
+};
+
+
MONO_API void mono_locks_dump (gboolean include_untaken);
void mono_monitor_init (void) MONO_INTERNAL;
#ifdef HAVE_SGEN_GC
static void *table_hash_descr = NULL;
-static void mono_g_hash_mark (void *addr, MonoGCMarkFunc mark_func);
+static void mono_g_hash_mark (void *addr, MonoGCMarkFunc mark_func, void *gc_data);
static Slot*
new_slot (MonoGHashTable *hash)
/* GC marker function */
static void
-mono_g_hash_mark (void *addr, MonoGCMarkFunc mark_func)
+mono_g_hash_mark (void *addr, MonoGCMarkFunc mark_func, void *gc_data)
{
MonoGHashTable *table = (MonoGHashTable*)addr;
Slot *node;
for (i = 0; i < table->table_size; i++) {
for (node = table->table [i]; node; node = node->next) {
if (node->key)
- mark_func (&node->key);
+ mark_func (&node->key, gc_data);
}
}
} else if (table->gc_type == MONO_HASH_VALUE_GC) {
for (i = 0; i < table->table_size; i++) {
for (node = table->table [i]; node; node = node->next) {
if (node->value)
- mark_func (&node->value);
+ mark_func (&node->value, gc_data);
}
}
} else if (table->gc_type == MONO_HASH_KEY_VALUE_GC) {
for (i = 0; i < table->table_size; i++) {
for (node = table->table [i]; node; node = node->next) {
if (node->key)
- mark_func (&node->key);
+ mark_func (&node->key, gc_data);
if (node->value)
- mark_func (&node->value);
+ mark_func (&node->value, gc_data);
}
}
}
}
void *
-mono_gc_scan_object (void *obj)
+mono_gc_scan_object (void *obj, void *gc_data)
{
g_assert_not_reached ();
return NULL;
void (*set_cast_details) (MonoClass *from, MonoClass *to);
void (*debug_log) (int level, MonoString *category, MonoString *message);
gboolean (*debug_log_is_enabled) (void);
+ gboolean (*tls_key_supported) (MonoTlsKey key);
} MonoRuntimeCallbacks;
typedef gboolean (*MonoInternalStackWalk) (MonoStackFrameInfo *frame, MonoContext *ctx, gpointer data);
--- /dev/null
+/*
+This is a parameterized header. It's supposed/ok to be included multiple times.
+
+Input defines: (those to be defined by the includer file)
+
+Required:
+DECL_OFFSET(struct,field)
+DECL_OFFSET2(struct,field,offset)
+DECL_ALIGN(name,type)
+DECL_ALIGN2(name,alignment)
+
+Optional:
+USE_CROSS_COMPILE_OFFSETS - if defined, force the cross compiler offsets to be used, otherwise
+ they will only be used if MONO_CROSS_COMPILE is defined
+
+Output defines:
+
+HAS_CROSS_COMPILER_OFFSETS - if set, it means we found some cross offsets, it doesnt mean we'll use it.
+USED_CROSS_COMPILER_OFFSETS - if set, it means we used the cross offsets
+*/
+
+
+#undef HAS_CROSS_COMPILER_OFFSETS
+#undef USED_CROSS_COMPILER_OFFSETS
+
+#ifdef ENABLE_EXTENSION_MODULE
+#include "../../../mono-extensions/mono/metadata/object-offsets.h"
+#endif
+
+
+#ifndef USED_CROSS_COMPILER_OFFSETS
+
+DECL_ALIGN(gint8)
+DECL_ALIGN(gint16)
+DECL_ALIGN(gint32)
+DECL_ALIGN(gint64)
+DECL_ALIGN(float)
+DECL_ALIGN(double)
+DECL_ALIGN(gpointer)
+
+#ifndef DISABLE_METADATA_OFFSETS
+//object offsets
+DECL_OFFSET(MonoObject, vtable)
+DECL_OFFSET(MonoObject, synchronisation)
+
+DECL_OFFSET(MonoClass, interface_bitmap)
+DECL_OFFSET(MonoClass, byval_arg)
+DECL_OFFSET(MonoClass, cast_class)
+DECL_OFFSET(MonoClass, element_class)
+DECL_OFFSET(MonoClass, idepth)
+DECL_OFFSET(MonoClass, instance_size)
+DECL_OFFSET(MonoClass, interface_id)
+DECL_OFFSET(MonoClass, max_interface_id)
+DECL_OFFSET(MonoClass, parent)
+DECL_OFFSET(MonoClass, rank)
+DECL_OFFSET(MonoClass, sizes)
+DECL_OFFSET(MonoClass, supertypes)
+
+DECL_OFFSET(MonoVTable, klass)
+DECL_OFFSET(MonoVTable, max_interface_id)
+DECL_OFFSET(MonoVTable, interface_bitmap)
+DECL_OFFSET(MonoVTable, vtable)
+DECL_OFFSET(MonoVTable, rank)
+DECL_OFFSET(MonoVTable, type)
+DECL_OFFSET(MonoVTable, runtime_generic_context)
+
+DECL_OFFSET(MonoDomain, stack_overflow_ex)
+
+DECL_OFFSET(MonoDelegate, target)
+DECL_OFFSET(MonoDelegate, method_ptr)
+DECL_OFFSET(MonoDelegate, invoke_impl)
+DECL_OFFSET(MonoDelegate, method)
+DECL_OFFSET(MonoDelegate, method_code)
+
+DECL_OFFSET(MonoInternalThread, tid)
+DECL_OFFSET(MonoInternalThread, static_data)
+
+DECL_OFFSET(MonoMulticastDelegate, prev)
+
+DECL_OFFSET(MonoTransparentProxy, rp)
+DECL_OFFSET(MonoTransparentProxy, remote_class)
+DECL_OFFSET(MonoTransparentProxy, custom_type_info)
+
+DECL_OFFSET(MonoRealProxy, target_domain_id)
+DECL_OFFSET(MonoRealProxy, context)
+DECL_OFFSET(MonoRealProxy, unwrapped_server)
+
+DECL_OFFSET(MonoRemoteClass, proxy_class)
+
+DECL_OFFSET(MonoArray, vector)
+DECL_OFFSET(MonoArray, max_length)
+DECL_OFFSET(MonoArray, bounds)
+
+DECL_OFFSET(MonoArrayBounds, lower_bound)
+DECL_OFFSET(MonoArrayBounds, length)
+
+DECL_OFFSET(MonoSafeHandle, handle)
+
+DECL_OFFSET(MonoHandleRef, handle)
+
+DECL_OFFSET(MonoComInteropProxy, com_object)
+
+DECL_OFFSET(MonoString, length)
+DECL_OFFSET(MonoString, chars)
+
+DECL_OFFSET(MonoException, message)
+
+DECL_OFFSET(MonoTypedRef, type)
+DECL_OFFSET(MonoTypedRef, klass)
+DECL_OFFSET(MonoTypedRef, value)
+
+//Internal structs
+DECL_OFFSET(MonoThreadsSync, owner)
+DECL_OFFSET(MonoThreadsSync, nest)
+DECL_OFFSET(MonoThreadsSync, entry_count)
+
+#if defined (HAVE_SGEN_GC) && !defined (HAVE_KW_THREAD)
+DECL_OFFSET(SgenThreadInfo, tlab_next_addr)
+DECL_OFFSET(SgenThreadInfo, tlab_temp_end)
+#endif
+
+#endif //DISABLE METADATA OFFSETS
+
+#ifndef DISABLE_JIT_OFFSETS
+DECL_OFFSET(MonoLMF, previous_lmf)
+
+DECL_OFFSET(MonoMethodRuntimeGenericContext, class_vtable)
+
+DECL_OFFSET(MonoJitTlsData, lmf)
+DECL_OFFSET(MonoJitTlsData, class_cast_from)
+DECL_OFFSET(MonoJitTlsData, class_cast_to)
+DECL_OFFSET(MonoJitTlsData, handler_block_return_address)
+DECL_OFFSET(MonoJitTlsData, restore_stack_prot)
+
+DECL_OFFSET(MonoGSharedVtMethodRuntimeInfo, locals_size)
+DECL_OFFSET(MonoGSharedVtMethodRuntimeInfo, entries) //XXX more to fix here
+
+DECL_OFFSET(MonoContinuation, stack_used_size)
+DECL_OFFSET(MonoContinuation, saved_stack)
+DECL_OFFSET(MonoContinuation, return_sp)
+DECL_OFFSET(MonoContinuation, lmf)
+DECL_OFFSET(MonoContinuation, return_ip)
+
+#ifdef TARGET_X86
+DECL_OFFSET(MonoContext, eax)
+DECL_OFFSET(MonoContext, ebx)
+DECL_OFFSET(MonoContext, ecx)
+DECL_OFFSET(MonoContext, edx)
+DECL_OFFSET(MonoContext, edi)
+DECL_OFFSET(MonoContext, esi)
+DECL_OFFSET(MonoContext, esp)
+DECL_OFFSET(MonoContext, ebp)
+DECL_OFFSET(MonoContext, eip)
+
+DECL_OFFSET(MonoLMF, method)
+DECL_OFFSET(MonoLMF, lmf_addr)
+DECL_OFFSET(MonoLMF, esp)
+DECL_OFFSET(MonoLMF, ebx)
+DECL_OFFSET(MonoLMF, edi)
+DECL_OFFSET(MonoLMF, esi)
+DECL_OFFSET(MonoLMF, ebp)
+DECL_OFFSET(MonoLMF, eip)
+#endif
+
+#ifdef TARGET_ARM
+DECL_OFFSET (MonoContext, pc)
+DECL_OFFSET (MonoContext, regs)
+DECL_OFFSET (MonoContext, fregs)
+
+DECL_OFFSET(MonoLMF, method)
+DECL_OFFSET(MonoLMF, lmf_addr)
+DECL_OFFSET(MonoLMF, sp)
+DECL_OFFSET(MonoLMF, fp)
+DECL_OFFSET(MonoLMF, ip)
+DECL_OFFSET(MonoLMF, iregs)
+DECL_OFFSET(MonoLMF, fregs)
+
+DECL_OFFSET(SeqPointInfo, bp_addrs)
+DECL_OFFSET(SeqPointInfo, ss_trigger_page)
+
+DECL_OFFSET(DynCallArgs, res)
+DECL_OFFSET(DynCallArgs, res2)
+#endif
+
+#ifdef TARGET_AMD64
+DECL_OFFSET(MonoContext, rax)
+DECL_OFFSET(MonoContext, rcx)
+DECL_OFFSET(MonoContext, rdx)
+DECL_OFFSET(MonoContext, rbx)
+DECL_OFFSET(MonoContext, rbp)
+DECL_OFFSET(MonoContext, rsi)
+DECL_OFFSET(MonoContext, rdi)
+DECL_OFFSET(MonoContext, rsp)
+DECL_OFFSET(MonoContext, r8)
+DECL_OFFSET(MonoContext, r9)
+DECL_OFFSET(MonoContext, r10)
+DECL_OFFSET(MonoContext, r12)
+DECL_OFFSET(MonoContext, r13)
+DECL_OFFSET(MonoContext, r14)
+DECL_OFFSET(MonoContext, r15)
+DECL_OFFSET(MonoContext, rip)
+
+#ifdef TARGET_WIN32
+DECL_OFFSET(MonoLMF, lmf_addr)
+#endif
+
+DECL_OFFSET(MonoLMF, rsp)
+DECL_OFFSET(MonoLMF, rbp)
+DECL_OFFSET(MonoLMF, rip)
+
+DECL_OFFSET(SeqPointInfo, bp_addrs)
+DECL_OFFSET(DynCallArgs, res)
+DECL_OFFSET(SeqPointInfo, ss_trigger_page)
+
+DECL_OFFSET(MonoLMFTramp, regs)
+DECL_OFFSET(MonoLMFTramp, lmf_addr)
+
+#endif
+
+#endif
+
+#endif
+
+#undef DECL_OFFSET
+#undef DECL_OFFSET2
+#undef DECL_ALIGN
+#undef DECL_ALIGN2
+#undef USE_CROSS_COMPILE_OFFSETS
int method_slot_in_interface;
for (method_slot_in_interface = 0; method_slot_in_interface < iface->method.count; method_slot_in_interface++) {
MonoMethod *method = mono_class_get_method_by_index (iface, method_slot_in_interface);
+
+ if (method->is_generic)
+ has_generic_virtual = TRUE;
add_imt_builder_entry (imt_builder, method, &imt_collisions_bitmap, interface_offset + method_slot_in_interface, slot_num);
}
interface_offset += iface->method.count;
#include "metadata/profiler-private.h"
#include "metadata/marshal.h"
#include "metadata/method-builder.h"
+#include "metadata/abi-details.h"
#include "utils/mono-memory-model.h"
#include "utils/mono-counters.h"
void *p;
if (!for_mature) {
- if (last_major_gc_warned < stat_major_gcs) {
+ if (last_major_gc_warned < gc_stats.major_gc_count) {
++num_degraded;
if (num_degraded == 1 || num_degraded == 3)
mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_GC, "Warning: Degraded allocation. Consider increasing nursery-size if the warning persists.");
else if (num_degraded == 10)
mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_GC, "Warning: Repeated degraded allocation. Consider increasing nursery-size.");
- last_major_gc_warned = stat_major_gcs;
+ last_major_gc_warned = gc_stats.major_gc_count;
}
SGEN_ATOMIC_ADD_P (degraded_mode, size);
sgen_ensure_free_space (size);
if (atype == ATYPE_NORMAL || atype == ATYPE_SMALL) {
/* size = vtable->klass->instance_size; */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoVTable, klass));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoClass, instance_size));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoClass, instance_size));
mono_mb_emit_byte (mb, CEE_ADD);
/* FIXME: assert instance_size stays a 4 byte integer */
mono_mb_emit_byte (mb, CEE_LDIND_U4);
/* vtable->klass->sizes.element_size */
mono_mb_emit_ldarg (mb, 0);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoVTable, klass));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_I);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoClass, sizes.element_size));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoClass, sizes));
mono_mb_emit_byte (mb, CEE_ADD);
mono_mb_emit_byte (mb, CEE_LDIND_U4);
mono_mb_emit_byte (mb, CEE_CONV_I);
/* tlab_next_addr (local) = tlab_next_addr (TLS var) */
tlab_next_addr_var = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg);
- EMIT_TLS_ACCESS (mb, tlab_next_addr, TLS_KEY_SGEN_TLAB_NEXT_ADDR);
+ EMIT_TLS_ACCESS_NEXT_ADDR (mb);
mono_mb_emit_stloc (mb, tlab_next_addr_var);
/* p = (void**)tlab_next; */
/* if (G_LIKELY (new_next < tlab_temp_end)) */
mono_mb_emit_ldloc (mb, new_next_var);
- EMIT_TLS_ACCESS (mb, tlab_temp_end, TLS_KEY_SGEN_TLAB_TEMP_END);
+ EMIT_TLS_ACCESS_TEMP_END (mb);
slowpath_branch = mono_mb_emit_short_branch (mb, MONO_CEE_BLT_UN_S);
/* Slowpath */
if (atype == ATYPE_VECTOR) {
/* arr->max_length = max_length; */
mono_mb_emit_ldloc (mb, p_var);
- mono_mb_emit_ldflda (mb, G_STRUCT_OFFSET (MonoArray, max_length));
+ mono_mb_emit_ldflda (mb, MONO_STRUCT_OFFSET (MonoArray, max_length));
mono_mb_emit_ldarg (mb, 1);
#ifdef MONO_BIG_ARRAYS
mono_mb_emit_byte (mb, CEE_STIND_I);
/* need to set length and clear the last char */
/* s->length = len; */
mono_mb_emit_ldloc (mb, p_var);
- mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoString, length));
+ mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoString, length));
mono_mb_emit_byte (mb, MONO_CEE_ADD);
mono_mb_emit_ldarg (mb, 1);
mono_mb_emit_byte (mb, MONO_CEE_STIND_I4);
#endif
#include <sys/types.h>
+#define ARRAY_OBJ_INDEX(ptr,array,elem_size) (((char*)(ptr) - ((char*)(array) + G_STRUCT_OFFSET (MonoArray, vector))) / (elem_size))
+
guint8 *sgen_cardtable;
static gboolean need_mod_union;
static RootRecord *check_root = NULL;
static void
-check_root_obj_specific_ref_from_marker (void **obj)
+check_root_obj_specific_ref_from_marker (void **obj, void *gc_data)
{
check_root_obj_specific_ref (check_root, check_key, *obj);
}
}
case ROOT_DESC_USER: {
MonoGCRootMarkFunc marker = sgen_get_user_descriptor_func (desc);
- marker (start_root, check_root_obj_specific_ref_from_marker);
+ marker (start_root, check_root_obj_specific_ref_from_marker, NULL);
break;
}
case ROOT_DESC_RUN_LEN:
g_assert (((MonoObject*)(*o))->vtable->domain != check_domain);
}
+
+static void
+check_obj_not_in_domain_callback (void **o, void *gc_data)
+{
+ g_assert (((MonoObject*)(*o))->vtable->domain != check_domain);
+}
+
void
sgen_scan_for_registered_roots_in_domain (MonoDomain *domain, int root_type)
{
}
case ROOT_DESC_USER: {
MonoGCRootMarkFunc marker = sgen_get_user_descriptor_func (desc);
- marker (start_root, check_obj_not_in_domain);
+ marker (start_root, check_obj_not_in_domain_callback, NULL);
break;
}
case ROOT_DESC_RUN_LEN:
static int stat_wbarrier_object_copy = 0;
#endif
-int stat_minor_gcs = 0;
-int stat_major_gcs = 0;
-
static long long stat_pinned_objects = 0;
static long long time_minor_pre_collection_fragment_clear = 0;
GrayQueue *queue;
} UserCopyOrMarkData;
-static MonoNativeTlsKey user_copy_or_mark_key;
-
static void
-init_user_copy_or_mark_key (void)
+single_arg_user_copy_or_mark (void **obj, void *gc_data)
{
- mono_native_tls_alloc (&user_copy_or_mark_key, NULL);
-}
-
-static void
-set_user_copy_or_mark_data (UserCopyOrMarkData *data)
-{
- mono_native_tls_set_value (user_copy_or_mark_key, data);
-}
-
-static void
-single_arg_user_copy_or_mark (void **obj)
-{
- UserCopyOrMarkData *data = mono_native_tls_get_value (user_copy_or_mark_key);
+ UserCopyOrMarkData *data = gc_data;
data->func (obj, data->queue);
}
case ROOT_DESC_USER: {
UserCopyOrMarkData data = { copy_func, queue };
MonoGCRootMarkFunc marker = sgen_get_user_descriptor_func (desc);
- set_user_copy_or_mark_data (&data);
- marker (start_root, single_arg_user_copy_or_mark);
- set_user_copy_or_mark_data (NULL);
+ marker (start_root, single_arg_user_copy_or_mark, &data);
break;
}
case ROOT_DESC_RUN_LEN:
static GCRootReport *root_report;
static void
-single_arg_report_root (void **obj)
+single_arg_report_root (void **obj, void *gc_data)
{
if (*obj)
add_profile_gc_root (root_report, *obj, MONO_PROFILE_GC_ROOT_OTHER, 0);
case ROOT_DESC_USER: {
MonoGCRootMarkFunc marker = sgen_get_user_descriptor_func (desc);
root_report = report;
- marker (start_root, single_arg_report_root);
+ marker (start_root, single_arg_report_root, NULL);
break;
}
case ROOT_DESC_RUN_LEN:
return TRUE;
MONO_GC_BEGIN (GENERATION_NURSERY);
- binary_protocol_collection_begin (stat_minor_gcs, GENERATION_NURSERY);
+ binary_protocol_collection_begin (gc_stats.minor_gc_count, GENERATION_NURSERY);
verify_nursery ();
/* FIXME: optimize later to use the higher address where an object can be present */
nursery_next = MAX (nursery_next, sgen_get_nursery_end ());
- SGEN_LOG (1, "Start nursery collection %d %p-%p, size: %d", stat_minor_gcs, sgen_get_nursery_start (), nursery_next, (int)(nursery_next - sgen_get_nursery_start ()));
+ SGEN_LOG (1, "Start nursery collection %d %p-%p, size: %d", gc_stats.minor_gc_count, sgen_get_nursery_start (), nursery_next, (int)(nursery_next - sgen_get_nursery_start ()));
max_garbage_amount = nursery_next - sgen_get_nursery_start ();
g_assert (nursery_section->size >= max_garbage_amount);
init_gray_queue ();
- stat_minor_gcs++;
gc_stats.minor_gc_count ++;
MONO_GC_CHECKPOINT_1 (GENERATION_NURSERY);
gc_stats.minor_gc_time_usecs += TV_ELAPSED (all_atv, all_btv);
if (heap_dump_file)
- dump_heap ("minor", stat_minor_gcs - 1, NULL);
+ dump_heap ("minor", gc_stats.minor_gc_count - 1, NULL);
/* prepare the pin queue for the next collection */
sgen_finish_pinning ();
objects_pinned = 0;
MONO_GC_END (GENERATION_NURSERY);
- binary_protocol_collection_end (stat_minor_gcs - 1, GENERATION_NURSERY);
+ binary_protocol_collection_end (gc_stats.minor_gc_count - 1, GENERATION_NURSERY);
if (check_nursery_objects_pinned && !sgen_minor_collector.is_split)
sgen_check_nursery_objects_pinned (unpin_queue != NULL);
major_start_collection (gboolean concurrent, size_t *old_next_pin_slot)
{
MONO_GC_BEGIN (GENERATION_OLD);
- binary_protocol_collection_begin (stat_major_gcs, GENERATION_OLD);
+ binary_protocol_collection_begin (gc_stats.major_gc_count, GENERATION_OLD);
current_collection_generation = GENERATION_OLD;
#ifndef DISABLE_PERFCOUNTERS
check_scan_starts ();
degraded_mode = 0;
- SGEN_LOG (1, "Start major collection %d", stat_major_gcs);
- stat_major_gcs++;
+ SGEN_LOG (1, "Start major collection %d", gc_stats.major_gc_count);
gc_stats.major_gc_count ++;
if (major_collector.start_major_collection)
time_major_fragment_creation += TV_ELAPSED (btv, atv);
if (heap_dump_file)
- dump_heap ("major", stat_major_gcs - 1, reason);
+ dump_heap ("major", gc_stats.major_gc_count - 1, reason);
if (fin_ready_list || critical_fin_list) {
SGEN_LOG (4, "Finalizer-thread wakeup: ready %d", num_ready_finalizers);
//consistency_check ();
MONO_GC_END (GENERATION_OLD);
- binary_protocol_collection_end (stat_major_gcs - 1, GENERATION_OLD);
+ binary_protocol_collection_end (gc_stats.major_gc_count - 1, GENERATION_OLD);
}
static gboolean
}
void*
-mono_gc_scan_object (void *obj)
+mono_gc_scan_object (void *obj, void *gc_data)
{
- UserCopyOrMarkData *data = mono_native_tls_get_value (user_copy_or_mark_key);
+ UserCopyOrMarkData *data = gc_data;
current_object_ops.copy_or_mark_object (&obj, data->queue);
return obj;
}
SGEN_LOG (3, "Scanning thread %p, range: %p-%p, size: %td, pinned=%zd", info, info->stack_start, info->stack_end, (char*)info->stack_end - (char*)info->stack_start, sgen_get_pinned_count ());
if (gc_callbacks.thread_mark_func && !conservative_stack_mark) {
UserCopyOrMarkData data = { NULL, queue };
- set_user_copy_or_mark_data (&data);
- gc_callbacks.thread_mark_func (info->runtime_data, info->stack_start, info->stack_end, precise);
- set_user_copy_or_mark_data (NULL);
+ gc_callbacks.thread_mark_func (info->runtime_data, info->stack_start, info->stack_end, precise, &data);
} else if (!precise) {
if (!conservative_stack_mark) {
fprintf (stderr, "Precise stack mark not supported - disabling.\n");
mono_gc_collection_count (int generation)
{
if (generation == 0)
- return stat_minor_gcs;
- return stat_major_gcs;
+ return gc_stats.minor_gc_count;
+ return gc_stats.major_gc_count;
}
int64_t
LOCK_INIT (sgen_interruption_mutex);
LOCK_INIT (pin_queue_mutex);
- init_user_copy_or_mark_key ();
-
if ((env = g_getenv (MONO_GC_PARAMS_NAME))) {
opts = g_strsplit (env, ",", -1);
for (ptr = opts; *ptr; ++ptr) {
char data [MONO_ZERO_LEN_ARRAY];
};
-#define ARRAY_OBJ_INDEX(ptr,array,elem_size) (((char*)(ptr) - ((char*)(array) + G_STRUCT_OFFSET (MonoArray, vector))) / (elem_size))
-
extern LOSObject *los_object_list;
extern mword los_memory_usage;
#endif
#ifdef HAVE_KW_THREAD
-#define EMIT_TLS_ACCESS(mb,member,key) do { \
+
+#define EMIT_TLS_ACCESS_NEXT_ADDR(mb) do { \
+ mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX); \
+ mono_mb_emit_byte ((mb), CEE_MONO_TLS); \
+ mono_mb_emit_i4 ((mb), TLS_KEY_SGEN_TLAB_NEXT_ADDR); \
+ } while (0)
+
+#define EMIT_TLS_ACCESS_TEMP_END(mb) do { \
mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX); \
mono_mb_emit_byte ((mb), CEE_MONO_TLS); \
- mono_mb_emit_i4 ((mb), (key)); \
+ mono_mb_emit_i4 ((mb), TLS_KEY_SGEN_TLAB_TEMP_END); \
} while (0)
+
#else
#if defined(__APPLE__) || defined (HOST_WIN32)
-#define EMIT_TLS_ACCESS(mb,member,key) do { \
+#define EMIT_TLS_ACCESS_NEXT_ADDR(mb) do { \
mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX); \
mono_mb_emit_byte ((mb), CEE_MONO_TLS); \
mono_mb_emit_i4 ((mb), TLS_KEY_SGEN_THREAD_INFO); \
- mono_mb_emit_icon ((mb), G_STRUCT_OFFSET (SgenThreadInfo, member)); \
+ mono_mb_emit_icon ((mb), MONO_STRUCT_OFFSET (SgenThreadInfo, tlab_next_addr)); \
mono_mb_emit_byte ((mb), CEE_ADD); \
mono_mb_emit_byte ((mb), CEE_LDIND_I); \
} while (0)
+
+#define EMIT_TLS_ACCESS_TEMP_END(mb) do { \
+ mono_mb_emit_byte ((mb), MONO_CUSTOM_PREFIX); \
+ mono_mb_emit_byte ((mb), CEE_MONO_TLS); \
+ mono_mb_emit_i4 ((mb), TLS_KEY_SGEN_THREAD_INFO); \
+ mono_mb_emit_icon ((mb), MONO_STRUCT_OFFSET (SgenThreadInfo, tlab_temp_end)); \
+ mono_mb_emit_byte ((mb), CEE_ADD); \
+ mono_mb_emit_byte ((mb), CEE_LDIND_I); \
+ } while (0)
+
#else
-#define EMIT_TLS_ACCESS(mb,member,key) do { g_error ("sgen is not supported when using --with-tls=pthread.\n"); } while (0)
+#define EMIT_TLS_ACCESS_NEXT_ADDR(mb) do { g_error ("sgen is not supported when using --with-tls=pthread.\n"); } while (0)
+#define EMIT_TLS_ACCESS_TEMP_END(mb) do { g_error ("sgen is not supported when using --with-tls=pthread.\n"); } while (0)
#endif
#endif
/* Other globals */
extern GCMemSection *nursery_section;
-extern int stat_major_gcs;
extern guint32 collect_before_allocs;
extern guint32 verify_before_allocs;
extern gboolean has_per_allocation_action;
static uintptr_t* static_reference_bitmaps [NUM_STATIC_DATA_IDX];
static void
-mark_tls_slots (void *addr, MonoGCMarkFunc mark_func)
+mark_tls_slots (void *addr, MonoGCMarkFunc mark_func, void *gc_data)
{
int i;
gpointer *static_data = addr;
void ** p = ptr;
while (bmap) {
if ((bmap & 1) && *p) {
- mark_func (p);
+ mark_func (p, gc_data);
}
p++;
bmap >>= 1;
# Create monow.exe, linked for the 'windows' subsystem
if HOST_WIN32
+if SUPPORT_BOEHM
monow_LDADD = $(mono_boehm_LDADD)
monow_LDFLAGS = $(mono_boehm_LDFLAGS) -mwindows
monow_SOURCES = $(mono_boehm_SOURCES)
+else
+monow_LDADD = $(mono_sgen_LDADD)
+monow_LDFLAGS = $(mono_sgen_LDFLAGS) -mwindows
+monow_SOURCES = $(mono_sgen_SOURCES)
+endif
endif
genmdesc_SOURCES = \
xdebug.c \
mini-llvm.h \
mini-llvm-cpp.h \
- alias-analysis.c
+ alias-analysis.c \
+ mini-cross-helpers.c
test_sources = \
basic-calls.cs \
#include <sys/stat.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/tabledefs.h>
#include <mono/metadata/class.h>
#include <mono/metadata/object.h>
gpointer ptr;
} value;
};
-static ReadOnlyValue *readonly_values = NULL;
+static ReadOnlyValue *readonly_values;
typedef struct MonoAotOptions {
char *outfile;
if (use_unwind_ops) {
guint32 encoded_len;
guint8 *encoded;
+ guint32 unwind_desc;
- /*
- * This is a duplicate of the data in the .debug_frame section, but that
- * section cannot be accessed using the dl interface.
- */
encoded = mono_unwind_ops_encode (cfg->unwind_ops, &encoded_len);
- encode_value (get_unwind_info_offset (acfg, encoded, encoded_len), p, &p);
- g_free (encoded);
+
+ unwind_desc = get_unwind_info_offset (acfg, encoded, encoded_len);
+ g_assert (unwind_desc < 0xffff);
+ if (cfg->has_unwind_info_for_epilog) {
+ /*
+ * The lower 16 bits identify the unwind descriptor, the upper 16 bits contain the offset of
+ * the start of the epilog from the end of the method.
+ */
+ g_assert (cfg->code_size - cfg->epilog_begin < 0xffff);
+ encode_value (((cfg->code_size - cfg->epilog_begin) << 16) | unwind_desc, p, &p);
+ g_free (encoded);
+ } else {
+ encode_value (unwind_desc, p, &p);
+ }
} else {
- encode_value (jinfo->used_regs, p, &p);
+ encode_value (jinfo->unwind_info, p, &p);
}
/*Encode the number of holes before the number of clauses to make decoding easier*/
emit_int32 (acfg, align);
}
#else
- emit_int32 (acfg, __alignof__ (double));
- emit_int32 (acfg, __alignof__ (gint64));
+ emit_int32 (acfg, MONO_ABI_ALIGNOF (double));
+ emit_int32 (acfg, MONO_ABI_ALIGNOF (gint64));
#endif
emit_int32 (acfg, MONO_TRAMPOLINE_NUM);
emit_int32 (acfg, acfg->tramp_page_size);
#include <sys/wait.h> /* for WIFEXITED, WEXITSTATUS */
#endif
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/tabledefs.h>
#include <mono/metadata/class.h>
#include <mono/metadata/object.h>
align_int64 = align;
}
#else
- align_double = __alignof__ (double);
- align_int64 = __alignof__ (gint64);
+ align_double = MONO_ABI_ALIGNOF (double);
+ align_int64 = MONO_ABI_ALIGNOF (gint64);
#endif
/* Sanity check */
mono_domain_alloc0_lock_free (domain, MONO_SIZEOF_JIT_INFO + (sizeof (MonoJitExceptionInfo) * (ei_len + nested_len)) + extra_size);
jinfo->code_size = code_len;
- jinfo->used_regs = mono_cache_unwind_info (info.unw_info, info.unw_info_len);
+ jinfo->unwind_info = mono_cache_unwind_info (info.unw_info, info.unw_info_len);
jinfo->d.method = method;
jinfo->code_start = code;
jinfo->domain_neutral = 0;
- /* This signals that used_regs points to a normal cached unwind info */
+ /* This signals that unwind_info points to a normal cached unwind info */
jinfo->from_aot = 0;
jinfo->num_clauses = ei_len + nested_len;
{
int i, buf_len, num_clauses, len;
MonoJitInfo *jinfo;
- guint used_int_regs, flags;
+ guint unwind_info, flags;
gboolean has_generic_jit_info, has_dwarf_unwind_info, has_clauses, has_seq_points, has_try_block_holes, has_arch_eh_jit_info;
gboolean from_llvm, has_gc_map;
guint8 *p;
has_arch_eh_jit_info = (flags & 128) != 0;
if (has_dwarf_unwind_info) {
- guint32 offset;
-
- offset = decode_value (p, &p);
- g_assert (offset < (1 << 30));
- used_int_regs = offset;
+ unwind_info = decode_value (p, &p);
+ g_assert (unwind_info < (1 << 30));
} else {
- used_int_regs = decode_value (p, &p);
+ unwind_info = decode_value (p, &p);
}
if (has_generic_jit_info)
generic_info_size = sizeof (MonoGenericJitInfo);
}
jinfo->code_size = code_len;
- jinfo->used_regs = used_int_regs;
+ jinfo->unwind_info = unwind_info;
jinfo->d.method = method;
jinfo->code_start = code;
jinfo->domain_neutral = 0;
mono_aot_unlock ();
}
- p = amodule->unwind_info + ji->used_regs;
+ /* The upper 16 bits of ji->unwind_info might contain the epilog offset */
+ p = amodule->unwind_info + (ji->unwind_info & 0xffff);
*unwind_info_len = decode_value (p, &p);
return p;
}
tls_set: src1:i len:16
tls_set_reg: src1:i src2:i len:32
atomic_add_i4: src1:b src2:i dest:i len:32
-atomic_add_new_i4: src1:b src2:i dest:i len:32
-atomic_exchange_i4: src1:b src2:i dest:a len:32
atomic_add_i8: src1:b src2:i dest:i len:32
-atomic_add_new_i8: src1:b src2:i dest:i len:32
+atomic_exchange_i4: src1:b src2:i dest:a len:32
atomic_exchange_i8: src1:b src2:i dest:a len:32
atomic_cas_i4: src1:b src2:i src3:a dest:a len:24
atomic_cas_i8: src1:b src2:i src3:a dest:a len:24
gc_spill_slot_liveness_def: len:0
gc_param_slot_liveness_def: len:0
+atomic_add_i4: dest:i src1:i src2:i len:64
atomic_exchange_i4: dest:i src1:i src2:i len:64
atomic_cas_i4: dest:i src1:i src2:i src3:i len:64
-atomic_add_new_i4: dest:i src1:i src2:i len:64
arm64_cbnzw: src1:i len:16
arm64_cbnzx: src1:i len:16
-atomic_add_new_i4: dest:i src1:i src2:i len:32
-atomic_add_new_i8: dest:i src1:i src2:i len:32
+atomic_add_i4: dest:i src1:i src2:i len:32
+atomic_add_i8: dest:i src1:i src2:i len:32
atomic_exchange_i4: dest:i src1:i src2:i len:32
atomic_exchange_i8: dest:i src1:i src2:i len:32
atomic_cas_i4: dest:i src1:i src2:i src3:i len:32
aot_const: dest:i len:48
tls_get: dest:i len:48
atomic_add_i4: src1:b src2:i dest:i len:48
-atomic_add_new_i4: src1:b src2:i dest:i len:48
-atomic_exchange_i4: src1:b src2:i dest:i len:48
atomic_add_i8: src1:b src2:i dest:i len:48
-atomic_add_new_i8: src1:b src2:i dest:i len:48
-atomic_add_imm_new_i4: src1:b dest:i len:48
-atomic_add_imm_new_i8: src1:b dest:i len:48
+atomic_exchange_i4: src1:b src2:i dest:i len:48
atomic_exchange_i8: src1:b src2:i dest:i len:48
memory_barrier: len:48
+atomic_add_imm_i4: src1:b dest:i len:48
+atomic_add_imm_i8: src1:b dest:i len:48
adc: dest:i src1:i src2:i len:48
addcc: dest:i src1:i src2:i len:48
subcc: dest:i src1:i src2:i len:48
jump_table: dest:i len:8
+atomic_add_i4: src1:b src2:i dest:i len:20
atomic_cas_i4: src1:b src2:i src3:i dest:i len:38
jump_table: dest:i len:20
-atomic_add_new_i4: src1:b src2:i dest:i len:20
-atomic_add_new_i8: src1:b src2:i dest:i len:20
-
+atomic_add_i4: src1:b src2:i dest:i len:20
+atomic_add_i8: src1:b src2:i dest:i len:20
atomic_cas_i4: src1:b src2:i src3:i dest:i len:38
atomic_cas_i8: src1:b src2:i src3:i dest:i len:38
aot_const: dest:i len:8
atomic_add_i4: src1:b src2:i dest:i len:28
atomic_add_i8: src1:b src2:i dest:i len:30
-atomic_add_new_i4: src1:b src2:i dest:i len:28
-atomic_add_new_i8: src1:b src2:i dest:i len:30
atomic_exchange_i4: src1:b src2:i dest:i len:18
atomic_exchange_i8: src1:b src2:i dest:i len:24
br: len:6
bigmul_un: len:2 dest:l src1:a src2:i
sext_i1: dest:i src1:y len:3
sext_i2: dest:i src1:y len:3
-tls_get: dest:i len:20
+tls_get: dest:i len:32
tls_get_reg: dest:i src1:i len:20
tls_set: src1:i len:20
tls_set_reg: src1:i src2:i len:20
atomic_add_i4: src1:b src2:i dest:i len:16
-atomic_add_new_i4: src1:b src2:i dest:i len:16
atomic_exchange_i4: src1:b src2:i dest:a len:24
atomic_cas_i4: src1:b src2:i src3:a dest:a len:24
memory_barrier: len:16
* breakpoint when the method is JITed.
*/
-static GPtrArray *breakpoints = NULL;
+static GPtrArray *breakpoints;
static int
mono_debugger_insert_breakpoint_full (MonoMethodDesc *desc)
#define HEADER_LENGTH 11
#define MAJOR_VERSION 2
-#define MINOR_VERSION 34
+#define MINOR_VERSION 36
typedef enum {
CMD_SET_VM = 1,
typedef enum {
INVOKE_FLAG_DISABLE_BREAKPOINTS = 1,
- INVOKE_FLAG_SINGLE_THREADED = 2
+ INVOKE_FLAG_SINGLE_THREADED = 2,
+ INVOKE_FLAG_RETURN_OUT_THIS = 4,
+ INVOKE_FLAG_RETURN_OUT_ARGS = 8
} InvokeFlags;
typedef enum {
static DebuggerProfiler debugger_profiler;
/* The single step request instance */
-static SingleStepReq *ss_req = NULL;
-static gpointer ss_invoke_addr = NULL;
+static SingleStepReq *ss_req;
+static gpointer ss_invoke_addr;
#ifdef MONO_ARCH_SOFT_DEBUG_SUPPORTED
/* Number of single stepping operations in progress */
register_transport (&trans);
}
+/*
+ * socket_fd_transport_connect:
+ *
+ */
+static void
+socket_fd_transport_connect (const char *address)
+{
+ int res;
+
+ res = sscanf (address, "%d", &conn_fd);
+ if (res != 1) {
+ fprintf (stderr, "debugger-agent: socket-fd transport address is invalid: '%s'\n", address);
+ exit (1);
+ }
+
+ if (!transport_handshake ())
+ exit (1);
+}
+
+static void
+register_socket_fd_transport (void)
+{
+ DebuggerTransport trans;
+
+ /* This is the same as the 'dt_socket' transport, but receives an already connected socket fd */
+ trans.name = "socket-fd";
+ trans.connect = socket_fd_transport_connect;
+ trans.close1 = socket_transport_close1;
+ trans.close2 = socket_transport_close2;
+ trans.send = socket_transport_send;
+ trans.recv = socket_transport_recv;
+
+ register_transport (&trans);
+}
+
#endif /* DISABLE_SOCKET_TRANSPORT */
/*
#ifndef DISABLE_SOCKET_TRANSPORT
register_socket_transport ();
+ register_socket_fd_transport ();
#endif
for (i = 0; i < ntransports; ++i) {
err = decode_value (sig->params [i], domain, (guint8*)&args [i], p, &p, end);
if (err)
break;
-
if (args [i] && ((MonoObject*)args [i])->vtable->domain != domain)
NOT_IMPLEMENTED;
+
+ if (sig->params [i]->byref) {
+ arg_buf [i] = g_alloca (sizeof (mgreg_t));
+ *(gpointer*)arg_buf [i] = args [i];
+ args [i] = arg_buf [i];
+ }
} else {
arg_buf [i] = g_alloca (mono_class_instance_size (mono_class_from_mono_type (sig->params [i])));
err = decode_value (sig->params [i], domain, arg_buf [i], p, &p, end);
/*
* Add an LMF frame to link the stack frames on the invoke method with our caller.
*/
- /* FIXME: Move this to arch specific code */
#ifdef MONO_ARCH_SOFT_DEBUG_SUPPORTED
if (invoke->has_ctx) {
MonoLMF **lmf_addr;
buffer_add_byte (buf, 0);
buffer_add_value (buf, &mono_defaults.object_class->byval_arg, &exc, domain);
} else {
- buffer_add_byte (buf, 1);
+ gboolean out_this = FALSE;
+ gboolean out_args = FALSE;
+
+ if ((invoke->flags & INVOKE_FLAG_RETURN_OUT_THIS) && CHECK_PROTOCOL_VERSION (2, 35))
+ out_this = TRUE;
+ if ((invoke->flags & INVOKE_FLAG_RETURN_OUT_ARGS) && CHECK_PROTOCOL_VERSION (2, 35))
+ out_args = TRUE;
+ buffer_add_byte (buf, 1 + (out_this ? 2 : 0) + (out_args ? 4 : 0));
if (sig->ret->type == MONO_TYPE_VOID) {
if (!strcmp (m->name, ".ctor") && !m->klass->valuetype) {
buffer_add_value (buf, &mono_defaults.object_class->byval_arg, &this, domain);
} else {
NOT_IMPLEMENTED;
}
+ if (out_this)
+ /* Return the new value of the receiver after the call */
+ buffer_add_value (buf, &m->klass->byval_arg, this_buf, domain);
+ if (out_args) {
+ buffer_add_int (buf, nargs);
+ for (i = 0; i < nargs; ++i) {
+ if (MONO_TYPE_IS_REFERENCE (sig->params [i]))
+ buffer_add_value (buf, sig->params [i], &args [i], domain);
+ else if (sig->params [i]->byref)
+ /* add_value () does an indirection */
+ buffer_add_value (buf, sig->params [i], &arg_buf [i], domain);
+ else
+ buffer_add_value (buf, sig->params [i], arg_buf [i], domain);
+ }
+ }
}
tls->disable_breakpoints = FALSE;
#include "jit-icalls.h"
#include <mono/metadata/gc-internal.h>
+#include <mono/metadata/abi-details.h>
#ifndef DISABLE_JIT
ins->opcode = OP_ICONST;
MONO_INST_NULLIFY_SREGS (ins);
ins->inst_c0 = 0;
- } else if ((ins->inst_imm > 0) && (ins->inst_imm < (1L << 32)) && (power != -1)) {
+ } else if ((ins->inst_imm > 0) && (ins->inst_imm < (1LL << 32)) && (power != -1)) {
gboolean is_long = ins->opcode == OP_LREM_IMM;
int compensator_reg = alloc_ireg (cfg);
int intermediate_reg;
switch (ins->opcode) {
case OP_LDLEN:
NEW_LOAD_MEMBASE_FLAGS (cfg, dest, OP_LOADI4_MEMBASE, ins->dreg, ins->sreg1,
- G_STRUCT_OFFSET (MonoArray, max_length), ins->flags | MONO_INST_INVARIANT_LOAD);
+ MONO_STRUCT_OFFSET (MonoArray, max_length), ins->flags | MONO_INST_INVARIANT_LOAD);
MONO_ADD_INS (cfg->cbb, dest);
break;
case OP_BOUNDS_CHECK:
break;
case OP_STRLEN:
MONO_EMIT_NEW_LOAD_MEMBASE_OP_FLAGS (cfg, OP_LOADI4_MEMBASE, ins->dreg,
- ins->sreg1, G_STRUCT_OFFSET (MonoString, length), ins->flags | MONO_INST_INVARIANT_LOAD);
+ ins->sreg1, MONO_STRUCT_OFFSET (MonoString, length), ins->flags | MONO_INST_INVARIANT_LOAD);
break;
default:
break;
#include "version.h"
#include "debugger-agent.h"
-static FILE *mini_stats_fd = NULL;
+static FILE *mini_stats_fd;
static void mini_usage (void);
if (g_getenv ("MONO_NO_SMP"))
mono_set_use_smp (FALSE);
- if (!g_thread_supported ())
- g_thread_init (NULL);
-
g_log_set_always_fatal (G_LOG_LEVEL_ERROR);
g_log_set_fatal_mask (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR);
#endif
#include <mono/arch/amd64/amd64-codegen.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/tabledefs.h>
#include <mono/metadata/threads.h>
amd64_mov_reg_reg (code, AMD64_R11, AMD64_ARG_REG1, 8);
/* Restore all registers except %rip and %r11 */
- amd64_mov_reg_membase (code, AMD64_RAX, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rax), 8);
- amd64_mov_reg_membase (code, AMD64_RCX, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rcx), 8);
- amd64_mov_reg_membase (code, AMD64_RDX, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rdx), 8);
- amd64_mov_reg_membase (code, AMD64_RBX, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rbx), 8);
- amd64_mov_reg_membase (code, AMD64_RBP, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rbp), 8);
- amd64_mov_reg_membase (code, AMD64_RSI, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rsi), 8);
- amd64_mov_reg_membase (code, AMD64_RDI, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rdi), 8);
- //amd64_mov_reg_membase (code, AMD64_R8, AMD64_R11, G_STRUCT_OFFSET (MonoContext, r8), 8);
- //amd64_mov_reg_membase (code, AMD64_R9, AMD64_R11, G_STRUCT_OFFSET (MonoContext, r9), 8);
- //amd64_mov_reg_membase (code, AMD64_R10, AMD64_R11, G_STRUCT_OFFSET (MonoContext, r10), 8);
- amd64_mov_reg_membase (code, AMD64_R12, AMD64_R11, G_STRUCT_OFFSET (MonoContext, r12), 8);
- amd64_mov_reg_membase (code, AMD64_R13, AMD64_R11, G_STRUCT_OFFSET (MonoContext, r13), 8);
- amd64_mov_reg_membase (code, AMD64_R14, AMD64_R11, G_STRUCT_OFFSET (MonoContext, r14), 8);
+ amd64_mov_reg_membase (code, AMD64_RAX, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rax), 8);
+ amd64_mov_reg_membase (code, AMD64_RCX, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rcx), 8);
+ amd64_mov_reg_membase (code, AMD64_RDX, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rdx), 8);
+ amd64_mov_reg_membase (code, AMD64_RBX, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rbx), 8);
+ amd64_mov_reg_membase (code, AMD64_RBP, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rbp), 8);
+ amd64_mov_reg_membase (code, AMD64_RSI, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rsi), 8);
+ amd64_mov_reg_membase (code, AMD64_RDI, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rdi), 8);
+ //amd64_mov_reg_membase (code, AMD64_R8, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, r8), 8);
+ //amd64_mov_reg_membase (code, AMD64_R9, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, r9), 8);
+ //amd64_mov_reg_membase (code, AMD64_R10, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, r10), 8);
+ amd64_mov_reg_membase (code, AMD64_R12, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, r12), 8);
+ amd64_mov_reg_membase (code, AMD64_R13, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, r13), 8);
+ amd64_mov_reg_membase (code, AMD64_R14, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, r14), 8);
#if !defined(__native_client_codegen__)
- amd64_mov_reg_membase (code, AMD64_R15, AMD64_R11, G_STRUCT_OFFSET (MonoContext, r15), 8);
+ amd64_mov_reg_membase (code, AMD64_R15, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, r15), 8);
#endif
/*
* size. Hence the stack pointer can be restored only after
* we have finished loading everything from the context.
*/
- amd64_mov_reg_membase (code, AMD64_R8, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rsp), 8);
- amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, G_STRUCT_OFFSET (MonoContext, rip), 8);
+ amd64_mov_reg_membase (code, AMD64_R8, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rsp), 8);
+ amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, MONO_STRUCT_OFFSET (MonoContext, rip), 8);
amd64_mov_reg_reg (code, AMD64_RSP, AMD64_R8, 8);
/* jump to the saved IP */
amd64_alu_reg_imm (code, X86_SUB, AMD64_RSP, 8);
/* set new EBP */
- amd64_mov_reg_membase (code, AMD64_RBP, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, rbp), 8);
+ amd64_mov_reg_membase (code, AMD64_RBP, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, rbp), 8);
/* load callee saved regs */
- amd64_mov_reg_membase (code, AMD64_RBX, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, rbx), 8);
- amd64_mov_reg_membase (code, AMD64_R12, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, r12), 8);
- amd64_mov_reg_membase (code, AMD64_R13, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, r13), 8);
- amd64_mov_reg_membase (code, AMD64_R14, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, r14), 8);
+ amd64_mov_reg_membase (code, AMD64_RBX, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, rbx), 8);
+ amd64_mov_reg_membase (code, AMD64_R12, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, r12), 8);
+ amd64_mov_reg_membase (code, AMD64_R13, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, r13), 8);
+ amd64_mov_reg_membase (code, AMD64_R14, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, r14), 8);
#if !defined(__native_client_codegen__)
- amd64_mov_reg_membase (code, AMD64_R15, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, r15), 8);
+ amd64_mov_reg_membase (code, AMD64_R15, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, r15), 8);
#endif
#ifdef TARGET_WIN32
- amd64_mov_reg_membase (code, AMD64_RDI, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, rdi), 8);
- amd64_mov_reg_membase (code, AMD64_RSI, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoContext, rsi), 8);
+ amd64_mov_reg_membase (code, AMD64_RDI, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, rdi), 8);
+ amd64_mov_reg_membase (code, AMD64_RSI, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoContext, rsi), 8);
#endif
/* call the handler */
guint8 *cfa;
guint32 unwind_info_len;
guint8 *unwind_info;
+ guint8 *epilog;
frame->type = FRAME_TYPE_MANAGED;
printf ("%s %p %p\n", ji->d.method->name, ji->code_start, ip);
mono_print_unwind_info (unwind_info, unwind_info_len);
*/
+ epilog = (guint8*)ji->code_start + ji->code_size - (ji->unwind_info >> 16);
regs [AMD64_RAX] = new_ctx->rax;
regs [AMD64_RBX] = new_ctx->rbx;
mono_unwind_frame (unwind_info, unwind_info_len, ji->code_start,
(guint8*)ji->code_start + ji->code_size,
- ip, regs, MONO_MAX_IREGS + 1,
+ ip, &epilog, regs, MONO_MAX_IREGS + 1,
save_locations, MONO_MAX_IREGS, &cfa);
new_ctx->rax = regs [AMD64_RAX];
amd64_mov_reg_reg (code, cont_reg, MONO_AMD64_ARG_REG1, 8);
amd64_mov_reg_reg (code, AMD64_RAX, MONO_AMD64_ARG_REG2, 8);
/* setup the copy of the stack */
- amd64_mov_reg_membase (code, AMD64_RCX, cont_reg, G_STRUCT_OFFSET (MonoContinuation, stack_used_size), sizeof (int));
+ amd64_mov_reg_membase (code, AMD64_RCX, cont_reg, MONO_STRUCT_OFFSET (MonoContinuation, stack_used_size), sizeof (int));
amd64_shift_reg_imm (code, X86_SHR, AMD64_RCX, 3);
x86_cld (code);
- amd64_mov_reg_membase (code, AMD64_RSI, cont_reg, G_STRUCT_OFFSET (MonoContinuation, saved_stack), sizeof (gpointer));
- amd64_mov_reg_membase (code, AMD64_RDI, cont_reg, G_STRUCT_OFFSET (MonoContinuation, return_sp), sizeof (gpointer));
+ amd64_mov_reg_membase (code, AMD64_RSI, cont_reg, MONO_STRUCT_OFFSET (MonoContinuation, saved_stack), sizeof (gpointer));
+ amd64_mov_reg_membase (code, AMD64_RDI, cont_reg, MONO_STRUCT_OFFSET (MonoContinuation, return_sp), sizeof (gpointer));
amd64_prefix (code, X86_REP_PREFIX);
amd64_movsl (code);
/* now restore the registers from the LMF */
NOT_IMPLEMENTED;
- amd64_mov_reg_membase (code, AMD64_RCX, cont_reg, G_STRUCT_OFFSET (MonoContinuation, lmf), 8);
- amd64_mov_reg_membase (code, AMD64_RSP, AMD64_RCX, G_STRUCT_OFFSET (MonoLMF, rsp), 8);
+ amd64_mov_reg_membase (code, AMD64_RCX, cont_reg, MONO_STRUCT_OFFSET (MonoContinuation, lmf), 8);
+ amd64_mov_reg_membase (code, AMD64_RSP, AMD64_RCX, MONO_STRUCT_OFFSET (MonoLMF, rsp), 8);
/* restore the lmf chain */
/*x86_mov_reg_membase (code, X86_ECX, X86_ESP, 12, 4);
x86_mov_membase_reg (code, X86_ECX, 0, X86_EDX, 4);*/
/* state is already in rax */
- amd64_jump_membase (code, cont_reg, G_STRUCT_OFFSET (MonoContinuation, return_ip));
+ amd64_jump_membase (code, cont_reg, MONO_STRUCT_OFFSET (MonoContinuation, return_ip));
g_assert ((code - start) <= kMaxCodeSize);
nacl_global_codeman_validate(&start, kMaxCodeSize, &code);
#include <mono/arch/arm/arm-codegen.h>
#include <mono/arch/arm/arm-vfp-codegen.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/tabledefs.h>
#include <mono/metadata/threads.h>
ctx_reg = ARMREG_R0;
if (!mono_arch_is_soft_float ()) {
- ARM_ADD_REG_IMM8 (code, ARMREG_IP, ctx_reg, G_STRUCT_OFFSET (MonoContext, fregs));
+ ARM_ADD_REG_IMM8 (code, ARMREG_IP, ctx_reg, MONO_STRUCT_OFFSET (MonoContext, fregs));
ARM_FLDMD (code, ARM_VFP_D0, 16, ARMREG_IP);
}
/* move pc to PC */
- ARM_LDR_IMM (code, ARMREG_IP, ctx_reg, G_STRUCT_OFFSET (MonoContext, pc));
- ARM_STR_IMM (code, ARMREG_IP, ctx_reg, G_STRUCT_OFFSET (MonoContext, regs) + (ARMREG_PC * sizeof (mgreg_t)));
+ ARM_LDR_IMM (code, ARMREG_IP, ctx_reg, MONO_STRUCT_OFFSET (MonoContext, pc));
+ ARM_STR_IMM (code, ARMREG_IP, ctx_reg, MONO_STRUCT_OFFSET (MonoContext, regs) + (ARMREG_PC * sizeof (mgreg_t)));
/* restore everything */
- ARM_ADD_REG_IMM8 (code, ARMREG_IP, ctx_reg, G_STRUCT_OFFSET(MonoContext, regs));
+ ARM_ADD_REG_IMM8 (code, ARMREG_IP, ctx_reg, MONO_STRUCT_OFFSET(MonoContext, regs));
ARM_LDM (code, ARMREG_IP, 0xffff);
/* never reached */
/* restore all the regs from ctx (in r0), but not sp, the stack pointer */
ctx_reg = ARMREG_R0;
- ARM_LDR_IMM (code, ARMREG_IP, ctx_reg, G_STRUCT_OFFSET (MonoContext, pc));
- ARM_ADD_REG_IMM8 (code, ARMREG_LR, ctx_reg, G_STRUCT_OFFSET(MonoContext, regs) + (MONO_ARM_FIRST_SAVED_REG * sizeof (mgreg_t)));
+ ARM_LDR_IMM (code, ARMREG_IP, ctx_reg, MONO_STRUCT_OFFSET (MonoContext, pc));
+ ARM_ADD_REG_IMM8 (code, ARMREG_LR, ctx_reg, MONO_STRUCT_OFFSET(MonoContext, regs) + (MONO_ARM_FIRST_SAVED_REG * sizeof (mgreg_t)));
ARM_LDM (code, ARMREG_LR, MONO_ARM_REGSAVE_MASK);
/* call handler at eip (r1) and set the first arg with the exception (r2) */
ARM_MOV_REG_REG (code, ARMREG_R0, ARMREG_R2);
mono_unwind_frame (unwind_info, unwind_info_len, ji->code_start,
(guint8*)ji->code_start + ji->code_size,
- ip, regs, MONO_MAX_IREGS + 8,
+ ip, NULL, regs, MONO_MAX_IREGS + 8,
save_locations, MONO_MAX_IREGS, &cfa);
for (i = 0; i < 16; ++i)
mono_unwind_frame (unwind_info, unwind_info_len, ji->code_start,
(guint8*)ji->code_start + ji->code_size,
- ip, regs, MONO_MAX_IREGS,
+ ip, NULL, regs, MONO_MAX_IREGS,
save_locations, MONO_MAX_IREGS, &cfa);
for (i = 0; i < MONO_MAX_IREGS; ++i)
mono_unwind_frame (unwind_info, unwind_info_len, ji->code_start,
(guint8*)ji->code_start + ji->code_size,
- ip, regs, ppc_lr + 1,
+ ip, NULL, regs, ppc_lr + 1,
save_locations, MONO_MAX_IREGS, &cfa);
/* we substract 4, so that the IP points into the call instruction */
memcpy(®s, &ctx->uc_mcontext.gregs, sizeof(regs));
mono_unwind_frame (unwind_info, unwind_info_len, ji->code_start,
- (guint8 *) ji->code_start + ji->code_size,
- ip, regs, 16, save_locations,
- MONO_MAX_IREGS, &cfa);
+ (guint8 *) ji->code_start + ji->code_size,
+ ip, NULL, regs, 16, save_locations,
+ MONO_MAX_IREGS, &cfa);
memcpy (&new_ctx->uc_mcontext.gregs, ®s, sizeof(regs));
MONO_CONTEXT_SET_IP(new_ctx, regs[14] - 2);
MONO_CONTEXT_SET_BP(new_ctx, cfa);
#include <signal.h>
#include <string.h>
+#include <mono/metadata/abi-details.h>
#include <mono/arch/x86/x86-codegen.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/tabledefs.h>
x86_mov_reg_reg (code, X86_EDI, X86_ESP, 4);
/* use the new freed stack from sigcontext */
+ /* XXX replace usage of struct sigcontext with MonoContext so we can use MONO_STRUCT_OFFSET */
x86_mov_reg_membase (code, X86_ESP, X86_EBX, G_STRUCT_OFFSET (struct sigcontext, esp), 4);
/* get the current domain */
x86_call_code (code, mono_domain_get);
/* get stack overflow exception from domain object */
- x86_mov_reg_membase (code, X86_EAX, X86_EAX, G_STRUCT_OFFSET (MonoDomain, stack_overflow_ex), 4);
+ x86_mov_reg_membase (code, X86_EAX, X86_EAX, MONO_STRUCT_OFFSET (MonoDomain, stack_overflow_ex), 4);
/* call mono_arch_handle_exception (sctx, stack_overflow_exception_obj) */
x86_push_reg (code, X86_EAX);
x86_mov_reg_membase (code, X86_EAX, X86_ESP, 4, 4);
/* restore EBX */
- x86_mov_reg_membase (code, X86_EBX, X86_EAX, G_STRUCT_OFFSET (MonoContext, ebx), 4);
+ x86_mov_reg_membase (code, X86_EBX, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, ebx), 4);
/* restore EDI */
- x86_mov_reg_membase (code, X86_EDI, X86_EAX, G_STRUCT_OFFSET (MonoContext, edi), 4);
+ x86_mov_reg_membase (code, X86_EDI, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, edi), 4);
/* restore ESI */
- x86_mov_reg_membase (code, X86_ESI, X86_EAX, G_STRUCT_OFFSET (MonoContext, esi), 4);
+ x86_mov_reg_membase (code, X86_ESI, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, esi), 4);
/* restore EDX */
- x86_mov_reg_membase (code, X86_EDX, X86_EAX, G_STRUCT_OFFSET (MonoContext, edx), 4);
+ x86_mov_reg_membase (code, X86_EDX, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, edx), 4);
/*
* The context resides on the stack, in the stack frame of the
*/
/* load ESP into EBP */
- x86_mov_reg_membase (code, X86_EBP, X86_EAX, G_STRUCT_OFFSET (MonoContext, esp), 4);
+ x86_mov_reg_membase (code, X86_EBP, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, esp), 4);
/* load return address into ECX */
- x86_mov_reg_membase (code, X86_ECX, X86_EAX, G_STRUCT_OFFSET (MonoContext, eip), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, eip), 4);
/* save the return addr to the restored stack - 4 */
x86_mov_membase_reg (code, X86_EBP, -4, X86_ECX, 4);
/* load EBP into ECX */
- x86_mov_reg_membase (code, X86_ECX, X86_EAX, G_STRUCT_OFFSET (MonoContext, ebp), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, ebp), 4);
/* save EBP to the restored stack - 8 */
x86_mov_membase_reg (code, X86_EBP, -8, X86_ECX, 4);
/* load EAX into ECX */
- x86_mov_reg_membase (code, X86_ECX, X86_EAX, G_STRUCT_OFFSET (MonoContext, eax), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, eax), 4);
/* save EAX to the restored stack - 12 */
x86_mov_membase_reg (code, X86_EBP, -12, X86_ECX, 4);
/* restore ECX */
- x86_mov_reg_membase (code, X86_ECX, X86_EAX, G_STRUCT_OFFSET (MonoContext, ecx), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, ecx), 4);
/* restore ESP - 12 */
x86_lea_membase (code, X86_ESP, X86_EBP, -12);
x86_push_reg (code, X86_EBP);
/* set new EBP */
- x86_mov_reg_membase (code, X86_EBP, X86_EAX, G_STRUCT_OFFSET (MonoContext, ebp), 4);
+ x86_mov_reg_membase (code, X86_EBP, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, ebp), 4);
/* restore registers used by global register allocation (EBX & ESI) */
- x86_mov_reg_membase (code, X86_EBX, X86_EAX, G_STRUCT_OFFSET (MonoContext, ebx), 4);
- x86_mov_reg_membase (code, X86_ESI, X86_EAX, G_STRUCT_OFFSET (MonoContext, esi), 4);
- x86_mov_reg_membase (code, X86_EDI, X86_EAX, G_STRUCT_OFFSET (MonoContext, edi), 4);
+ x86_mov_reg_membase (code, X86_EBX, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, ebx), 4);
+ x86_mov_reg_membase (code, X86_ESI, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, esi), 4);
+ x86_mov_reg_membase (code, X86_EDI, X86_EAX, MONO_STRUCT_OFFSET (MonoContext, edi), 4);
/* align stack and save ESP */
x86_mov_reg_reg (code, X86_EDX, X86_ESP, 4);
mono_unwind_frame (unwind_info, unwind_info_len, ji->code_start,
(guint8*)ji->code_start + ji->code_size,
- ip, regs, MONO_MAX_IREGS + 1,
+ ip, NULL, regs, MONO_MAX_IREGS + 1,
save_locations, MONO_MAX_IREGS, &cfa);
new_ctx->eax = regs [X86_EAX];
x86_mov_reg_membase (code, X86_EAX, X86_ESP, 8, 4);
/* setup the copy of the stack */
- x86_mov_reg_membase (code, X86_ECX, X86_EDX, G_STRUCT_OFFSET (MonoContinuation, stack_used_size), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EDX, MONO_STRUCT_OFFSET (MonoContinuation, stack_used_size), 4);
x86_shift_reg_imm (code, X86_SHR, X86_ECX, 2);
x86_cld (code);
- x86_mov_reg_membase (code, X86_ESI, X86_EDX, G_STRUCT_OFFSET (MonoContinuation, saved_stack), 4);
- x86_mov_reg_membase (code, X86_EDI, X86_EDX, G_STRUCT_OFFSET (MonoContinuation, return_sp), 4);
+ x86_mov_reg_membase (code, X86_ESI, X86_EDX, MONO_STRUCT_OFFSET (MonoContinuation, saved_stack), 4);
+ x86_mov_reg_membase (code, X86_EDI, X86_EDX, MONO_STRUCT_OFFSET (MonoContinuation, return_sp), 4);
x86_prefix (code, X86_REP_PREFIX);
x86_movsl (code);
/* now restore the registers from the LMF */
- x86_mov_reg_membase (code, X86_ECX, X86_EDX, G_STRUCT_OFFSET (MonoContinuation, lmf), 4);
- x86_mov_reg_membase (code, X86_EBX, X86_ECX, G_STRUCT_OFFSET (MonoLMF, ebx), 4);
- x86_mov_reg_membase (code, X86_EBP, X86_ECX, G_STRUCT_OFFSET (MonoLMF, ebp), 4);
- x86_mov_reg_membase (code, X86_ESI, X86_ECX, G_STRUCT_OFFSET (MonoLMF, esi), 4);
- x86_mov_reg_membase (code, X86_EDI, X86_ECX, G_STRUCT_OFFSET (MonoLMF, edi), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EDX, MONO_STRUCT_OFFSET (MonoContinuation, lmf), 4);
+ x86_mov_reg_membase (code, X86_EBX, X86_ECX, MONO_STRUCT_OFFSET (MonoLMF, ebx), 4);
+ x86_mov_reg_membase (code, X86_EBP, X86_ECX, MONO_STRUCT_OFFSET (MonoLMF, ebp), 4);
+ x86_mov_reg_membase (code, X86_ESI, X86_ECX, MONO_STRUCT_OFFSET (MonoLMF, esi), 4);
+ x86_mov_reg_membase (code, X86_EDI, X86_ECX, MONO_STRUCT_OFFSET (MonoLMF, edi), 4);
/* restore the lmf chain */
/*x86_mov_reg_membase (code, X86_ECX, X86_ESP, 12, 4);
x86_mov_membase_reg (code, X86_ECX, 0, X86_EDX, 4);*/
- x86_jump_membase (code, X86_EDX, G_STRUCT_OFFSET (MonoContinuation, return_ip));
+ x86_jump_membase (code, X86_EDX, MONO_STRUCT_OFFSET (MonoContinuation, return_ip));
g_assert ((code - start) <= 48);
saved = start;
return (MonoContinuationRestore)saved;
if (!(cfg->opt & MONO_OPT_ABCREM)) { \
MONO_EMIT_NULL_CHECK (cfg, array_reg); \
if (COMPILE_LLVM (cfg)) \
- MONO_EMIT_DEFAULT_BOUNDS_CHECK ((cfg), (array_reg), G_STRUCT_OFFSET (array_type, array_length_field), (index_reg), TRUE); \
+ MONO_EMIT_DEFAULT_BOUNDS_CHECK ((cfg), (array_reg), MONO_STRUCT_OFFSET (array_type, array_length_field), (index_reg), TRUE); \
else \
- MONO_ARCH_EMIT_BOUNDS_CHECK ((cfg), (array_reg), G_STRUCT_OFFSET (array_type, array_length_field), (index_reg)); \
+ MONO_ARCH_EMIT_BOUNDS_CHECK ((cfg), (array_reg), MONO_STRUCT_OFFSET (array_type, array_length_field), (index_reg)); \
} else { \
MonoInst *ins; \
MONO_INST_NEW ((cfg), ins, OP_BOUNDS_CHECK); \
ins->sreg1 = array_reg; \
ins->sreg2 = index_reg; \
- ins->inst_imm = G_STRUCT_OFFSET (array_type, array_length_field); \
+ ins->inst_imm = MONO_STRUCT_OFFSET (array_type, array_length_field); \
ins->flags |= MONO_INST_FAULT; \
MONO_ADD_INS ((cfg)->cbb, ins); \
(cfg)->flags |= MONO_CFG_HAS_ARRAY_ACCESS; \
#endif
#include <mono/utils/memcheck.h>
-
+#include "mini.h"
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/attrdefs.h>
#include <mono/metadata/loader.h>
#include <mono/utils/mono-memory-model.h>
#include <mono/metadata/mono-basic-block.h>
-#include "mini.h"
#include "trace.h"
#include "ir-emit.h"
MONO_API MonoInst* mono_emit_native_call (MonoCompile *cfg, gconstpointer func, MonoMethodSignature *sig, MonoInst **args);
/* helper methods signatures */
-static MonoMethodSignature *helper_sig_class_init_trampoline = NULL;
-static MonoMethodSignature *helper_sig_domain_get = NULL;
-static MonoMethodSignature *helper_sig_generic_class_init_trampoline = NULL;
-static MonoMethodSignature *helper_sig_generic_class_init_trampoline_llvm = NULL;
-static MonoMethodSignature *helper_sig_rgctx_lazy_fetch_trampoline = NULL;
-static MonoMethodSignature *helper_sig_monitor_enter_exit_trampoline = NULL;
-static MonoMethodSignature *helper_sig_monitor_enter_exit_trampoline_llvm = NULL;
+static MonoMethodSignature *helper_sig_class_init_trampoline;
+static MonoMethodSignature *helper_sig_domain_get;
+static MonoMethodSignature *helper_sig_generic_class_init_trampoline;
+static MonoMethodSignature *helper_sig_generic_class_init_trampoline_llvm;
+static MonoMethodSignature *helper_sig_rgctx_lazy_fetch_trampoline;
+static MonoMethodSignature *helper_sig_monitor_enter_exit_trampoline;
+static MonoMethodSignature *helper_sig_monitor_enter_exit_trampoline_llvm;
/*
* Instruction metadata
static void
mini_emit_load_intf_bit_reg_class (MonoCompile *cfg, int intf_bit_reg, int klass_reg, MonoClass *klass)
{
- mini_emit_interface_bitmap_check (cfg, intf_bit_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, interface_bitmap), klass);
+ mini_emit_interface_bitmap_check (cfg, intf_bit_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, interface_bitmap), klass);
}
/*
static void
mini_emit_load_intf_bit_reg_vtable (MonoCompile *cfg, int intf_bit_reg, int vtable_reg, MonoClass *klass)
{
- mini_emit_interface_bitmap_check (cfg, intf_bit_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, interface_bitmap), klass);
+ mini_emit_interface_bitmap_check (cfg, intf_bit_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, interface_bitmap), klass);
}
/*
{
int max_iid_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, max_iid_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, max_interface_id));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, max_iid_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, max_interface_id));
mini_emit_max_iid_check (cfg, max_iid_reg, klass, false_target);
}
{
int max_iid_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, max_iid_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, max_interface_id));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, max_iid_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, max_interface_id));
mini_emit_max_iid_check (cfg, max_iid_reg, klass, false_target);
}
mono_class_setup_supertypes (klass);
if (klass->idepth > MONO_DEFAULT_SUPERTABLE_SIZE) {
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, idepth_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, idepth));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, idepth_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, idepth));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, idepth_reg, klass->idepth);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBLT_UN, false_target);
}
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, stypes_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, supertypes));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, stypes_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, supertypes));
MONO_EMIT_NEW_LOAD_MEMBASE (cfg, stype, stypes_reg, ((klass->idepth - 1) * SIZEOF_VOID_P));
if (klass_ins) {
MONO_EMIT_NEW_BIALU (cfg, OP_COMPARE, -1, stype, klass_ins->dreg);
int eclass_reg = alloc_preg (cfg);
g_assert (!klass_inst);
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, rank_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, rank));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, rank_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, rank));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rank_reg, klass->rank);
MONO_EMIT_NEW_COND_EXC (cfg, NE_UN, "InvalidCastException");
- // MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, eclass_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, cast_class));
+ // MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, eclass_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, cast_class));
if (klass->cast_class == mono_defaults.object_class) {
int parent_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, parent_reg, eclass_reg, G_STRUCT_OFFSET (MonoClass, parent));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, parent_reg, eclass_reg, MONO_STRUCT_OFFSET (MonoClass, parent));
mini_emit_class_check_branch (cfg, parent_reg, mono_defaults.enum_class->parent, OP_PBNE_UN, object_is_null);
mini_emit_class_check (cfg, eclass_reg, mono_defaults.enum_class);
} else if (klass->cast_class == mono_defaults.enum_class->parent) {
if ((klass->rank == 1) && (klass->byval_arg.type == MONO_TYPE_SZARRAY) && (obj_reg != -1)) {
/* Check that the object is a vector too */
int bounds_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, bounds_reg, obj_reg, G_STRUCT_OFFSET (MonoArray, bounds));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, bounds_reg, obj_reg, MONO_STRUCT_OFFSET (MonoArray, bounds));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, bounds_reg, 0);
MONO_EMIT_NEW_COND_EXC (cfg, NE_UN, "InvalidCastException");
}
mono_class_setup_supertypes (klass);
if (klass->idepth > MONO_DEFAULT_SUPERTABLE_SIZE) {
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, idepth_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, idepth));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU2_MEMBASE, idepth_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, idepth));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, idepth_reg, klass->idepth);
MONO_EMIT_NEW_COND_EXC (cfg, LT_UN, "InvalidCastException");
}
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, stypes_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, supertypes));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, stypes_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, supertypes));
MONO_EMIT_NEW_LOAD_MEMBASE (cfg, stype, stypes_reg, ((klass->idepth - 1) * SIZEOF_VOID_P));
mini_emit_class_check_inst (cfg, stype, klass, klass_inst);
}
EMIT_NEW_VARLOADA (cfg, ins, cfg->lmf_var, NULL);
lmf_reg = ins->dreg;
/* Save previous_lmf */
- EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, lmf_reg, G_STRUCT_OFFSET (MonoLMF, previous_lmf), lmf_ins->dreg);
+ EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, lmf_reg, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), lmf_ins->dreg);
/* Set new LMF */
emit_tls_set (cfg, lmf_reg, TLS_KEY_LMF);
} else {
MONO_ADD_INS (cfg->cbb, ins);
lmf_reg = alloc_preg (cfg);
- EMIT_NEW_BIALU_IMM (cfg, lmf_ins, OP_PADD_IMM, lmf_reg, jit_tls_dreg, G_STRUCT_OFFSET (MonoJitTlsData, lmf));
+ EMIT_NEW_BIALU_IMM (cfg, lmf_ins, OP_PADD_IMM, lmf_reg, jit_tls_dreg, MONO_STRUCT_OFFSET (MonoJitTlsData, lmf));
} else {
lmf_ins = mono_emit_jit_icall (cfg, mono_get_lmf_addr, NULL);
}
/* call pthread_getspecific () */
jit_tls_ins = mono_emit_jit_icall (cfg, pthread_getspecific, args);
/* lmf_addr = &jit_tls->lmf */
- EMIT_NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, cfg->lmf_addr_var->dreg, jit_tls_ins->dreg, G_STRUCT_OFFSET (MonoJitTlsData, lmf));
+ EMIT_NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, cfg->lmf_addr_var->dreg, jit_tls_ins->dreg, MONO_STRUCT_OFFSET (MonoJitTlsData, lmf));
lmf_ins = ins;
#else
lmf_ins = mono_emit_jit_icall (cfg, mono_get_lmf_addr, NULL);
prev_lmf_reg = alloc_preg (cfg);
/* Save previous_lmf */
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, prev_lmf_reg, cfg->lmf_addr_var->dreg, 0);
- EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, lmf_reg, G_STRUCT_OFFSET (MonoLMF, previous_lmf), prev_lmf_reg);
+ EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, lmf_reg, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), prev_lmf_reg);
/* Set new lmf */
EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, cfg->lmf_addr_var->dreg, 0, lmf_reg);
}
if (cfg->lmf_ir_mono_lmf && mini_tls_get_supported (cfg, TLS_KEY_LMF)) {
/* Load previous_lmf */
prev_lmf_reg = alloc_preg (cfg);
- EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, prev_lmf_reg, lmf_reg, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, prev_lmf_reg, lmf_reg, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* Set new LMF */
emit_tls_set (cfg, prev_lmf_reg, TLS_KEY_LMF);
} else {
lmf_addr_reg = cfg->lmf_addr_var->dreg;
prev_lmf_reg = alloc_preg (cfg);
- EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, prev_lmf_reg, lmf_reg, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, prev_lmf_reg, lmf_reg, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, lmf_addr_reg, 0, prev_lmf_reg);
}
}
return -1;
}
-#ifdef MONO_ARCH_HAVE_IMT
/* Either METHOD or IMT_ARG needs to be set */
static void
emit_imt_argument (MonoCompile *cfg, MonoCallInst *call, MonoMethod *method, MonoInst *imt_arg)
mono_arch_emit_imt_argument (cfg, call, imt_arg);
#endif
}
-#endif
static MonoJumpInfo *
mono_patch_info_new (MonoMemPool *mp, int ip, MonoJumpInfoType type, gconstpointer target)
/* Make a call to delegate->invoke_impl */
call->inst.inst_basereg = this_reg;
- call->inst.inst_offset = G_STRUCT_OFFSET (MonoDelegate, invoke_impl);
+ call->inst.inst_offset = MONO_STRUCT_OFFSET (MonoDelegate, invoke_impl);
MONO_ADD_INS (cfg->cbb, (MonoInst*)call);
/* We must emit a dummy use here because the delegate trampoline will
call->inst.opcode = callvirt_to_call (call->inst.opcode);
} else {
vtable_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, this_reg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, this_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
if (method->klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
slot_reg = -1;
-#ifdef MONO_ARCH_HAVE_IMT
if (mono_use_imt) {
guint32 imt_slot = mono_method_get_imt_slot (method);
emit_imt_argument (cfg, call, call->method, imt_arg);
slot_reg = vtable_reg;
offset = ((gint32)imt_slot - MONO_IMT_SIZE) * SIZEOF_VOID_P;
}
-#endif
if (slot_reg == -1) {
slot_reg = alloc_preg (cfg);
mini_emit_load_intf_reg_vtable (cfg, slot_reg, vtable_reg, method->klass);
}
} else {
slot_reg = vtable_reg;
- offset = G_STRUCT_OFFSET (MonoVTable, vtable) +
+ offset = MONO_STRUCT_OFFSET (MonoVTable, vtable) +
((mono_method_get_vtable_index (method)) * (SIZEOF_VOID_P));
-#ifdef MONO_ARCH_HAVE_IMT
if (imt_arg) {
g_assert (mono_method_signature (method)->generic_param_count);
emit_imt_argument (cfg, call, call->method, imt_arg);
}
-#endif
}
call->inst.sreg1 = slot_reg;
int vtable_reg;
vtable_reg = alloc_preg (cfg);
- EMIT_NEW_LOAD_MEMBASE (cfg, vtable_var, OP_LOAD_MEMBASE, vtable_reg, mrgctx_var->dreg, G_STRUCT_OFFSET (MonoMethodRuntimeGenericContext, class_vtable));
+ EMIT_NEW_LOAD_MEMBASE (cfg, vtable_var, OP_LOAD_MEMBASE, vtable_reg, mrgctx_var->dreg, MONO_STRUCT_OFFSET (MonoMethodRuntimeGenericContext, class_vtable));
vtable_var->type = STACK_PTR;
}
int vtable_reg;
vtable_reg = alloc_preg (cfg);
- EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, vtable_reg, this->dreg, G_STRUCT_OFFSET (MonoObject, vtable));
+ EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, vtable_reg, this->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable));
return ins;
}
}
idx = get_gsharedvt_info_slot (cfg, data, rgctx_type);
/* Load info->entries [idx] */
dreg = alloc_preg (cfg);
- EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, cfg->gsharedvt_info_var->dreg, G_STRUCT_OFFSET (MonoGSharedVtMethodRuntimeInfo, entries) + (idx * sizeof (gpointer)));
+ EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, cfg->gsharedvt_info_var->dreg, MONO_STRUCT_OFFSET (MonoGSharedVtMethodRuntimeInfo, entries) + (idx * sizeof (gpointer)));
return ins;
}
}
MONO_ADD_INS (cfg->cbb, tls_get);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, tls_get->dreg, G_STRUCT_OFFSET (MonoJitTlsData, class_cast_from), klass_reg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, tls_get->dreg, MONO_STRUCT_OFFSET (MonoJitTlsData, class_cast_from), klass_reg);
MONO_EMIT_NEW_PCONST (cfg, to_klass_reg, klass);
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, tls_get->dreg, G_STRUCT_OFFSET (MonoJitTlsData, class_cast_to), to_klass_reg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, tls_get->dreg, MONO_STRUCT_OFFSET (MonoJitTlsData, class_cast_to), to_klass_reg);
if (null_check) {
MONO_START_BB (cfg, is_null_bb);
MONO_ADD_INS (cfg->cbb, tls_get);
/* It is enough to reset the from field */
- MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STORE_MEMBASE_IMM, tls_get->dreg, G_STRUCT_OFFSET (MonoJitTlsData, class_cast_from), 0);
+ MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STORE_MEMBASE_IMM, tls_get->dreg, MONO_STRUCT_OFFSET (MonoJitTlsData, class_cast_from), 0);
}
}
save_cast_details (cfg, array_class, obj->dreg, FALSE, NULL);
- MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, obj->dreg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, obj->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable));
if (cfg->opt & MONO_OPT_SHARED) {
int class_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, class_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, class_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
if (cfg->compile_aot) {
int klass_reg = alloc_preg (cfg);
MONO_EMIT_NEW_CLASSCONST (cfg, klass_reg, array_class);
int rank_reg = alloc_dreg (cfg ,STACK_I4);
obj_reg = sp [0]->dreg;
- MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, rank_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, rank));
+ MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, rank_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, rank));
/* FIXME: generics */
g_assert (klass->rank == 0);
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rank_reg, 0);
MONO_EMIT_NEW_COND_EXC (cfg, NE_UN, "InvalidCastException");
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, eclass_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, element_class));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, eclass_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, element_class));
if (context_used) {
MonoInst *element_class;
save_cast_details (cfg, klass, obj_reg, FALSE, NULL);
if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
mini_emit_iface_cast (cfg, vtable_reg, klass, NULL, NULL);
} else {
int klass_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
if (!klass->rank && !cfg->compile_aot && !(cfg->opt & MONO_OPT_SHARED) && (klass->flags & TYPE_ATTRIBUTE_SEALED)) {
/* the remoting code is broken, access the class for now */
}
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, vtable_reg, vt);
} else {
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, klass_reg, klass);
}
MONO_EMIT_NEW_COND_EXC (cfg, NE_UN, "InvalidCastException");
} else {
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
mini_emit_castclass_inst (cfg, obj_reg, klass_reg, klass, klass_inst, is_null_bb);
}
}
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, obj_reg, 0);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_IBEQ, is_null_bb);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
g_assert (!context_used);
int eclass_reg = alloc_preg (cfg);
g_assert (!context_used);
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, rank_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, rank));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADU1_MEMBASE, rank_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, rank));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rank_reg, klass->rank);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBNE_UN, false_bb);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, eclass_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, cast_class));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, eclass_reg, klass_reg, MONO_STRUCT_OFFSET (MonoClass, cast_class));
if (klass->cast_class == mono_defaults.object_class) {
int parent_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, parent_reg, eclass_reg, G_STRUCT_OFFSET (MonoClass, parent));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, parent_reg, eclass_reg, MONO_STRUCT_OFFSET (MonoClass, parent));
mini_emit_class_check_branch (cfg, parent_reg, mono_defaults.enum_class->parent, OP_PBNE_UN, is_null_bb);
mini_emit_class_check_branch (cfg, eclass_reg, mono_defaults.enum_class, OP_PBEQ, is_null_bb);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, false_bb);
if ((klass->rank == 1) && (klass->byval_arg.type == MONO_TYPE_SZARRAY)) {
/* Check that the object is a vector too */
int bounds_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, bounds_reg, obj_reg, G_STRUCT_OFFSET (MonoArray, bounds));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, bounds_reg, obj_reg, MONO_STRUCT_OFFSET (MonoArray, bounds));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, bounds_reg, 0);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBNE_UN, false_bb);
}
}
} else if (mono_class_is_nullable (klass)) {
g_assert (!context_used);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
/* the is_null_bb target simply copies the input register to the output */
mini_emit_isninst_cast (cfg, klass_reg, klass->cast_class, false_bb, is_null_bb);
} else {
}
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, vtable_reg, vt);
} else {
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, klass_reg, klass);
}
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBNE_UN, false_bb);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, is_null_bb);
} else {
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
/* the is_null_bb target simply copies the input register to the output */
mini_emit_isninst_cast_inst (cfg, klass_reg, klass, klass_inst, false_bb, is_null_bb);
}
#endif
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
#ifndef DISABLE_REMOTING
mini_emit_iface_cast (cfg, tmp_reg, klass, interface_fail_bb, true_bb);
MONO_START_BB (cfg, interface_fail_bb);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
mini_emit_class_check_branch (cfg, klass_reg, mono_defaults.transparent_proxy_class, OP_PBNE_UN, false_bb);
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, tmp_reg, 0);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBNE_UN, false2_bb);
#else
} else {
#ifndef DISABLE_REMOTING
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
mini_emit_class_check_branch (cfg, klass_reg, mono_defaults.transparent_proxy_class, OP_PBNE_UN, no_proxy_bb);
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoTransparentProxy, remote_class));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, G_STRUCT_OFFSET (MonoRemoteClass, proxy_class));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoTransparentProxy, remote_class));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, MONO_STRUCT_OFFSET (MonoRemoteClass, proxy_class));
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, tmp_reg, 0);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, no_proxy_bb);
#ifndef DISABLE_REMOTING
NEW_BBLOCK (cfg, interface_fail_bb);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
mini_emit_iface_cast (cfg, tmp_reg, klass, interface_fail_bb, ok_result_bb);
MONO_START_BB (cfg, interface_fail_bb);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
mini_emit_class_check (cfg, klass_reg, mono_defaults.transparent_proxy_class);
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, tmp_reg, 0);
MONO_EMIT_NEW_COND_EXC (cfg, EQ, "InvalidCastException");
MONO_EMIT_NEW_ICONST (cfg, dreg, 1);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb);
#else
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
mini_emit_iface_cast (cfg, tmp_reg, klass, NULL, NULL);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, ok_result_bb);
#endif
#ifndef DISABLE_REMOTING
NEW_BBLOCK (cfg, no_proxy_bb);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, G_STRUCT_OFFSET (MonoVTable, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, MONO_STRUCT_OFFSET (MonoVTable, klass));
mini_emit_class_check_branch (cfg, klass_reg, mono_defaults.transparent_proxy_class, OP_PBNE_UN, no_proxy_bb);
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoTransparentProxy, remote_class));
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, G_STRUCT_OFFSET (MonoRemoteClass, proxy_class));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoTransparentProxy, remote_class));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, tmp_reg, MONO_STRUCT_OFFSET (MonoRemoteClass, proxy_class));
tmp_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, G_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, tmp_reg, obj_reg, MONO_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, tmp_reg, 0);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, no_proxy_bb);
/* Set target field */
/* Optimize away setting of NULL target */
if (!(target->opcode == OP_PCONST && target->inst_p0 == 0)) {
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, G_STRUCT_OFFSET (MonoDelegate, target), target->dreg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, MONO_STRUCT_OFFSET (MonoDelegate, target), target->dreg);
if (cfg->gen_write_barriers) {
dreg = alloc_preg (cfg);
- EMIT_NEW_BIALU_IMM (cfg, ptr, OP_PADD_IMM, dreg, obj->dreg, G_STRUCT_OFFSET (MonoDelegate, target));
+ EMIT_NEW_BIALU_IMM (cfg, ptr, OP_PADD_IMM, dreg, obj->dreg, MONO_STRUCT_OFFSET (MonoDelegate, target));
emit_write_barrier (cfg, ptr, target);
}
}
/* Set method field */
method_ins = emit_get_rgctx_method (cfg, context_used, method, MONO_RGCTX_INFO_METHOD);
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, G_STRUCT_OFFSET (MonoDelegate, method), method_ins->dreg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, MONO_STRUCT_OFFSET (MonoDelegate, method), method_ins->dreg);
/*
* To avoid looking up the compiled code belonging to the target method
* in mono_delegate_trampoline (), we allocate a per-domain memory slot to
else
EMIT_NEW_PCONST (cfg, code_slot_ins, code_slot);
}
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, G_STRUCT_OFFSET (MonoDelegate, method_code), code_slot_ins->dreg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, MONO_STRUCT_OFFSET (MonoDelegate, method_code), code_slot_ins->dreg);
}
/* Set invoke_impl field */
trampoline = mono_create_delegate_trampoline_with_method (cfg->domain, klass, context_used ? NULL : method);
EMIT_NEW_PCONST (cfg, tramp_ins, trampoline);
}
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, G_STRUCT_OFFSET (MonoDelegate, invoke_impl), tramp_ins->dreg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, obj->dreg, MONO_STRUCT_OFFSET (MonoDelegate, invoke_impl), tramp_ins->dreg);
/* All the checks which are in mono_delegate_ctor () are done by the delegate trampoline */
if (size == 1 || size == 2 || size == 4 || size == 8) {
static const int fast_log2 [] = { 1, 0, 1, -1, 2, -1, -1, -1, 3 };
- EMIT_NEW_X86_LEA (cfg, ins, array_reg, index2_reg, fast_log2 [size], G_STRUCT_OFFSET (MonoArray, vector));
+ EMIT_NEW_X86_LEA (cfg, ins, array_reg, index2_reg, fast_log2 [size], MONO_STRUCT_OFFSET (MonoArray, vector));
ins->klass = mono_class_get_element_class (klass);
ins->type = STACK_MP;
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_MUL_IMM, mult_reg, index2_reg, size);
}
MONO_EMIT_NEW_BIALU (cfg, OP_PADD, add_reg, array_reg, mult_reg);
- NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, add_reg, add_reg, G_STRUCT_OFFSET (MonoArray, vector));
+ NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, add_reg, add_reg, MONO_STRUCT_OFFSET (MonoArray, vector));
ins->klass = mono_class_get_element_class (klass);
ins->type = STACK_MP;
MONO_ADD_INS (cfg->cbb, ins);
/* range checking */
MONO_EMIT_NEW_LOAD_MEMBASE (cfg, bounds_reg,
- arr->dreg, G_STRUCT_OFFSET (MonoArray, bounds));
+ arr->dreg, MONO_STRUCT_OFFSET (MonoArray, bounds));
MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, low1_reg,
- bounds_reg, G_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
+ bounds_reg, MONO_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
MONO_EMIT_NEW_BIALU (cfg, OP_PSUB, realidx1_reg, index1, low1_reg);
MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, high1_reg,
- bounds_reg, G_STRUCT_OFFSET (MonoArrayBounds, length));
+ bounds_reg, MONO_STRUCT_OFFSET (MonoArrayBounds, length));
MONO_EMIT_NEW_BIALU (cfg, OP_COMPARE, -1, high1_reg, realidx1_reg);
MONO_EMIT_NEW_COND_EXC (cfg, LE_UN, "IndexOutOfRangeException");
MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, low2_reg,
- bounds_reg, sizeof (MonoArrayBounds) + G_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
+ bounds_reg, sizeof (MonoArrayBounds) + MONO_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
MONO_EMIT_NEW_BIALU (cfg, OP_PSUB, realidx2_reg, index2, low2_reg);
MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, high2_reg,
- bounds_reg, sizeof (MonoArrayBounds) + G_STRUCT_OFFSET (MonoArrayBounds, length));
+ bounds_reg, sizeof (MonoArrayBounds) + MONO_STRUCT_OFFSET (MonoArrayBounds, length));
MONO_EMIT_NEW_BIALU (cfg, OP_COMPARE, -1, high2_reg, realidx2_reg);
MONO_EMIT_NEW_COND_EXC (cfg, LE_UN, "IndexOutOfRangeException");
MONO_EMIT_NEW_BIALU (cfg, OP_PADD, sum_reg, mult_reg, realidx2_reg);
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_PMUL_IMM, mult2_reg, sum_reg, size);
MONO_EMIT_NEW_BIALU (cfg, OP_PADD, add_reg, mult2_reg, arr->dreg);
- NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, add_reg, add_reg, G_STRUCT_OFFSET (MonoArray, vector));
+ NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, add_reg, add_reg, MONO_STRUCT_OFFSET (MonoArray, vector));
ins->type = STACK_MP;
ins->klass = klass;
} else if (sp [1]->opcode == OP_ICONST) {
int array_reg = sp [0]->dreg;
int index_reg = sp [1]->dreg;
- int offset = (mono_class_array_element_size (klass) * sp [1]->inst_c0) + G_STRUCT_OFFSET (MonoArray, vector);
+ int offset = (mono_class_array_element_size (klass) * sp [1]->inst_c0) + MONO_STRUCT_OFFSET (MonoArray, vector);
if (safety_checks)
MONO_EMIT_BOUNDS_CHECK (cfg, array_reg, MonoArray, max_length, index_reg);
MONO_EMIT_BOUNDS_CHECK (cfg, args [0]->dreg, MonoString, length, index_reg);
#if defined(TARGET_X86) || defined(TARGET_AMD64)
- EMIT_NEW_X86_LEA (cfg, ins, args [0]->dreg, index_reg, 1, G_STRUCT_OFFSET (MonoString, chars));
+ EMIT_NEW_X86_LEA (cfg, ins, args [0]->dreg, index_reg, 1, MONO_STRUCT_OFFSET (MonoString, chars));
add_reg = ins->dreg;
/* Avoid a warning */
mult_reg = 0;
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SHL_IMM, mult_reg, index_reg, 1);
MONO_EMIT_NEW_BIALU (cfg, OP_PADD, add_reg, mult_reg, args [0]->dreg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADU2_MEMBASE, dreg,
- add_reg, G_STRUCT_OFFSET (MonoString, chars));
+ add_reg, MONO_STRUCT_OFFSET (MonoString, chars));
#endif
type_from_op (ins, NULL, NULL);
return ins;
/* The corlib functions check for oob already. */
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SHL_IMM, mult_reg, args [1]->dreg, 1);
MONO_EMIT_NEW_BIALU (cfg, OP_PADD, add_reg, mult_reg, args [0]->dreg);
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI2_MEMBASE_REG, add_reg, G_STRUCT_OFFSET (MonoString, chars), args [2]->dreg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI2_MEMBASE_REG, add_reg, MONO_STRUCT_OFFSET (MonoString, chars), args [2]->dreg);
return cfg->cbb->last_ins;
} else
return NULL;
if (strcmp (cmethod->name, "GetType") == 0) {
int dreg = alloc_ireg_ref (cfg);
int vt_reg = alloc_preg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vt_reg, args [0]->dreg, G_STRUCT_OFFSET (MonoObject, vtable));
- EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, vt_reg, G_STRUCT_OFFSET (MonoVTable, type));
+ MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vt_reg, args [0]->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable));
+ EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, vt_reg, MONO_STRUCT_OFFSET (MonoVTable, type));
type_from_op (ins, NULL, NULL);
return ins;
NEW_BBLOCK (cfg, szarray_bb);
EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, ins, OP_LOAD_MEMBASE, bounds_reg,
- args [0]->dreg, G_STRUCT_OFFSET (MonoArray, bounds));
+ args [0]->dreg, MONO_STRUCT_OFFSET (MonoArray, bounds));
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, bounds_reg, 0);
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_IBEQ, szarray_bb);
/* Non-szarray case */
if (get_length)
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADI4_MEMBASE, dreg,
- bounds_reg, G_STRUCT_OFFSET (MonoArrayBounds, length));
+ bounds_reg, MONO_STRUCT_OFFSET (MonoArrayBounds, length));
else
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADI4_MEMBASE, dreg,
- bounds_reg, G_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
+ bounds_reg, MONO_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb);
MONO_START_BB (cfg, szarray_bb);
/* Szarray case */
if (get_length)
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADI4_MEMBASE, dreg,
- args [0]->dreg, G_STRUCT_OFFSET (MonoArray, max_length));
+ args [0]->dreg, MONO_STRUCT_OFFSET (MonoArray, max_length));
else
MONO_EMIT_NEW_ICONST (cfg, dreg, 0);
MONO_START_BB (cfg, end_bb);
int dreg = alloc_ireg (cfg);
int vtable_reg = alloc_preg (cfg);
MONO_EMIT_NEW_LOAD_MEMBASE_OP_FAULT (cfg, OP_LOAD_MEMBASE, vtable_reg,
- args [0]->dreg, G_STRUCT_OFFSET (MonoObject, vtable));
+ args [0]->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable));
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADU1_MEMBASE, dreg,
- vtable_reg, G_STRUCT_OFFSET (MonoVTable, rank));
+ vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, rank));
type_from_op (ins, NULL, NULL);
return ins;
int dreg = alloc_ireg (cfg);
EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, ins, OP_LOADI4_MEMBASE, dreg,
- args [0]->dreg, G_STRUCT_OFFSET (MonoArray, max_length));
+ args [0]->dreg, MONO_STRUCT_OFFSET (MonoArray, max_length));
type_from_op (ins, NULL, NULL);
return ins;
} else if (cmethod->klass == runtime_helpers_class) {
if (strcmp (cmethod->name, "get_OffsetToStringData") == 0) {
- EMIT_NEW_ICONST (cfg, ins, G_STRUCT_OFFSET (MonoString, chars));
+ EMIT_NEW_ICONST (cfg, ins, MONO_STRUCT_OFFSET (MonoString, chars));
return ins;
} else
return NULL;
}
#endif
-#ifdef MONO_ARCH_HAVE_ATOMIC_ADD
if (strcmp (cmethod->name, "Increment") == 0) {
MonoInst *ins_iconst;
guint32 opcode = 0;
if (fsig->params [0]->type == MONO_TYPE_I4) {
- opcode = OP_ATOMIC_ADD_NEW_I4;
- cfg->has_atomic_add_new_i4 = TRUE;
+ opcode = OP_ATOMIC_ADD_I4;
+ cfg->has_atomic_add_i4 = TRUE;
}
#if SIZEOF_REGISTER == 8
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_NEW_I8;
+ opcode = OP_ATOMIC_ADD_I8;
#endif
if (opcode) {
if (!mono_arch_opcode_supported (opcode))
ins->inst_basereg = args [0]->dreg;
ins->inst_offset = 0;
ins->sreg2 = ins_iconst->dreg;
- ins->type = (opcode == OP_ATOMIC_ADD_NEW_I4) ? STACK_I4 : STACK_I8;
+ ins->type = (opcode == OP_ATOMIC_ADD_I4) ? STACK_I4 : STACK_I8;
MONO_ADD_INS (cfg->cbb, ins);
}
} else if (strcmp (cmethod->name, "Decrement") == 0) {
guint32 opcode = 0;
if (fsig->params [0]->type == MONO_TYPE_I4) {
- opcode = OP_ATOMIC_ADD_NEW_I4;
- cfg->has_atomic_add_new_i4 = TRUE;
+ opcode = OP_ATOMIC_ADD_I4;
+ cfg->has_atomic_add_i4 = TRUE;
}
#if SIZEOF_REGISTER == 8
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_NEW_I8;
+ opcode = OP_ATOMIC_ADD_I8;
#endif
if (opcode) {
if (!mono_arch_opcode_supported (opcode))
ins->inst_basereg = args [0]->dreg;
ins->inst_offset = 0;
ins->sreg2 = ins_iconst->dreg;
- ins->type = (opcode == OP_ATOMIC_ADD_NEW_I4) ? STACK_I4 : STACK_I8;
+ ins->type = (opcode == OP_ATOMIC_ADD_I4) ? STACK_I4 : STACK_I8;
MONO_ADD_INS (cfg->cbb, ins);
}
} else if (strcmp (cmethod->name, "Add") == 0) {
guint32 opcode = 0;
if (fsig->params [0]->type == MONO_TYPE_I4) {
- opcode = OP_ATOMIC_ADD_NEW_I4;
- cfg->has_atomic_add_new_i4 = TRUE;
+ opcode = OP_ATOMIC_ADD_I4;
+ cfg->has_atomic_add_i4 = TRUE;
}
#if SIZEOF_REGISTER == 8
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_NEW_I8;
+ opcode = OP_ATOMIC_ADD_I8;
#endif
if (opcode) {
if (!mono_arch_opcode_supported (opcode))
ins->inst_basereg = args [0]->dreg;
ins->inst_offset = 0;
ins->sreg2 = args [1]->dreg;
- ins->type = (opcode == OP_ATOMIC_ADD_NEW_I4) ? STACK_I4 : STACK_I8;
+ ins->type = (opcode == OP_ATOMIC_ADD_I4) ? STACK_I4 : STACK_I8;
MONO_ADD_INS (cfg->cbb, ins);
}
}
-#endif /* MONO_ARCH_HAVE_ATOMIC_ADD */
-#ifdef MONO_ARCH_HAVE_ATOMIC_EXCHANGE
if (strcmp (cmethod->name, "Exchange") == 0) {
guint32 opcode;
gboolean is_ref = fsig->params [0]->type == MONO_TYPE_OBJECT;
if (cfg->gen_write_barriers && is_ref)
emit_write_barrier (cfg, args [0], args [1]);
}
-#endif /* MONO_ARCH_HAVE_ATOMIC_EXCHANGE */
-
-#ifdef MONO_ARCH_HAVE_ATOMIC_CAS
+
if ((strcmp (cmethod->name, "CompareExchange") == 0)) {
int size = 0;
gboolean is_ref = mini_type_is_reference (cfg, fsig->params [1]);
if (cfg->gen_write_barriers && is_ref)
emit_write_barrier (cfg, args [0], args [1]);
}
-#endif /* MONO_ARCH_HAVE_ATOMIC_CAS */
if (strcmp (cmethod->name, "MemoryBarrier") == 0)
ins = emit_memory_barrier (cfg, FullBarrier);
// idx = (offset >> 24) - 1;
// return ((char*) thread->static_data [idx]) + (offset & 0xffffff);
static_data_reg = alloc_ireg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, static_data_reg, thread_ins->dreg, G_STRUCT_OFFSET (MonoInternalThread, static_data));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, static_data_reg, thread_ins->dreg, MONO_STRUCT_OFFSET (MonoInternalThread, static_data));
idx_reg = alloc_ireg (cfg);
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ISHR_IMM, idx_reg, offset_reg, 24);
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ISUB_IMM, idx_reg, idx_reg, 1);
cfg->gsharedvt_locals_var = locals_var;
dreg = alloc_ireg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, dreg, var->dreg, G_STRUCT_OFFSET (MonoGSharedVtMethodRuntimeInfo, locals_size));
+ MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, dreg, var->dreg, MONO_STRUCT_OFFSET (MonoGSharedVtMethodRuntimeInfo, locals_size));
MONO_INST_NEW (cfg, ins, OP_LOCALLOC);
ins->dreg = locals_var->dreg;
// return ((char*) thread->static_data [idx]) + (offset & 0xffffff);
MONO_ADD_INS (cfg->cbb, thread_ins);
static_data_reg = alloc_ireg (cfg);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, static_data_reg, thread_ins->dreg, G_STRUCT_OFFSET (MonoInternalThread, static_data));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, static_data_reg, thread_ins->dreg, MONO_STRUCT_OFFSET (MonoInternalThread, static_data));
if (cfg->compile_aot) {
int offset_reg, offset2_reg, idx_reg;
MonoInst *iargs [3];
int add_reg = alloc_ireg_mp (cfg);
- EMIT_NEW_BIALU_IMM (cfg, iargs [0], OP_PADD_IMM, add_reg, ins->dreg, G_STRUCT_OFFSET (MonoArray, vector));
+ EMIT_NEW_BIALU_IMM (cfg, iargs [0], OP_PADD_IMM, add_reg, ins->dreg, MONO_STRUCT_OFFSET (MonoArray, vector));
if (cfg->compile_aot) {
EMIT_NEW_AOTCONST_TOKEN (cfg, iargs [1], MONO_PATCH_INFO_RVA, method->klass->image, GPOINTER_TO_UINT(field_token), STACK_PTR, NULL);
} else {
} else if (sp [1]->opcode == OP_ICONST) {
int array_reg = sp [0]->dreg;
int index_reg = sp [1]->dreg;
- int offset = (mono_class_array_element_size (klass) * sp [1]->inst_c0) + G_STRUCT_OFFSET (MonoArray, vector);
+ int offset = (mono_class_array_element_size (klass) * sp [1]->inst_c0) + MONO_STRUCT_OFFSET (MonoArray, vector);
MONO_EMIT_BOUNDS_CHECK (cfg, array_reg, MonoArray, max_length, index_reg);
EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &klass->byval_arg, array_reg, offset);
if (!src_var)
src_var = mono_compile_create_var_for_vreg (cfg, &mono_defaults.typed_reference_class->byval_arg, OP_LOCAL, sp [0]->dreg);
EMIT_NEW_VARLOADA (cfg, src, src_var, src_var->inst_vtype);
- MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, src->dreg, G_STRUCT_OFFSET (MonoTypedRef, klass));
+ MONO_EMIT_NEW_LOAD_MEMBASE (cfg, klass_reg, src->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, klass));
if (context_used) {
MonoInst *klass_ins;
} else {
mini_emit_class_check (cfg, klass_reg, klass);
}
- EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, src->dreg, G_STRUCT_OFFSET (MonoTypedRef, value));
+ EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, src->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, value));
ins->type = STACK_MP;
*sp++ = ins;
ip += 5;
int type_reg = alloc_preg (cfg);
const_ins = emit_get_rgctx_klass (cfg, context_used, klass, MONO_RGCTX_INFO_KLASS);
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, G_STRUCT_OFFSET (MonoTypedRef, klass), const_ins->dreg);
- MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ADD_IMM, type_reg, const_ins->dreg, G_STRUCT_OFFSET (MonoClass, byval_arg));
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, G_STRUCT_OFFSET (MonoTypedRef, type), type_reg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, klass), const_ins->dreg);
+ MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ADD_IMM, type_reg, const_ins->dreg, MONO_STRUCT_OFFSET (MonoClass, byval_arg));
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, type), type_reg);
} else if (cfg->compile_aot) {
int const_reg = alloc_preg (cfg);
int type_reg = alloc_preg (cfg);
MONO_EMIT_NEW_CLASSCONST (cfg, const_reg, klass);
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, G_STRUCT_OFFSET (MonoTypedRef, klass), const_reg);
- MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ADD_IMM, type_reg, const_reg, G_STRUCT_OFFSET (MonoClass, byval_arg));
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, G_STRUCT_OFFSET (MonoTypedRef, type), type_reg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, klass), const_reg);
+ MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ADD_IMM, type_reg, const_reg, MONO_STRUCT_OFFSET (MonoClass, byval_arg));
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, type), type_reg);
} else {
- MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STOREP_MEMBASE_IMM, addr->dreg, G_STRUCT_OFFSET (MonoTypedRef, type), &klass->byval_arg);
- MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STOREP_MEMBASE_IMM, addr->dreg, G_STRUCT_OFFSET (MonoTypedRef, klass), klass);
+ MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STOREP_MEMBASE_IMM, addr->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, type), &klass->byval_arg);
+ MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STOREP_MEMBASE_IMM, addr->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, klass), klass);
}
- MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, G_STRUCT_OFFSET (MonoTypedRef, value), sp [0]->dreg);
+ MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREP_MEMBASE_REG, addr->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, value), sp [0]->dreg);
EMIT_NEW_TEMPLOAD (cfg, ins, loc->inst_c0);
ins->type = STACK_VTYPE;
if (!src_var)
src_var = mono_compile_create_var_for_vreg (cfg, &mono_defaults.typed_reference_class->byval_arg, OP_LOCAL, sp [0]->dreg);
EMIT_NEW_VARLOADA (cfg, src, src_var, src_var->inst_vtype);
- EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &mono_defaults.typehandle_class->byval_arg, src->dreg, G_STRUCT_OFFSET (MonoTypedRef, type));
+ EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &mono_defaults.typehandle_class->byval_arg, src->dreg, MONO_STRUCT_OFFSET (MonoTypedRef, type));
*sp++ = ins;
ip += 2;
break;
g_assert_not_reached ();
}
reg2 = alloc_ireg (cfg);
- NEW_LOAD_MEMBASE (cfg, load2, OP_LOADI4_MEMBASE, reg2, reg1, G_STRUCT_OFFSET (MonoGSharedVtMethodRuntimeInfo, entries) + (idx * sizeof (gpointer)));
+ NEW_LOAD_MEMBASE (cfg, load2, OP_LOADI4_MEMBASE, reg2, reg1, MONO_STRUCT_OFFSET (MonoGSharedVtMethodRuntimeInfo, entries) + (idx * sizeof (gpointer)));
/* Load the locals area address */
reg3 = alloc_ireg (cfg);
if (locals_var->opcode == OP_REGOFFSET) {
#include <unistd.h>
#endif
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/threads.h>
MonoBreakpointInfo
mono_breakpoint_info [MONO_BREAKPOINT_ARRAY_SIZE];
-/* Structure used by the sequence points in AOTed code */
-typedef struct {
- gpointer ss_trigger_page;
- gpointer bp_trigger_page;
- gpointer bp_addrs [MONO_ZERO_LEN_ARRAY];
-} SeqPointInfo;
-
/*
* The code generated for sequence points reads from this location, which is
* made read-only when single stepping is enabled.
#define DEBUG(a) if (cfg->verbose_level > 1) a
#ifdef HOST_WIN32
-#define PARAM_REGS 4
-
static AMD64_Reg_No param_regs [] = { AMD64_RCX, AMD64_RDX, AMD64_R8, AMD64_R9 };
static AMD64_Reg_No return_regs [] = { AMD64_RAX, AMD64_RDX };
#else
-#define PARAM_REGS 6
-
static AMD64_Reg_No param_regs [] = { AMD64_RDI, AMD64_RSI, AMD64_RDX, AMD64_RCX, AMD64_R8, AMD64_R9 };
static AMD64_Reg_No return_regs [] = { AMD64_RAX, AMD64_RDX };
CallInfo *cinfo;
} ArchDynCallInfo;
-typedef struct {
- mgreg_t regs [PARAM_REGS];
- mgreg_t res;
- guint8 *ret;
-} DynCallArgs;
-
static gboolean
dyn_call_supported (MonoMethodSignature *sig, CallInfo *cinfo)
{
* sp is saved right before calls but we need to save it here too so
* async stack walks would work.
*/
- amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rsp), AMD64_RSP, 8);
+ amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rsp), AMD64_RSP, 8);
/* Save rbp */
- amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rbp), AMD64_RBP, 8);
+ amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rbp), AMD64_RBP, 8);
if (cfg->arch.omit_fp && cfa_offset != -1)
- mono_emit_unwind_op_offset (cfg, code, AMD64_RBP, - (cfa_offset - (lmf_offset + G_STRUCT_OFFSET (MonoLMF, rbp))));
+ mono_emit_unwind_op_offset (cfg, code, AMD64_RBP, - (cfa_offset - (lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rbp))));
/* These can't contain refs */
- mini_gc_set_slot_type_from_fp (cfg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), SLOT_NOREF);
+ mini_gc_set_slot_type_from_fp (cfg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), SLOT_NOREF);
#ifdef HOST_WIN32
- mini_gc_set_slot_type_from_fp (cfg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, lmf_addr), SLOT_NOREF);
+ mini_gc_set_slot_type_from_fp (cfg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, lmf_addr), SLOT_NOREF);
#endif
- mini_gc_set_slot_type_from_fp (cfg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rip), SLOT_NOREF);
- mini_gc_set_slot_type_from_fp (cfg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rsp), SLOT_NOREF);
+ mini_gc_set_slot_type_from_fp (cfg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rip), SLOT_NOREF);
+ mini_gc_set_slot_type_from_fp (cfg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rsp), SLOT_NOREF);
/* These are handled automatically by the stack marking code */
- mini_gc_set_slot_type_from_fp (cfg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rbp), SLOT_NOREF);
+ mini_gc_set_slot_type_from_fp (cfg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rbp), SLOT_NOREF);
return code;
}
{
if (jit_tls_offset != -1) {
code = mono_amd64_emit_tls_get (code, AMD64_RAX, jit_tls_offset);
- amd64_alu_reg_imm (code, X86_ADD, AMD64_RAX, G_STRUCT_OFFSET (MonoJitTlsData, lmf));
+ amd64_alu_reg_imm (code, X86_ADD, AMD64_RAX, MONO_STRUCT_OFFSET (MonoJitTlsData, lmf));
} else {
/*
* The call might clobber argument registers, but they are already
}
/* Save lmf_addr */
- amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, lmf_addr), AMD64_RAX, sizeof(gpointer));
+ amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, lmf_addr), AMD64_RAX, sizeof(gpointer));
/* Save previous_lmf */
amd64_mov_reg_membase (code, AMD64_R11, AMD64_RAX, 0, sizeof(gpointer));
- amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), AMD64_R11, sizeof(gpointer));
+ amd64_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), AMD64_R11, sizeof(gpointer));
/* Set new lmf */
amd64_lea_membase (code, AMD64_R11, cfg->frame_reg, lmf_offset);
amd64_mov_membase_reg (code, AMD64_RAX, 0, AMD64_R11, sizeof(gpointer));
emit_pop_lmf (MonoCompile *cfg, guint8 *code, gint32 lmf_offset)
{
/* Restore previous lmf */
- amd64_mov_reg_membase (code, AMD64_RCX, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), sizeof(gpointer));
- amd64_mov_reg_membase (code, AMD64_R11, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, lmf_addr), sizeof(gpointer));
+ amd64_mov_reg_membase (code, AMD64_RCX, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), sizeof(gpointer));
+ amd64_mov_reg_membase (code, AMD64_R11, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, lmf_addr), sizeof(gpointer));
amd64_mov_membase_reg (code, AMD64_R11, 0, AMD64_RCX, sizeof(gpointer));
return code;
/* Load info var */
amd64_mov_reg_membase (code, AMD64_R11, info_var->inst_basereg, info_var->inst_offset, 8);
- val = ((offset) * sizeof (guint8*)) + G_STRUCT_OFFSET (SeqPointInfo, bp_addrs);
+ val = ((offset) * sizeof (guint8*)) + MONO_STRUCT_OFFSET (SeqPointInfo, bp_addrs);
/* Load the info->bp_addrs [offset], which is either a valid address or the address of a trigger page */
amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, val, 8);
amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, 0, 8);
/* Save result */
amd64_mov_reg_membase (code, AMD64_R11, var->inst_basereg, var->inst_offset, 8);
- amd64_mov_membase_reg (code, AMD64_R11, G_STRUCT_OFFSET (DynCallArgs, res), AMD64_RAX, 8);
+ amd64_mov_membase_reg (code, AMD64_R11, MONO_STRUCT_OFFSET (DynCallArgs, res), AMD64_RAX, 8);
break;
}
case OP_AMD64_SAVE_SP_TO_LMF: {
MonoInst *lmf_var = cfg->lmf_var;
- amd64_mov_membase_reg (code, lmf_var->inst_basereg, lmf_var->inst_offset + G_STRUCT_OFFSET (MonoLMF, rsp), AMD64_RSP, 8);
+ amd64_mov_membase_reg (code, lmf_var->inst_basereg, lmf_var->inst_offset + MONO_STRUCT_OFFSET (MonoLMF, rsp), AMD64_RSP, 8);
break;
}
case OP_X86_PUSH:
int dreg = ins->dreg;
guint32 size = (ins->opcode == OP_ATOMIC_ADD_I4) ? 4 : 8;
- if (dreg == ins->inst_basereg)
- dreg = AMD64_R11;
-
- if (dreg != ins->sreg2)
- amd64_mov_reg_reg (code, ins->dreg, ins->sreg2, size);
-
- x86_prefix (code, X86_LOCK_PREFIX);
- amd64_xadd_membase_reg (code, ins->inst_basereg, ins->inst_offset, dreg, size);
-
- if (dreg != ins->dreg)
- amd64_mov_reg_reg (code, ins->dreg, dreg, size);
-
- break;
- }
- case OP_ATOMIC_ADD_NEW_I4:
- case OP_ATOMIC_ADD_NEW_I8: {
- int dreg = ins->dreg;
- guint32 size = (ins->opcode == OP_ATOMIC_ADD_NEW_I4) ? 4 : 8;
-
if ((dreg == ins->sreg2) || (dreg == ins->inst_basereg))
dreg = AMD64_R11;
if (cfg->compile_aot) {
amd64_mov_reg_membase (code, AMD64_R11, info_var->inst_basereg, info_var->inst_offset, 8);
- amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, G_STRUCT_OFFSET (SeqPointInfo, ss_trigger_page), 8);
+ amd64_mov_reg_membase (code, AMD64_R11, AMD64_R11, MONO_STRUCT_OFFSET (SeqPointInfo, ss_trigger_page), 8);
} else {
amd64_mov_reg_imm (code, AMD64_R11, (guint64)ss_trigger_page);
}
CallInfo *cinfo;
gint32 lmf_offset = cfg->lmf_var ? ((MonoInst*)cfg->lmf_var)->inst_offset : -1;
gint32 save_area_offset = cfg->arch.reg_save_area_offset;
-
+
max_epilog_size = get_max_epilog_size (cfg);
while (cfg->code_len + max_epilog_size > (cfg->code_size - 16)) {
code = cfg->native_code + cfg->code_len;
+ cfg->has_unwind_info_for_epilog = TRUE;
+
+ /* Mark the start of the epilog */
+ mono_emit_unwind_op_mark_loc (cfg, code, 0);
+
+ /* Save the uwind state which is needed by the out-of-line code */
+ mono_emit_unwind_op_remember_state (cfg, code);
+
if (mono_jit_trace_calls != NULL && mono_trace_eval (method))
code = mono_arch_instrument_epilog (cfg, mono_trace_leave_method, code, TRUE);
#endif
/* check if we need to restore protection of the stack after a stack overflow */
- if (mono_get_jit_tls_offset () != -1) {
+ if (!cfg->compile_aot && mono_get_jit_tls_offset () != -1) {
guint8 *patch;
code = mono_amd64_emit_tls_get (code, AMD64_RCX, mono_get_jit_tls_offset ());
/* we load the value in a separate instruction: this mechanism may be
* used later as a safer way to do thread interruption
*/
- amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RCX, G_STRUCT_OFFSET (MonoJitTlsData, restore_stack_prot), 8);
+ amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RCX, MONO_STRUCT_OFFSET (MonoJitTlsData, restore_stack_prot), 8);
x86_alu_reg_imm (code, X86_CMP, X86_ECX, 0);
patch = code;
x86_branch8 (code, X86_CC_Z, 0, FALSE);
/* FIXME: maybe save the jit tls in the prolog */
}
if (cfg->used_int_regs & (1 << AMD64_RBP)) {
- amd64_mov_reg_membase (code, AMD64_RBP, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rbp), 8);
+ amd64_mov_reg_membase (code, AMD64_RBP, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rbp), 8);
}
}
for (i = 0; i < AMD64_NREG; ++i) {
if (AMD64_IS_CALLEE_SAVED_REG (i) && (cfg->arch.saved_iregs & (1 << i))) {
/* Restore only used_int_regs, not arch.saved_iregs */
- if (cfg->used_int_regs & (1 << i))
+ if (cfg->used_int_regs & (1 << i)) {
amd64_mov_reg_membase (code, i, cfg->frame_reg, save_area_offset, 8);
+ mono_emit_unwind_op_same_value (cfg, code, i);
+ async_exc_point (code);
+ }
save_area_offset += 8;
}
}
}
if (cfg->arch.omit_fp) {
- if (cfg->arch.stack_alloc_size)
+ if (cfg->arch.stack_alloc_size) {
amd64_alu_reg_imm (code, X86_ADD, AMD64_RSP, cfg->arch.stack_alloc_size);
+ }
} else {
amd64_leave (code);
+ mono_emit_unwind_op_same_value (cfg, code, AMD64_RBP);
}
+ mono_emit_unwind_op_def_cfa (cfg, code, AMD64_RSP, 8);
async_exc_point (code);
amd64_ret (code);
+ /* Restore the unwind state to be the same as before the epilog */
+ mono_emit_unwind_op_restore_state (cfg, code);
+
cfg->code_len = code - cfg->native_code;
g_assert (cfg->code_len < cfg->code_size);
/* Replace the this argument with the target */
amd64_mov_reg_reg (code, AMD64_RAX, AMD64_ARG_REG1, 8);
- amd64_mov_reg_membase (code, AMD64_ARG_REG1, AMD64_RAX, G_STRUCT_OFFSET (MonoDelegate, target), 8);
- amd64_jump_membase (code, AMD64_RAX, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ amd64_mov_reg_membase (code, AMD64_ARG_REG1, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 8);
+ amd64_jump_membase (code, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
g_assert ((code - start) < 64);
} else {
start = code = mono_global_codeman_reserve (64);
if (param_count == 0) {
- amd64_jump_membase (code, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ amd64_jump_membase (code, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
} else {
/* We have to shift the arguments left */
amd64_mov_reg_reg (code, AMD64_RAX, AMD64_ARG_REG1, 8);
#endif
}
- amd64_jump_membase (code, AMD64_RAX, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ amd64_jump_membase (code, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
}
g_assert ((code - start) < 64);
}
{
}
-#ifdef MONO_ARCH_HAVE_IMT
-
#if defined(__default_codegen__)
#define CMP_SIZE (6 + 1)
#define CMP_REG_REG_SIZE (4 + 1)
{
return (MonoMethod*)regs [MONO_ARCH_IMT_REG];
}
-#endif
MonoVTable*
mono_arch_find_static_call_vtable (mgreg_t *regs, guint8 *code)
}
#endif
+
+gboolean
+mono_arch_opcode_supported (int opcode)
+{
+ switch (opcode) {
+ case OP_ATOMIC_ADD_I4:
+ case OP_ATOMIC_ADD_I8:
+ case OP_ATOMIC_EXCHANGE_I4:
+ case OP_ATOMIC_EXCHANGE_I8:
+ case OP_ATOMIC_CAS_I4:
+ case OP_ATOMIC_CAS_I8:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
gpointer lmf_var;
} MonoCompileArch;
+
+
+#ifdef HOST_WIN32
+#define PARAM_REGS 4
+#else
+#define PARAM_REGS 6
+#endif
+
+/* Structure used by the sequence points in AOTed code */
+typedef struct {
+ gpointer ss_trigger_page;
+ gpointer bp_trigger_page;
+ gpointer bp_addrs [MONO_ZERO_LEN_ARRAY];
+} SeqPointInfo;
+
+typedef struct {
+ mgreg_t regs [PARAM_REGS];
+ mgreg_t res;
+ guint8 *ret;
+} DynCallArgs;
+
+
#define MONO_CONTEXT_SET_LLVM_EXC_REG(ctx, exc) do { (ctx)->rax = (gsize)exc; } while (0)
#define MONO_ARCH_INIT_TOP_LMF_ENTRY(lmf)
#define MONO_ARCH_ENABLE_MONO_LMF_VAR 1
#define MONO_ARCH_HAVE_INVALIDATE_METHOD 1
#define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
-#define MONO_ARCH_HAVE_ATOMIC_ADD 1
-#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
-#define MONO_ARCH_HAVE_ATOMIC_CAS 1
#define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_HAVE_TLS_GET (mono_amd64_have_tls_get ())
#define MONO_ARCH_IMT_REG AMD64_R10
#define MONO_ARCH_IMT_SCRATCH_REG AMD64_R11
#include "mini.h"
#include <string.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/utils/mono-mmap.h>
/* Enabled breakpoints read from this trigger page */
static gpointer bp_trigger_page;
-/* Structure used by the sequence points in AOTed code */
-typedef struct {
- gpointer ss_trigger_page;
- gpointer bp_trigger_page;
- guint8* bp_addrs [MONO_ZERO_LEN_ARRAY];
-} SeqPointInfo;
-
/*
* TODO:
* floating point support: on ARM it is a mess, there are at least 3
(gpointer)"pthread_getspecific");
code = emit_call_seq (cfg, code);
/* lmf_addr = &jit_tls->lmf */
- lmf_offset = G_STRUCT_OFFSET (MonoJitTlsData, lmf);
+ lmf_offset = MONO_STRUCT_OFFSET (MonoJitTlsData, lmf);
g_assert (arm_is_imm8 (lmf_offset));
ARM_ADD_REG_IMM (code, ARMREG_R0, ARMREG_R0, lmf_offset, 0);
*/
code = emit_big_add (code, ARMREG_R1, ARMREG_SP, lmf_offset);
/* r0 is the result from mono_get_lmf_addr () */
- ARM_STR_IMM (code, ARMREG_R0, ARMREG_R1, G_STRUCT_OFFSET (MonoLMF, lmf_addr));
+ ARM_STR_IMM (code, ARMREG_R0, ARMREG_R1, MONO_STRUCT_OFFSET (MonoLMF, lmf_addr));
/* new_lmf->previous_lmf = *lmf_addr */
- ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R0, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
- ARM_STR_IMM (code, ARMREG_IP, ARMREG_R1, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R0, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_STR_IMM (code, ARMREG_IP, ARMREG_R1, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* *(lmf_addr) = r1 */
- ARM_STR_IMM (code, ARMREG_R1, ARMREG_R0, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_STR_IMM (code, ARMREG_R1, ARMREG_R0, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* Skip method (only needed for trampoline LMF frames) */
- ARM_STR_IMM (code, ARMREG_SP, ARMREG_R1, G_STRUCT_OFFSET (MonoLMF, sp));
- ARM_STR_IMM (code, ARMREG_FP, ARMREG_R1, G_STRUCT_OFFSET (MonoLMF, fp));
+ ARM_STR_IMM (code, ARMREG_SP, ARMREG_R1, MONO_STRUCT_OFFSET (MonoLMF, sp));
+ ARM_STR_IMM (code, ARMREG_FP, ARMREG_R1, MONO_STRUCT_OFFSET (MonoLMF, fp));
/* save the current IP */
ARM_MOV_REG_REG (code, ARMREG_IP, ARMREG_PC);
- ARM_STR_IMM (code, ARMREG_IP, ARMREG_R1, G_STRUCT_OFFSET (MonoLMF, ip));
+ ARM_STR_IMM (code, ARMREG_IP, ARMREG_R1, MONO_STRUCT_OFFSET (MonoLMF, ip));
for (i = 0; i < sizeof (MonoLMF); i += sizeof (mgreg_t))
mini_gc_set_slot_type_from_fp (cfg, lmf_offset + i, SLOT_NOREF);
}
/* ip = previous_lmf */
- ARM_LDR_IMM (code, ARMREG_IP, basereg, offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_LDR_IMM (code, ARMREG_IP, basereg, offset + MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* lr = lmf_addr */
- ARM_LDR_IMM (code, ARMREG_LR, basereg, offset + G_STRUCT_OFFSET (MonoLMF, lmf_addr));
+ ARM_LDR_IMM (code, ARMREG_LR, basereg, offset + MONO_STRUCT_OFFSET (MonoLMF, lmf_addr));
/* *(lmf_addr) = previous_lmf */
- ARM_STR_IMM (code, ARMREG_IP, ARMREG_LR, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_STR_IMM (code, ARMREG_IP, ARMREG_LR, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
return code;
}
start = code = mono_global_codeman_reserve (12);
/* Replace the this argument with the target */
- ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R0, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
- ARM_LDR_IMM (code, ARMREG_R0, ARMREG_R0, G_STRUCT_OFFSET (MonoDelegate, target));
+ ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R0, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ ARM_LDR_IMM (code, ARMREG_R0, ARMREG_R0, MONO_STRUCT_OFFSET (MonoDelegate, target));
ARM_MOV_REG_REG (code, ARMREG_PC, ARMREG_IP);
g_assert ((code - start) <= 12);
size = 8 + param_count * 4;
start = code = mono_global_codeman_reserve (size);
- ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R0, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R0, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
/* slide down the arguments */
for (i = 0; i < param_count; ++i) {
ARM_MOV_REG_REG (code, (ARMREG_R0 + i), (ARMREG_R0 + i + 1));
void
mono_arch_cpu_init (void)
{
-#ifdef TARGET_IOS
- i8_align = 4;
-#else
- i8_align = __alignof__ (gint64);
-#endif
-
+ i8_align = MONO_ABI_ALIGNOF (gint64);
#ifdef MONO_CROSS_COMPILE
/* Need to set the alignment of i8 since it can different on the target */
#ifdef TARGET_ANDROID
/* linux gnueabi */
- mono_type_set_alignment (MONO_TYPE_I8, 8);
+ mono_type_set_alignment (MONO_TYPE_I8, i8_align);
#endif
#endif
}
ARM_SUB_REG_IMM8 (code, ARMREG_SP, ARMREG_SP, sizeof (MonoContext));
/* save ip, lr and pc into their correspodings ctx.regs slots. */
- ARM_STR_IMM (code, ARMREG_IP, ARMREG_SP, G_STRUCT_OFFSET (MonoContext, regs) + sizeof (mgreg_t) * ARMREG_IP);
- ARM_STR_IMM (code, ARMREG_LR, ARMREG_SP, G_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_LR);
- ARM_STR_IMM (code, ARMREG_LR, ARMREG_SP, G_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_PC);
+ ARM_STR_IMM (code, ARMREG_IP, ARMREG_SP, MONO_STRUCT_OFFSET (MonoContext, regs) + sizeof (mgreg_t) * ARMREG_IP);
+ ARM_STR_IMM (code, ARMREG_LR, ARMREG_SP, MONO_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_LR);
+ ARM_STR_IMM (code, ARMREG_LR, ARMREG_SP, MONO_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_PC);
/* save r0..r10 and fp */
- ARM_ADD_REG_IMM8 (code, ARMREG_IP, ARMREG_SP, G_STRUCT_OFFSET (MonoContext, regs));
+ ARM_ADD_REG_IMM8 (code, ARMREG_IP, ARMREG_SP, MONO_STRUCT_OFFSET (MonoContext, regs));
ARM_STM (code, ARMREG_IP, 0x0fff);
/* now we can update fp. */
/* make ctx.esp hold the actual value of sp at the beginning of this method. */
ARM_ADD_REG_IMM8 (code, ARMREG_R0, ARMREG_FP, sizeof (MonoContext));
ARM_STR_IMM (code, ARMREG_R0, ARMREG_IP, 4 * ARMREG_SP);
- ARM_STR_IMM (code, ARMREG_R0, ARMREG_FP, G_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_SP);
+ ARM_STR_IMM (code, ARMREG_R0, ARMREG_FP, MONO_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_SP);
/* make ctx.eip hold the address of the call. */
ARM_SUB_REG_IMM8 (code, ARMREG_LR, ARMREG_LR, 4);
- ARM_STR_IMM (code, ARMREG_LR, ARMREG_SP, G_STRUCT_OFFSET (MonoContext, pc));
+ ARM_STR_IMM (code, ARMREG_LR, ARMREG_SP, MONO_STRUCT_OFFSET (MonoContext, pc));
/* r0 now points to the MonoContext */
ARM_MOV_REG_REG (code, ARMREG_R0, ARMREG_FP);
ARM_BLX_REG (code, ARMREG_IP);
/* we're back; save ctx.eip and ctx.esp into the corresponding regs slots. */
- ARM_LDR_IMM (code, ARMREG_R0, ARMREG_FP, G_STRUCT_OFFSET (MonoContext, pc));
- ARM_STR_IMM (code, ARMREG_R0, ARMREG_FP, G_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_LR);
- ARM_STR_IMM (code, ARMREG_R0, ARMREG_FP, G_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_PC);
+ ARM_LDR_IMM (code, ARMREG_R0, ARMREG_FP, MONO_STRUCT_OFFSET (MonoContext, pc));
+ ARM_STR_IMM (code, ARMREG_R0, ARMREG_FP, MONO_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_LR);
+ ARM_STR_IMM (code, ARMREG_R0, ARMREG_FP, MONO_STRUCT_OFFSET (MonoContext, regs) + 4 * ARMREG_PC);
/* make ip point to the regs array, then restore everything, including pc. */
- ARM_ADD_REG_IMM8 (code, ARMREG_IP, ARMREG_FP, G_STRUCT_OFFSET (MonoContext, regs));
+ ARM_ADD_REG_IMM8 (code, ARMREG_IP, ARMREG_FP, MONO_STRUCT_OFFSET (MonoContext, regs));
ARM_LDM (code, ARMREG_IP, 0xffff);
mono_arch_flush_icache (start, code - start);
#define DEBUG(a)
-#ifndef __GNUC__
-/*#define __alignof__(a) sizeof(a)*/
-#define __alignof__(type) G_STRUCT_OFFSET(struct { char c; type x; }, x)
-#endif
-
-#define PARAM_REGS 4
-
static void inline
add_general (guint *gr, guint *stack_size, ArgInfo *ainfo, gboolean simple)
{
offset += size;
}
- if (cfg->has_atomic_exchange_i4 || cfg->has_atomic_cas_i4 || cfg->has_atomic_add_new_i4) {
+ if (cfg->has_atomic_exchange_i4 || cfg->has_atomic_cas_i4 || cfg->has_atomic_add_i4) {
/* Allocate a temporary used by the atomic ops */
size = 4;
align = 4;
return TRUE;
}
-#define DYN_CALL_STACK_ARGS 6
-
typedef struct {
MonoMethodSignature *sig;
CallInfo *cinfo;
} ArchDynCallInfo;
-typedef struct {
- mgreg_t regs [PARAM_REGS + DYN_CALL_STACK_ARGS];
- mgreg_t res, res2;
- guint8 *ret;
-} DynCallArgs;
-
static gboolean
dyn_call_supported (CallInfo *cinfo, MonoMethodSignature *sig)
{
break;
case OP_ATOMIC_EXCHANGE_I4:
case OP_ATOMIC_CAS_I4:
- case OP_ATOMIC_ADD_NEW_I4: {
+ case OP_ATOMIC_ADD_I4: {
int tmpreg;
guint8 *buf [16];
arm_patch (buf [2], buf [0]);
arm_patch (buf [1], code);
break;
- case OP_ATOMIC_ADD_NEW_I4:
+ case OP_ATOMIC_ADD_I4:
buf [0] = code;
ARM_DMB (code, ARM_DMB_SY);
ARM_LDREX_REG (code, ARMREG_LR, ins->sreg1);
ARM_LDR_IMM (code, dreg, info_var->inst_basereg, info_var->inst_offset);
/* Add the offset */
- val = ((offset / 4) * sizeof (guint8*)) + G_STRUCT_OFFSET (SeqPointInfo, bp_addrs);
+ val = ((offset / 4) * sizeof (guint8*)) + MONO_STRUCT_OFFSET (SeqPointInfo, bp_addrs);
/* Load the info->bp_addrs [offset], which is either 0 or the address of a trigger page */
if (arm_is_imm12 ((int)val)) {
ARM_LDR_IMM (code, dreg, dreg, val);
/* Save result */
ARM_LDR_IMM (code, ARMREG_IP, var->inst_basereg, var->inst_offset);
- ARM_STR_IMM (code, ARMREG_R0, ARMREG_IP, G_STRUCT_OFFSET (DynCallArgs, res));
- ARM_STR_IMM (code, ARMREG_R1, ARMREG_IP, G_STRUCT_OFFSET (DynCallArgs, res2));
+ ARM_STR_IMM (code, ARMREG_R0, ARMREG_IP, MONO_STRUCT_OFFSET (DynCallArgs, res));
+ ARM_STR_IMM (code, ARMREG_R1, ARMREG_IP, MONO_STRUCT_OFFSET (DynCallArgs, res2));
break;
}
case OP_THROW: {
ARM_LDR_IMM (code, dreg, info_var->inst_basereg, info_var->inst_offset);
/* Load the trigger page addr */
- ARM_LDR_IMM (code, dreg, dreg, G_STRUCT_OFFSET (SeqPointInfo, ss_trigger_page));
+ ARM_LDR_IMM (code, dreg, dreg, MONO_STRUCT_OFFSET (SeqPointInfo, ss_trigger_page));
ARM_STR_IMM (code, dreg, ss_trigger_page_var->inst_basereg, ss_trigger_page_var->inst_offset);
}
}
{
}
-#ifdef MONO_ARCH_HAVE_IMT
-
#ifndef DISABLE_JIT
void
return start;
}
-#endif
-
mgreg_t
mono_arch_context_get_int_reg (MonoContext *ctx, int reg)
{
mono_arch_opcode_supported (int opcode)
{
switch (opcode) {
+ case OP_ATOMIC_ADD_I4:
case OP_ATOMIC_EXCHANGE_I4:
case OP_ATOMIC_CAS_I4:
- case OP_ATOMIC_ADD_NEW_I4:
return v7_supported;
default:
return FALSE;
int map [MONO_ZERO_LEN_ARRAY];
} GSharedVtCallInfo;
+/* Structure used by the sequence points in AOTed code */
+typedef struct {
+ gpointer ss_trigger_page;
+ gpointer bp_trigger_page;
+ guint8* bp_addrs [MONO_ZERO_LEN_ARRAY];
+} SeqPointInfo;
+
+
+#define PARAM_REGS 4
+#define DYN_CALL_STACK_ARGS 6
+
+typedef struct {
+ mgreg_t regs [PARAM_REGS + DYN_CALL_STACK_ARGS];
+ mgreg_t res, res2;
+ guint8 *ret;
+} DynCallArgs;
+
void arm_patch (guchar *code, const guchar *target);
guint8* mono_arm_emit_load_imm (guint8 *code, int dreg, guint32 val);
int mono_arm_is_rotated_imm8 (guint32 val, gint *rot_amount);
#define ARM_NUM_REG_FPARGS 0
#define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1
#define MONO_ARCH_AOT_SUPPORTED 1
#define MONO_ARCH_HAVE_OP_TAIL_CALL 1
#endif
#define MONO_ARCH_HAVE_DUMMY_INIT 1
-#define MONO_ARCH_HAVE_OPCODE_SUPPORTED 1
-#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
-#define MONO_ARCH_HAVE_ATOMIC_CAS 1
-#define MONO_ARCH_HAVE_ATOMIC_ADD 1
#if defined(__native_client__)
#undef MONO_ARCH_SOFT_DEBUG_SUPPORTED
--- /dev/null
+#include "config.h"
+
+#ifdef ENABLE_EXTENSION_MODULE
+#include "../../../mono-extensions/mono/mini/mini-cross-helpers.c"
+#else
+
+void mono_cross_helpers_run (void);
+
+void
+mono_cross_helpers_run (void)
+{
+}
+#endif
;
#else
while (1) {
- sleep (0);
+ sleep (1);
}
#endif
}
if (ji->from_aot)
return mono_aot_get_unwind_info (ji, unwind_info_len);
else
- return mono_get_cached_unwind_info (ji->used_regs, unwind_info_len);
+ /* The upper 16 bits of ji->unwind_info might contain the epilog offset */
+ return mono_get_cached_unwind_info (ji->unwind_info & 0xffff, unwind_info_len);
}
* pass.
*/
static void
-precise_pass (TlsData *tls, guint8 *stack_start, guint8 *stack_end)
+precise_pass (TlsData *tls, guint8 *stack_start, guint8 *stack_end, void *gc_data)
{
int findex, i;
FrameInfo *fi;
MonoObject *obj = *ptr;
if (obj) {
DEBUG (fprintf (logfile, "\tref %s0x%x(fp)=%p: %p ->", (guint8*)ptr >= (guint8*)fi->fp ? "" : "-", ABS ((int)((gssize)ptr - (gssize)fi->fp)), ptr, obj));
- *ptr = mono_gc_scan_object (obj);
+ *ptr = mono_gc_scan_object (obj, gc_data);
DEBUG (fprintf (logfile, " %p.\n", *ptr));
} else {
DEBUG (fprintf (logfile, "\tref %s0x%x(fp)=%p: %p.\n", (guint8*)ptr >= (guint8*)fi->fp ? "" : "-", ABS ((int)((gssize)ptr - (gssize)fi->fp)), ptr, obj));
if (obj) {
DEBUG (fprintf (logfile, "\treg %s saved at %p: %p ->", mono_arch_regname (fi->regs [i]), ptr, obj));
- *ptr = mono_gc_scan_object (obj);
+ *ptr = mono_gc_scan_object (obj, gc_data);
DEBUG (fprintf (logfile, " %p.\n", *ptr));
} else {
DEBUG (fprintf (logfile, "\treg %s saved at %p: %p\n", mono_arch_regname (fi->regs [i]), ptr, obj));
* structure filled up by thread_suspend_func.
*/
static void
-thread_mark_func (gpointer user_data, guint8 *stack_start, guint8 *stack_end, gboolean precise)
+thread_mark_func (gpointer user_data, guint8 *stack_start, guint8 *stack_end, gboolean precise, void *gc_data)
{
TlsData *tls = user_data;
if (!precise)
conservative_pass (tls, stack_start, stack_end);
else
- precise_pass (tls, stack_start, stack_end);
+ precise_pass (tls, stack_start, stack_end, gc_data);
}
#ifndef DISABLE_JIT
if (virtual) {
/* Same as in mono_emit_method_call_full () */
-#ifndef MONO_ARCH_HAVE_IMT
- NOT_IMPLEMENTED;
-#endif
if ((method->klass->parent == mono_defaults.multicastdelegate_class) && (!strcmp (method->name, "Invoke"))) {
/* See mono_emit_method_call_full () */
/* The gsharedvt trampoline will recognize this constant */
case OP_LOADR8_MEMBASE:
case OP_ATOMIC_EXCHANGE_I4:
case OP_ATOMIC_EXCHANGE_I8:
- case OP_ATOMIC_ADD_NEW_I4:
- case OP_ATOMIC_ADD_NEW_I8:
- case OP_ATOMIC_ADD_IMM_NEW_I4:
- case OP_ATOMIC_ADD_IMM_NEW_I8:
+ case OP_ATOMIC_ADD_I4:
+ case OP_ATOMIC_ADD_I8:
+ case OP_ATOMIC_ADD_IMM_I4:
+ case OP_ATOMIC_ADD_IMM_I8:
/* There are no membase instructions on ia64 */
if (ins->inst_offset == 0) {
break;
case OP_MEMORY_BARRIER:
ia64_mf (code);
break;
- case OP_ATOMIC_ADD_IMM_NEW_I4:
+ case OP_ATOMIC_ADD_IMM_I4:
g_assert (ins->inst_offset == 0);
ia64_fetchadd4_acq_hint (code, ins->dreg, ins->inst_basereg, ins->inst_imm, 0);
ia64_adds_imm (code, ins->dreg, ins->inst_imm, ins->dreg);
break;
- case OP_ATOMIC_ADD_IMM_NEW_I8:
+ case OP_ATOMIC_ADD_IMM_I8:
g_assert (ins->inst_offset == 0);
ia64_fetchadd8_acq_hint (code, ins->dreg, ins->inst_basereg, ins->inst_imm, 0);
ia64_adds_imm (code, ins->dreg, ins->inst_imm, ins->dreg);
case OP_ATOMIC_EXCHANGE_I8:
ia64_xchg8_hint (code, ins->dreg, ins->inst_basereg, ins->sreg2, 0);
break;
- case OP_ATOMIC_ADD_NEW_I4: {
+ case OP_ATOMIC_ADD_I4: {
guint8 *label, *buf;
/* From libatomic_ops */
ia64_add (code, ins->dreg, GP_SCRATCH_REG, ins->sreg2);
break;
}
- case OP_ATOMIC_ADD_NEW_I8: {
+ case OP_ATOMIC_ADD_I8: {
guint8 *label, *buf;
/* From libatomic_ops */
{
}
-#ifdef MONO_ARCH_HAVE_IMT
-
/*
* LOCKING: called with the domain lock held
*/
{
/* Done by the implementation of the CALL_MEMBASE opcodes */
}
-#endif
gpointer
mono_arch_get_this_arg_from_call (mgreg_t *regs, guint8 *code)
guint32 opcode;
if (fsig->params [0]->type == MONO_TYPE_I4)
- opcode = OP_ATOMIC_ADD_IMM_NEW_I4;
+ opcode = OP_ATOMIC_ADD_IMM_I4;
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_IMM_NEW_I8;
+ opcode = OP_ATOMIC_ADD_IMM_I8;
else
g_assert_not_reached ();
MONO_INST_NEW (cfg, ins, opcode);
guint32 opcode;
if (fsig->params [0]->type == MONO_TYPE_I4)
- opcode = OP_ATOMIC_ADD_IMM_NEW_I4;
+ opcode = OP_ATOMIC_ADD_IMM_I4;
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_IMM_NEW_I8;
+ opcode = OP_ATOMIC_ADD_IMM_I8;
else
g_assert_not_reached ();
MONO_INST_NEW (cfg, ins, opcode);
if (is_imm) {
if (fsig->params [0]->type == MONO_TYPE_I4)
- opcode = OP_ATOMIC_ADD_IMM_NEW_I4;
+ opcode = OP_ATOMIC_ADD_IMM_I4;
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_IMM_NEW_I8;
+ opcode = OP_ATOMIC_ADD_IMM_I8;
else
g_assert_not_reached ();
ins->inst_basereg = args [0]->dreg;
ins->inst_offset = 0;
ins->inst_imm = imm;
- ins->type = (opcode == OP_ATOMIC_ADD_IMM_NEW_I4) ? STACK_I4 : STACK_I8;
+ ins->type = (opcode == OP_ATOMIC_ADD_IMM_I4) ? STACK_I4 : STACK_I8;
} else {
if (fsig->params [0]->type == MONO_TYPE_I4)
- opcode = OP_ATOMIC_ADD_NEW_I4;
+ opcode = OP_ATOMIC_ADD_I4;
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_NEW_I8;
+ opcode = OP_ATOMIC_ADD_I8;
else
g_assert_not_reached ();
ins->inst_basereg = args [0]->dreg;
ins->inst_offset = 0;
ins->sreg2 = args [1]->dreg;
- ins->type = (opcode == OP_ATOMIC_ADD_NEW_I4) ? STACK_I4 : STACK_I8;
+ ins->type = (opcode == OP_ATOMIC_ADD_I4) ? STACK_I4 : STACK_I8;
}
MONO_ADD_INS (cfg->cbb, ins);
}
/* FIXME: implement */
g_assert_not_reached ();
}
+
+gboolean
+mono_arch_opcode_supported (int opcode)
+{
+ switch (opcode) {
+ case OP_ATOMIC_ADD_I4:
+ case OP_ATOMIC_ADD_I8:
+ case OP_ATOMIC_EXCHANGE_I4:
+ case OP_ATOMIC_EXCHANGE_I8:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
#define MONO_ARCH_HAVE_INVALIDATE_METHOD 1
#define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
#define MONO_ARCH_HAVE_SAVE_UNWIND_INFO 1
-#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK 1
#define MONO_ARCH_THIS_AS_FIRST_ARG 1
values [ins->dreg] = mono_llvm_build_atomic_rmw (builder, LLVM_ATOMICRMW_OP_XCHG, args [0], args [1]);
break;
}
- case OP_ATOMIC_ADD_NEW_I4:
- case OP_ATOMIC_ADD_NEW_I8: {
+ case OP_ATOMIC_ADD_I4:
+ case OP_ATOMIC_ADD_I8: {
LLVMValueRef args [2];
LLVMTypeRef t;
- if (ins->opcode == OP_ATOMIC_ADD_NEW_I4)
+ if (ins->opcode == OP_ATOMIC_ADD_I4)
t = LLVMInt32Type ();
else
t = LLVMInt64Type ();
#include <string.h>
#include <asm/cachectl.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/utils/mono-mmap.h>
start = code = mono_global_codeman_reserve (16);
/* Replace the this argument with the target */
- mips_lw (code, mips_temp, mips_a0, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
- mips_lw (code, mips_a0, mips_a0, G_STRUCT_OFFSET (MonoDelegate, target));
+ mips_lw (code, mips_temp, mips_a0, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ mips_lw (code, mips_a0, mips_a0, MONO_STRUCT_OFFSET (MonoDelegate, target));
mips_jr (code, mips_temp);
mips_nop (code);
size = 16 + param_count * 4;
start = code = mono_global_codeman_reserve (size);
- mips_lw (code, mips_temp, mips_a0, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ mips_lw (code, mips_temp, mips_a0, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
/* slide down the arguments */
for (i = 0; i < param_count; ++i) {
mips_move (code, mips_a0 + i, mips_a0 + i + 1);
return ctx->sc_regs [reg];
}
-#ifdef MONO_ARCH_HAVE_IMT
-
#define ENABLE_WRONG_METHOD_CHECK 0
#define MIPS_LOAD_SEQUENCE_LENGTH 8
{
return (MonoMethod*) regs [MONO_ARCH_IMT_REG];
}
-#endif
MonoVTable*
mono_arch_find_static_call_vtable (mgreg_t *regs, guint8 *code)
}
#endif /* MONO_ARCH_SOFT_DEBUG_SUPPORTED */
+
+gboolean
+mono_arch_opcode_supported (int opcode)
+{
+ return FALSE;
+}
#define MIPS_LAST_FPARG_REG mips_f19
#endif
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_IMT_REG mips_t0
#define MONO_ARCH_VTABLE_REG mips_a0
MINI_OP(OP_XZERO, "xzero", XREG, NONE, NONE)
MINI_OP(OP_XPHI, "xphi", XREG, NONE, NONE)
-/* Atomic specific
-
- Note, OP_ATOMIC_ADD_IMM_NEW_I4 and
- OP_ATOMIC_ADD_NEW_I4 returns the new
- value compared to OP_ATOMIC_ADD_I4 that
- returns the old value.
-
- OP_ATOMIC_ADD_NEW_I4 is used by
- Interlocked::Increment and Interlocked:Decrement
- and atomic_add_i4 by Interlocked::Add
+/*
+ * These are used for efficient implementation of the
+ * methods on the System.Threading.Interlocked class
+ * on architectures that support it. This is checked
+ * via mono_arch_opcode_supported ().
+ *
+ * Note that while the 32-bit variants are used on
+ * both 32-bit and 64-bit systems, the 64-bit variants
+ * are only used if the system is 64-bit. If that is
+ * not the case, the fallback code in the runtime is
+ * used instead. This is done because decomposing the
+ * 64-bit variants to instructions operating on 32-bit
+ * registers is very complicated on some architectures.
+ *
+ * The memory_barrier instruction translates to a full
+ * acquire/release barrier. Such a memory barrier is
+ * implied at the beginning and end of all other atomic
+ * operations, such that they ensure sequential
+ * consistency.
+ *
+ * All of these return the new value at the given
+ * memory location after performing the operation.
*/
MINI_OP(OP_ATOMIC_ADD_I4, "atomic_add_i4", IREG, IREG, IREG)
-MINI_OP(OP_ATOMIC_ADD_NEW_I4, "atomic_add_new_i4", IREG, IREG, IREG)
-MINI_OP(OP_ATOMIC_ADD_IMM_I4, "atomic_add_imm_i4", IREG, IREG, NONE)
-MINI_OP(OP_ATOMIC_ADD_IMM_NEW_I4, "atomic_add_imm_new_i4", IREG, IREG, NONE)
-MINI_OP(OP_ATOMIC_EXCHANGE_I4, "atomic_exchange_i4", IREG, IREG, IREG)
-
MINI_OP(OP_ATOMIC_ADD_I8, "atomic_add_i8", IREG, IREG, IREG)
-MINI_OP(OP_ATOMIC_ADD_NEW_I8, "atomic_add_new_i8", IREG, IREG, IREG)
-MINI_OP(OP_ATOMIC_ADD_IMM_I8, "atomic_add_imm_i8", IREG, IREG, NONE)
-MINI_OP(OP_ATOMIC_ADD_IMM_NEW_I8, "atomic_add_imm_new_i8", IREG, IREG, NONE)
+MINI_OP(OP_ATOMIC_EXCHANGE_I4, "atomic_exchange_i4", IREG, IREG, IREG)
MINI_OP(OP_ATOMIC_EXCHANGE_I8, "atomic_exchange_i8", IREG, IREG, IREG)
-MINI_OP(OP_MEMORY_BARRIER, "memory_barrier", NONE, NONE, NONE)
-
MINI_OP3(OP_ATOMIC_CAS_I4, "atomic_cas_i4", IREG, IREG, IREG, IREG)
MINI_OP3(OP_ATOMIC_CAS_I8, "atomic_cas_i8", IREG, IREG, IREG, IREG)
+MINI_OP(OP_MEMORY_BARRIER, "memory_barrier", NONE, NONE, NONE)
/* Conditional move opcodes.
* Must be in the same order as the matching CEE_B... opcodes
#endif
#if defined(__ia64__)
+MINI_OP(OP_ATOMIC_ADD_IMM_I4, "atomic_add_imm_i4", IREG, IREG, NONE)
+MINI_OP(OP_ATOMIC_ADD_IMM_I8, "atomic_add_imm_i8", IREG, IREG, NONE)
+
MINI_OP(OP_IA64_LOAD, "ia64_load", NONE, NONE, NONE)
MINI_OP(OP_IA64_LOADI1, "ia64_loadi1", NONE, NONE, NONE)
MINI_OP(OP_IA64_LOADU1, "ia64_loadu1", NONE, NONE, NONE)
#include "mini.h"
#include <string.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/utils/mono-proclib.h>
code = mono_ppc_create_pre_code_ftnptr (code);
/* Replace the this argument with the target */
- ppc_ldptr (code, ppc_r0, G_STRUCT_OFFSET (MonoDelegate, method_ptr), ppc_r3);
+ ppc_ldptr (code, ppc_r0, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr), ppc_r3);
#ifdef PPC_USES_FUNCTION_DESCRIPTOR
/* it's a function descriptor */
/* Can't use ldptr as it doesn't work with r0 */
ppc_ldptr_indexed (code, ppc_r0, 0, ppc_r0);
#endif
ppc_mtctr (code, ppc_r0);
- ppc_ldptr (code, ppc_r3, G_STRUCT_OFFSET (MonoDelegate, target), ppc_r3);
+ ppc_ldptr (code, ppc_r3, MONO_STRUCT_OFFSET (MonoDelegate, target), ppc_r3);
ppc_bcctr (code, PPC_BR_ALWAYS, 0);
g_assert ((code - start) <= size);
if (!aot)
code = mono_ppc_create_pre_code_ftnptr (code);
- ppc_ldptr (code, ppc_r0, G_STRUCT_OFFSET (MonoDelegate, method_ptr), ppc_r3);
+ ppc_ldptr (code, ppc_r0, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr), ppc_r3);
#ifdef PPC_USES_FUNCTION_DESCRIPTOR
/* it's a function descriptor */
ppc_ldptr_indexed (code, ppc_r0, 0, ppc_r0);
case OP_IDIV_IMM:
case OP_IREM_IMM:
case OP_IREM_UN_IMM:
+ CASE_PPC64 (OP_LREM_IMM) {
NEW_INS (cfg, temp, OP_ICONST);
temp->inst_c0 = ins->inst_imm;
temp->dreg = mono_alloc_ireg (cfg);
ins->opcode = OP_IDIV_UN;
else if (ins->opcode == OP_IREM_UN_IMM)
ins->opcode = OP_IREM_UN;
+ else if (ins->opcode == OP_LREM_IMM)
+ ins->opcode = OP_LREM;
last_ins = temp;
/* handle rem separately */
goto loop_start;
+ }
case OP_IREM:
case OP_IREM_UN:
CASE_PPC64 (OP_LREM)
else
ppc_mr (code, ins->dreg, ins->sreg1);
break;
- case OP_ATOMIC_ADD_NEW_I4:
- case OP_ATOMIC_ADD_NEW_I8: {
- guint8 *loop = code, *branch;
+ case OP_ATOMIC_ADD_I4:
+ CASE_PPC64 (OP_ATOMIC_ADD_I8) {
+ int location = ins->inst_basereg;
+ int addend = ins->sreg2;
+ guint8 *loop, *branch;
g_assert (ins->inst_offset == 0);
+
+ loop = code;
ppc_sync (code);
- if (ins->opcode == OP_ATOMIC_ADD_NEW_I4)
- ppc_lwarx (code, ppc_r0, 0, ins->inst_basereg);
+ if (ins->opcode == OP_ATOMIC_ADD_I4)
+ ppc_lwarx (code, ppc_r0, 0, location);
+#ifdef __mono_ppc64__
else
- ppc_ldarx (code, ppc_r0, 0, ins->inst_basereg);
- ppc_add (code, ppc_r0, ppc_r0, ins->sreg2);
- if (ins->opcode == OP_ATOMIC_ADD_NEW_I4)
- ppc_stwcxd (code, ppc_r0, 0, ins->inst_basereg);
+ ppc_ldarx (code, ppc_r0, 0, location);
+#endif
+
+ ppc_add (code, ppc_r0, ppc_r0, addend);
+
+ if (ins->opcode == OP_ATOMIC_ADD_I4)
+ ppc_stwcxd (code, ppc_r0, 0, location);
+#ifdef __mono_ppc64__
else
- ppc_stdcxd (code, ppc_r0, 0, ins->inst_basereg);
+ ppc_stdcxd (code, ppc_r0, 0, location);
+#endif
+
branch = code;
ppc_bc (code, PPC_BR_FALSE, PPC_BR_EQ, 0);
ppc_patch (branch, loop);
+
ppc_sync (code);
ppc_mr (code, ins->dreg, ppc_r0);
break;
else
ppc_ldarx (code, ppc_r0, 0, location);
#endif
- ppc_cmp (code, 0, ins->opcode == OP_ATOMIC_CAS_I4 ? 0 : 1, ppc_r0, comparand);
+ ppc_cmp (code, 0, ins->opcode == OP_ATOMIC_CAS_I4 ? 0 : 1, ppc_r0, comparand);
not_equal = code;
ppc_bc (code, PPC_BR_FALSE, PPC_BR_EQ, 0);
+
if (ins->opcode == OP_ATOMIC_CAS_I4)
ppc_stwcxd (code, value, 0, location);
#ifdef __mono_ppc64__
lost_reservation = code;
ppc_bc (code, PPC_BR_FALSE, PPC_BR_EQ, 0);
ppc_patch (lost_reservation, start);
-
ppc_patch (not_equal, code);
+
ppc_sync (code);
ppc_mr (code, ins->dreg, ppc_r0);
break;
{
}
-#ifdef MONO_ARCH_HAVE_IMT
-
#define CMP_SIZE (PPC_LOAD_SEQUENCE_LENGTH + 4)
#define BR_SIZE 4
#define LOADSTORE_SIZE 4
return (MonoMethod*)(gsize) r [MONO_ARCH_IMT_REG];
}
-#endif
MonoVTable*
mono_arch_find_static_call_vtable (mgreg_t *regs, guint8 *code)
}
#endif
+
+gboolean
+mono_arch_opcode_supported (int opcode)
+{
+ switch (opcode) {
+ case OP_ATOMIC_ADD_I4:
+ case OP_ATOMIC_CAS_I4:
+#ifdef TARGET_POWERPC64
+ case OP_ATOMIC_ADD_I8:
+ case OP_ATOMIC_CAS_I8:
+#endif
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
#ifdef __mono_ppc64__
#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
#define MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS
-#define MONO_ARCH_HAVE_ATOMIC_ADD 1
#define PPC_USES_FUNCTION_DESCRIPTOR
#ifndef __mono_ilp32__
#define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
#define MONO_ARCH_EMULATE_FREM 1
#define MONO_ARCH_BIGMUL_INTRINS 1
-#define MONO_ARCH_HAVE_ATOMIC_CAS 1
/* Parameters used by the register allocator */
#define MONO_ARCH_CALLEE_REGS ((0xff << ppc_r3) | (1 << ppc_r11) | (1 << ppc_r12))
#endif /* HAVE_WORKING_SIGALTSTACK */
#define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_IMT_REG ppc_r12
#define MONO_ARCH_VTABLE_REG ppc_r12
#include <sys/types.h>
#include <unistd.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/profiler-private.h>
s390_lgr (code, ins->dreg, s390_r1);
}
break;
- case OP_ATOMIC_ADD_NEW_I8: {
- s390_lgr (code, s390_r1, ins->sreg2);
- s390_lg (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
- s390_agr (code, s390_r1, s390_r0);
- s390_csg (code, s390_r0, s390_r1, ins->inst_basereg, ins->inst_offset);
- s390_jnz (code, -10);
- s390_lgr (code, ins->dreg, s390_r1);
- }
- break;
case OP_ATOMIC_EXCHANGE_I8: {
s390_lg (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
s390_csg (code, s390_r0, ins->sreg2, ins->inst_basereg, ins->inst_offset);
s390_lgfr(code, ins->dreg, s390_r1);
}
break;
- case OP_ATOMIC_ADD_NEW_I4: {
- s390_lgfr(code, s390_r1, ins->sreg2);
- s390_lgf (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
- s390_agr (code, s390_r1, s390_r0);
- s390_cs (code, s390_r0, s390_r1, ins->inst_basereg, ins->inst_offset);
- s390_jnz (code, -9);
- s390_lgfr(code, ins->dreg, s390_r1);
- }
- break;
case OP_ATOMIC_EXCHANGE_I4: {
s390_l (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
s390_cs (code, s390_r0, ins->sreg2, ins->inst_basereg, ins->inst_offset);
start = code = mono_global_codeman_reserve (size);
/* Replace the this argument with the target */
- s390_lg (code, s390_r1, 0, s390_r2, G_STRUCT_OFFSET(MonoDelegate, method_ptr));
- s390_lg (code, s390_r2, 0, s390_r2, G_STRUCT_OFFSET(MonoDelegate, target));
+ s390_lg (code, s390_r1, 0, s390_r2, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ s390_lg (code, s390_r2, 0, s390_r2, MONO_STRUCT_OFFSET (MonoDelegate, target));
s390_br (code, s390_r1);
g_assert ((code - start) <= size);
size = 32 + param_count * 8;
start = code = mono_global_codeman_reserve (size);
- s390_lg (code, s390_r1, 0, s390_r2, G_STRUCT_OFFSET(MonoDelegate, method_ptr));
+ s390_lg (code, s390_r1, 0, s390_r2, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
/* slide down the arguments */
for (i = 0; i < param_count; ++i) {
s390_lgr (code, (s390_r2 + i), (s390_r2 + i + 1));
/*========================= End of Function ========================*/
#endif
+
+gboolean
+mono_arch_opcode_supported (int opcode)
+{
+ switch (opcode) {
+ case OP_ATOMIC_ADD_I4:
+ case OP_ATOMIC_ADD_I8:
+ case OP_ATOMIC_EXCHANGE_I4:
+ case OP_ATOMIC_EXCHANGE_I8:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS 1
#define MONO_ARCH_HAVE_IS_INT_OVERFLOW 1
#define MONO_ARCH_NEED_DIV_CHECK 1
-#define MONO_ARCH_HAVE_ATOMIC_ADD 1
-#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
#define MONO_ARCH_SIGNAL_STACK_SIZE 256*1024
#define MONO_ARCH_HAVE_DECOMPOSE_OPTS 1
#define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_HAVE_TLS_GET 1
#define MONO_ARCH_ENABLE_MONO_LMF_VAR 1
#define MONO_ARCH_IMT_REG s390_r9
/* FIXME: implement */
g_assert_not_reached ();
}
+
+gboolean
+mono_arch_opcode_supported (int opcode)
+{
+ return FALSE;
+}
#define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
#define MONO_ARCH_EMULATE_FREM 1
#define MONO_ARCH_NEED_DIV_CHECK 1
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_IMT_REG sparc_g1
#define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1
#define MONO_ARCH_HAVE_TLS_INIT 1
*/
guint8* mono_trampoline_code [MONO_TRAMPOLINE_NUM];
-static GHashTable *class_init_hash_addr = NULL;
-static GHashTable *rgctx_lazy_fetch_trampoline_hash = NULL;
-static GHashTable *rgctx_lazy_fetch_trampoline_hash_addr = NULL;
+static GHashTable *class_init_hash_addr;
+static GHashTable *rgctx_lazy_fetch_trampoline_hash;
+static GHashTable *rgctx_lazy_fetch_trampoline_hash_addr;
static guint32 trampoline_calls, jit_trampolines, unbox_trampolines, static_rgctx_trampolines;
#define mono_trampolines_lock() EnterCriticalSection (&trampolines_mutex)
}
#endif
-#ifdef MONO_ARCH_HAVE_IMT
-
/*
* Either IMPL_METHOD or AOT_ADDR will be set on return.
*/
}
}
}
-#endif
/*
* This is a super-ugly hack to fix bug #616463.
orig_vtable_slot = vtable_slot;
vtable_slot_to_patch = vtable_slot;
-#ifdef MONO_ARCH_HAVE_IMT
/* IMT call */
if (vt && (gpointer)vtable_slot < (gpointer)vt) {
MonoMethod *impl_method = NULL;
m = impl_method;
}
}
-#endif
/*
* The virtual check is needed because is_generic_method_definition (m) could
else
g_assert (!m->klass->generic_container);
-#ifdef MONO_ARCH_HAVE_IMT
generic_virtual = mono_arch_find_imt_method (regs, code);
-#endif
if (generic_virtual) {
g_assert (generic_virtual->is_inflated);
context.method_inst = ((MonoMethodInflated*)generic_virtual)->context.method_inst;
g_assert_not_reached ();
#endif
} else {
-#ifdef MONO_ARCH_HAVE_IMT
MonoObject *this_argument = mono_arch_get_this_arg_from_call (regs, code);
vt = this_argument->vtable;
mono_class_setup_supertypes (this_argument->vtable->klass);
klass = this_argument->vtable->klass->supertypes [m->klass->idepth - 1];
}
-#else
- NOT_IMPLEMENTED;
-#endif
}
g_assert (vtable_slot || klass);
else
g_assert (!m->klass->generic_container);
-#ifdef MONO_ARCH_HAVE_IMT
imt_method = mono_arch_find_imt_method (regs, code);
if (imt_method->is_inflated)
context.method_inst = ((MonoMethodInflated*)imt_method)->context.method_inst;
-#endif
m = mono_class_inflate_generic_method (declaring, &context);
m = mono_marshal_get_remoting_invoke_with_check (m);
#define DW_CFA_lo_user 0x1c
#define DW_CFA_hi_user 0x3f
+/*
+ * Mono extension, advance loc to a location stored outside the unwind info.
+ * This is required to make the unwind descriptors sharable, since otherwise each one would contain
+ * an advance_loc with a different offset just before the unwind ops for the epilog.
+ */
+#define DW_CFA_mono_advance_loc DW_CFA_lo_user
+
/* Represents one unwind instruction */
typedef struct {
guint8 op; /* One of DW_CFA_... */
#define mono_emit_unwind_op_same_value(cfg,ip,reg) mono_emit_unwind_op (cfg, (ip) - (cfg)->native_code, DW_CFA_same_value, (reg), 0)
/* Reg is saved at cfa+offset */
#define mono_emit_unwind_op_offset(cfg,ip,reg,offset) mono_emit_unwind_op (cfg, (ip) - (cfg)->native_code, DW_CFA_offset, (reg), (offset))
+/* Save the unwind state into an implicit stack */
+#define mono_emit_unwind_op_remember_state(cfg,ip) mono_emit_unwind_op (cfg, (ip) - (cfg)->native_code, DW_CFA_remember_state, 0, 0)
+/* Restore the unwind state from the state stack */
+#define mono_emit_unwind_op_restore_state(cfg,ip) mono_emit_unwind_op (cfg, (ip) - (cfg)->native_code, DW_CFA_restore_state, 0, 0)
+/*
+ * Mark the current location as a location stored outside the unwind info, which will be passed
+ * explicitly to mono_unwind_frame () in the MARK_LOCATIONS argument. This allows the unwind info
+ * to be shared among multiple methods.
+ */
+#define mono_emit_unwind_op_mark_loc(cfg,ip,n) mono_emit_unwind_op (cfg, (ip) - (cfg)->native_code, DW_CFA_mono_advance_loc, 0, (n))
/* Similar macros usable when a cfg is not available, like for trampolines */
#define mono_add_unwind_op_def_cfa(op_list,code,buf,reg,offset) do { (op_list) = g_slist_append ((op_list), mono_create_unwind_op ((code) - (buf), DW_CFA_def_cfa, (reg), (offset))); } while (0)
void
mono_unwind_frame (guint8 *unwind_info, guint32 unwind_info_len,
- guint8 *start_ip, guint8 *end_ip, guint8 *ip, mgreg_t *regs, int nregs,
+ guint8 *start_ip, guint8 *end_ip, guint8 *ip, guint8 **mark_locations,
+ mgreg_t *regs, int nregs,
mgreg_t **save_locations, int save_locations_len,
guint8 **out_cfa) MONO_INTERNAL;
#include <unistd.h>
#endif
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/threads.h>
cfg->frame_reg = X86_EBP;
offset = 0;
- if (cfg->has_atomic_add_new_i4 || cfg->has_atomic_exchange_i4) {
+ if (cfg->has_atomic_add_i4 || cfg->has_atomic_exchange_i4) {
/* The opcode implementations use callee-saved regs as scratch regs by pushing and pop-ing them, but that is not async safe */
cfg->used_int_regs |= (1 << X86_EBX) | (1 << X86_EDI) | (1 << X86_ESI);
}
* See the Under the Hood article in the May 1996 issue of Microsoft Systems
* Journal and/or a disassembly of the TlsGet () function.
*/
- g_assert (tls_offset < 64);
x86_prefix (code, X86_FS_PREFIX);
x86_mov_reg_mem (code, dreg, 0x18, 4);
- /* Dunno what this does but TlsGetValue () contains it */
- x86_alu_membase_imm (code, X86_AND, dreg, 0x34, 0);
- x86_mov_reg_membase (code, dreg, dreg, 3600 + (tls_offset * 4), 4);
+ if (tls_offset < 64) {
+ x86_mov_reg_membase (code, dreg, dreg, 3600 + (tls_offset * 4), 4);
+ } else {
+ guint8 *buf [16];
+
+ g_assert (tls_offset < 0x440);
+ /* Load TEB->TlsExpansionSlots */
+ x86_mov_reg_membase (code, dreg, dreg, 0xf94, 4);
+ x86_test_reg_reg (code, dreg, dreg);
+ buf [0] = code;
+ x86_branch (code, X86_CC_EQ, code, TRUE);
+ x86_mov_reg_membase (code, dreg, dreg, (tls_offset * 4) - 0x100, 4);
+ x86_patch (buf [0], code);
+ }
#else
if (optimize_for_xen) {
x86_prefix (code, X86_GS_PREFIX);
emit_setup_lmf (MonoCompile *cfg, guint8 *code, gint32 lmf_offset, int cfa_offset)
{
/* save all caller saved regs */
- x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebx), X86_EBX, sizeof (mgreg_t));
- mono_emit_unwind_op_offset (cfg, code, X86_EBX, - cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebx));
- x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, edi), X86_EDI, sizeof (mgreg_t));
- mono_emit_unwind_op_offset (cfg, code, X86_EDI, - cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, edi));
- x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, esi), X86_ESI, sizeof (mgreg_t));
- mono_emit_unwind_op_offset (cfg, code, X86_ESI, - cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, esi));
- x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebp), X86_EBP, sizeof (mgreg_t));
+ x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, ebx), X86_EBX, sizeof (mgreg_t));
+ mono_emit_unwind_op_offset (cfg, code, X86_EBX, - cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, ebx));
+ x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, edi), X86_EDI, sizeof (mgreg_t));
+ mono_emit_unwind_op_offset (cfg, code, X86_EDI, - cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, edi));
+ x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, esi), X86_ESI, sizeof (mgreg_t));
+ mono_emit_unwind_op_offset (cfg, code, X86_ESI, - cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, esi));
+ x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, ebp), X86_EBP, sizeof (mgreg_t));
/* save the current IP */
if (cfg->compile_aot) {
mono_add_patch_info (cfg, code + 1 - cfg->native_code, MONO_PATCH_INFO_IP, NULL);
x86_mov_reg_imm (code, X86_EAX, 0);
}
- x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, eip), X86_EAX, sizeof (mgreg_t));
-
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, eip), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebp), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, esi), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, edi), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebx), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, esp), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, method), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, lmf_addr), SLOT_NOREF);
- mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), SLOT_NOREF);
+ x86_mov_membase_reg (code, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, eip), X86_EAX, sizeof (mgreg_t));
+
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, eip), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, ebp), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, esi), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, edi), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, ebx), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, esp), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, method), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, lmf_addr), SLOT_NOREF);
+ mini_gc_set_slot_type_from_cfa (cfg, -cfa_offset + lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), SLOT_NOREF);
return code;
}
case OP_ATOMIC_ADD_I4: {
int dreg = ins->dreg;
- if (dreg == ins->inst_basereg) {
- x86_push_reg (code, ins->sreg2);
- dreg = ins->sreg2;
- }
-
- if (dreg != ins->sreg2)
- x86_mov_reg_reg (code, ins->dreg, ins->sreg2, 4);
-
- x86_prefix (code, X86_LOCK_PREFIX);
- x86_xadd_membase_reg (code, ins->inst_basereg, ins->inst_offset, dreg, 4);
-
- if (dreg != ins->dreg) {
- x86_mov_reg_reg (code, ins->dreg, dreg, 4);
- x86_pop_reg (code, dreg);
- }
-
- break;
- }
- case OP_ATOMIC_ADD_NEW_I4: {
- int dreg = ins->dreg;
-
- g_assert (cfg->has_atomic_add_new_i4);
+ g_assert (cfg->has_atomic_add_i4);
/* hack: limit in regalloc, dreg != sreg1 && dreg != sreg2 */
if (ins->sreg2 == dreg) {
/* we load the value in a separate instruction: this mechanism may be
* used later as a safer way to do thread interruption
*/
- x86_mov_reg_membase (code, X86_ECX, X86_ECX, G_STRUCT_OFFSET (MonoJitTlsData, restore_stack_prot), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_ECX, MONO_STRUCT_OFFSET (MonoJitTlsData, restore_stack_prot), 4);
x86_alu_reg_imm (code, X86_CMP, X86_ECX, 0);
patch = code;
x86_branch8 (code, X86_CC_Z, 0, FALSE);
/* restore caller saved regs */
if (cfg->used_int_regs & (1 << X86_EBX)) {
- x86_mov_reg_membase (code, X86_EBX, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebx), 4);
+ x86_mov_reg_membase (code, X86_EBX, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, ebx), 4);
}
if (cfg->used_int_regs & (1 << X86_EDI)) {
- x86_mov_reg_membase (code, X86_EDI, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, edi), 4);
+ x86_mov_reg_membase (code, X86_EDI, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, edi), 4);
}
if (cfg->used_int_regs & (1 << X86_ESI)) {
- x86_mov_reg_membase (code, X86_ESI, cfg->frame_reg, lmf_offset + G_STRUCT_OFFSET (MonoLMF, esi), 4);
+ x86_mov_reg_membase (code, X86_ESI, cfg->frame_reg, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, esi), 4);
}
/* EBP is restored by LEAVE */
{
}
-#ifdef MONO_ARCH_HAVE_IMT
-
// Linear handler, the bsearch head compare is shorter
//[2 + 4] x86_alu_reg_imm (code, X86_CMP, ins->sreg1, ins->inst_imm);
//[1 + 1] x86_branch8(inst,cond,imm,is_signed)
{
return (MonoMethod*) regs [MONO_ARCH_IMT_REG];
}
-#endif
MonoVTable*
mono_arch_find_static_call_vtable (mgreg_t *regs, guint8 *code)
* The stack looks like:
* <other args>
* <this=delegate>
- * <return addr>
- * <4 pointers pushed by mono_arch_create_trampoline_code ()>
*/
- res = (((MonoObject**)esp) [5 + (offset / 4)]);
+ res = ((MonoObject**)esp) [0];
if (cinfo)
g_free (cinfo);
return res;
/* Replace the this argument with the target */
x86_mov_reg_membase (code, X86_EAX, X86_ESP, 4, 4);
- x86_mov_reg_membase (code, X86_ECX, X86_EAX, G_STRUCT_OFFSET (MonoDelegate, target), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 4);
x86_mov_membase_reg (code, X86_ESP, 4, X86_ECX, 4);
- x86_jump_membase (code, X86_EAX, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ x86_jump_membase (code, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
g_assert ((code - start) < code_reserve);
} else {
x86_mov_membase_reg (code, X86_ESP, (i+1)*4, X86_EAX, 4);
}
- x86_jump_membase (code, X86_ECX, G_STRUCT_OFFSET (MonoDelegate, method_ptr));
+ x86_jump_membase (code, X86_ECX, MONO_STRUCT_OFFSET (MonoDelegate, method_ptr));
g_assert ((code - start) < code_reserve);
}
#endif
+gboolean
+mono_arch_opcode_supported (int opcode)
+{
+ switch (opcode) {
+ case OP_ATOMIC_ADD_I4:
+ case OP_ATOMIC_EXCHANGE_I4:
+ case OP_ATOMIC_CAS_I4:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
#if defined(ENABLE_GSHAREDVT)
#include "../../../mono-extensions/mono/mini/mini-x86-gsharedvt.c"
#define MONO_ARCH_HAVE_IS_INT_OVERFLOW 1
#define MONO_ARCH_HAVE_INVALIDATE_METHOD 1
#define MONO_ARCH_NEED_GOT_VAR 1
+#ifndef HOST_WIN32
+/* X86 uses jit_tls->lmf (See emit_push_lmf ()) */
#define MONO_ARCH_ENABLE_MONO_LMF_VAR 1
+#endif
#define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
-#define MONO_ARCH_HAVE_ATOMIC_ADD 1
-#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
-#define MONO_ARCH_HAVE_ATOMIC_CAS 1
-#define MONO_ARCH_HAVE_IMT 1
#define MONO_ARCH_HAVE_TLS_GET (mono_x86_have_tls_get ())
#define MONO_ARCH_IMT_REG X86_EDX
#define MONO_ARCH_VTABLE_REG X86_EDX
MONO_FAST_TLS_DECLARE(mono_jit_tls);
#endif
-MonoTraceSpec *mono_jit_trace_calls = NULL;
+MonoTraceSpec *mono_jit_trace_calls;
gboolean mono_compile_aot = FALSE;
/* If this is set, no code is generated dynamically, everything is taken from AOT files */
gboolean mono_aot_only = FALSE;
/* Whenever to use IMT */
-gboolean mono_use_imt = ARCH_HAVE_IMT;
-MonoMethodDesc *mono_inject_async_exc_method = NULL;
+gboolean mono_use_imt = TRUE;
+MonoMethodDesc *mono_inject_async_exc_method;
int mono_inject_async_exc_pos;
-MonoMethodDesc *mono_break_at_bb_method = NULL;
+MonoMethodDesc *mono_break_at_bb_method;
int mono_break_at_bb_bb_num;
gboolean mono_do_x86_stack_align = TRUE;
const char *mono_build_date;
#define mono_jit_unlock() LeaveCriticalSection (&jit_mutex)
static CRITICAL_SECTION jit_mutex;
-static MonoCodeManager *global_codeman = NULL;
+static MonoCodeManager *global_codeman;
-static GHashTable *jit_icall_name_hash = NULL;
+static GHashTable *jit_icall_name_hash;
static MonoDebugOptions debug_options;
static GSList *tramp_infos;
+static void register_icalls (void);
+
gpointer
mono_realloc_native_code (MonoCompile *cfg)
{
static MonoMethodSignature *
mono_get_array_new_va_signature (int arity)
{
- static GHashTable *sighash = NULL;
+ static GHashTable *sighash;
MonoMethodSignature *res;
int i;
static mono_byte emul_opcode_hit_cache [(OP_LAST>>EMUL_HIT_SHIFT) + 1] = {0};
static short emul_opcode_num = 0;
static short emul_opcode_alloced = 0;
-static short *emul_opcode_opcodes = NULL;
-static MonoJitICallInfo **emul_opcode_map = NULL;
+static short *emul_opcode_opcodes;
+static MonoJitICallInfo **emul_opcode_map;
MonoJitICallInfo *
mono_find_jit_opcode_emulation (int opcode)
case TLS_KEY_JIT_TLS:
#ifdef HOST_WIN32
offset = mono_get_jit_tls_key ();
- /* Only 64 tls entries can be accessed using inline code */
- if (offset >= 64)
- offset = -1;
#else
offset = mono_get_jit_tls_offset ();
#endif
break;
}
+#if defined(HOST_WIN32) && defined(TARGET_AMD64)
+ /* Only 64 tls entries can be accessed using inline code */
+ if (offset >= 64)
+ offset = -1;
+#endif
+
return offset;
}
return mini_get_tls_offset (key) != -1;
}
+static gboolean
+mini_tls_key_supported (MonoTlsKey key)
+{
+ if (!MONO_ARCH_HAVE_TLS_GET)
+ return FALSE;
+
+ return mini_get_tls_offset (key) != -1;
+}
+
MonoInst*
mono_create_tls_get (MonoCompile *cfg, MonoTlsKey key)
{
jinfo->d.method = wrapper;
jinfo->code_start = info->code;
jinfo->code_size = info->code_size;
- jinfo->used_regs = mono_cache_unwind_info (uw_info, info_len);
+ jinfo->unwind_info = mono_cache_unwind_info (uw_info, info_len);
if (!info->uw_info)
g_free (uw_info);
jinfo->d.method = cfg->method_to_register;
jinfo->code_start = cfg->native_code;
jinfo->code_size = cfg->code_len;
- jinfo->used_regs = cfg->used_int_regs;
jinfo->domain_neutral = (cfg->opt & MONO_OPT_SHARED) != 0;
jinfo->num_clauses = num_clauses;
}
}
- /*
- * Its possible to generate dwarf unwind info for xdebug etc, but not actually
- * using it during runtime, hence the define.
- */
if (cfg->encoded_unwind_ops) {
- jinfo->used_regs = mono_cache_unwind_info (cfg->encoded_unwind_ops, cfg->encoded_unwind_ops_len);
+ /* Generated by LLVM */
+ jinfo->unwind_info = mono_cache_unwind_info (cfg->encoded_unwind_ops, cfg->encoded_unwind_ops_len);
g_free (cfg->encoded_unwind_ops);
} else if (cfg->unwind_ops) {
guint32 info_len;
guint8 *unwind_info = mono_unwind_ops_encode (cfg->unwind_ops, &info_len);
+ guint32 unwind_desc;
- jinfo->used_regs = mono_cache_unwind_info (unwind_info, info_len);
+ unwind_desc = mono_cache_unwind_info (unwind_info, info_len);
+
+ if (cfg->has_unwind_info_for_epilog) {
+ /*
+ * The lower 16 bits identify the unwind descriptor, the upper 16 bits contain the offset of
+ * the start of the epilog from the end of the method.
+ */
+ g_assert (unwind_desc < 0xffff);
+ g_assert (cfg->code_size - cfg->epilog_begin < 0xffff);
+ jinfo->unwind_info = ((cfg->code_size - cfg->epilog_begin) << 16) | unwind_desc;
+ } else {
+ jinfo->unwind_info = unwind_desc;
+ }
g_free (unwind_info);
+ } else {
+ jinfo->unwind_info = cfg->used_int_regs;
}
return jinfo;
}
#if ENABLE_JIT_MAP
-static FILE* perf_map_file = NULL;
+static FILE* perf_map_file;
void
mono_enable_jit_map (void)
gboolean mono_do_single_method_regression = FALSE;
guint32 mono_single_method_regression_opt = 0;
-MonoMethod *mono_current_single_method = NULL;
-GSList *mono_single_method_list = NULL;
-GHashTable *mono_single_method_hash = NULL;
+MonoMethod *mono_current_single_method;
+GSList *mono_single_method_list;
+GHashTable *mono_single_method_hash;
guint32
mono_get_optimizations_for_method (MonoMethod *method, guint32 default_opt)
InitializeCriticalSection (&jit_mutex);
+ mono_cross_helpers_run ();
+
/* Happens when using the embedding interface */
if (!default_opt_set)
default_opt = mono_parse_default_optimizations (NULL);
if (!global_codeman)
global_codeman = mono_code_manager_new ();
- jit_icall_name_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
memset (&callbacks, 0, sizeof (callbacks));
callbacks.create_ftnptr = mini_create_ftnptr;
callbacks.set_cast_details = mono_set_cast_details;
callbacks.debug_log = mono_debugger_agent_debug_log;
callbacks.debug_log_is_enabled = mono_debugger_agent_debug_log_is_enabled;
+ callbacks.tls_key_supported = mini_tls_key_supported;
-#ifdef MONO_ARCH_HAVE_IMT
if (mono_use_imt) {
callbacks.get_vtable_trampoline = mini_get_vtable_trampoline;
callbacks.get_imt_trampoline = mini_get_imt_trampoline;
}
-#endif
mono_install_callbacks (&callbacks);
mono_threads_runtime_init (&ticallbacks);
-
if (g_getenv ("MONO_DEBUG") != NULL)
mini_parse_debug_options ();
mono_trampolines_init ();
- if (!g_thread_supported ())
- g_thread_init (NULL);
-
mono_native_tls_alloc (&mono_jit_tls_id, NULL);
if (default_opt & MONO_OPT_AOT)
mono_install_get_class_from_name (mono_aot_get_class_from_name);
mono_install_jit_info_find_in_aot (mono_aot_find_jit_info);
- if (debug_options.collect_pagefault_stats) {
+ if (debug_options.collect_pagefault_stats)
mono_aot_set_make_unreadable (TRUE);
- }
if (runtime_version)
domain = mono_init_version (filename, runtime_version);
mono_marshal_use_aot_wrappers (TRUE);
}
-#ifdef MONO_ARCH_HAVE_IMT
if (mono_use_imt) {
if (mono_aot_only)
mono_install_imt_thunk_builder (mono_aot_get_imt_thunk);
else
mono_install_imt_thunk_builder (mono_arch_build_imt_thunk);
}
-#endif
/*Init arch tls information only after the metadata side is inited to make sure we see dynamic appdomain tls keys*/
mono_arch_finish_init ();
/* This should come after mono_init () too */
mini_gc_init ();
+#ifndef DISABLE_JIT
+ mono_create_helper_signatures ();
+#endif
+
+ register_jit_stats ();
+
+#define JIT_CALLS_WORK
+#ifdef JIT_CALLS_WORK
+ /* Needs to be called here since register_jit_icall depends on it */
+ mono_marshal_init ();
+
+ jit_icall_name_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+ mono_arch_register_lowlevel_calls ();
+
+ register_icalls ();
+
+ mono_generic_sharing_init ();
+#endif
+
+#ifdef MONO_ARCH_SIMD_INTRINSICS
+ mono_simd_intrinsics_init ();
+#endif
+
+#if MONO_SUPPORT_TASKLETS
+ mono_tasklets_init ();
+#endif
+
+ if (mono_compile_aot)
+ /*
+ * Avoid running managed code when AOT compiling, since the platform
+ * might only support aot-only execution.
+ */
+ mono_runtime_set_no_exec (TRUE);
+
+#define JIT_RUNTIME_WORKS
+#ifdef JIT_RUNTIME_WORKS
+ mono_install_runtime_cleanup ((MonoDomainFunc)mini_cleanup);
+ mono_runtime_init (domain, mono_thread_start_cb, mono_thread_attach_cb);
+ mono_thread_attach (domain);
+#endif
+
+ mono_profiler_runtime_initialized ();
+
+ MONO_VES_INIT_END ();
+
+ return domain;
+}
+
+static void
+register_icalls (void)
+{
mono_add_internal_call ("System.Diagnostics.StackFrame::get_frame_info",
ves_icall_get_frame_info);
mono_add_internal_call ("System.Diagnostics.StackTrace::get_trace",
mono_debugger_agent_unhandled_exception);
#endif
-#ifndef DISABLE_JIT
- mono_create_helper_signatures ();
-#endif
-
- register_jit_stats ();
-
-#define JIT_CALLS_WORK
-#ifdef JIT_CALLS_WORK
- /* Needs to be called here since register_jit_icall depends on it */
- mono_marshal_init ();
-
- mono_arch_register_lowlevel_calls ();
-
/*
* It's important that we pass `TRUE` as the last argument here, as
* it causes the JIT to omit a wrapper for these icalls. If the JIT
register_icall (mono_object_isinst_with_cache, "mono_object_isinst_with_cache", "object object ptr ptr", FALSE);
register_icall (mono_debugger_agent_user_break, "mono_debugger_agent_user_break", "void", FALSE);
-#endif
#ifdef TARGET_IOS
register_icall (pthread_getspecific, "pthread_getspecific", "ptr ptr", TRUE);
#endif
-
- mono_generic_sharing_init ();
-
-#ifdef MONO_ARCH_SIMD_INTRINSICS
- mono_simd_intrinsics_init ();
-#endif
-
-#if MONO_SUPPORT_TASKLETS
- mono_tasklets_init ();
-#endif
-
- if (mono_compile_aot)
- /*
- * Avoid running managed code when AOT compiling, since the platform
- * might only support aot-only execution.
- */
- mono_runtime_set_no_exec (TRUE);
-
-#define JIT_RUNTIME_WORKS
-#ifdef JIT_RUNTIME_WORKS
- mono_install_runtime_cleanup ((MonoDomainFunc)mini_cleanup);
- mono_runtime_init (domain, mono_thread_start_cb, mono_thread_attach_cb);
- mono_thread_attach (domain);
-#endif
-
- mono_profiler_runtime_initialized ();
-
- MONO_VES_INIT_END ();
-
- return domain;
}
MonoJitStats mono_jit_stats = {0};
#endif
-#ifndef MONO_ARCH_HAVE_OPCODE_SUPPORTED
-
-gboolean
-mono_arch_opcode_supported (int opcode)
-{
- return TRUE;
-}
-
-#endif
-
#if defined(MONO_ARCH_GSHAREDVT_SUPPORTED) && !defined(ENABLE_GSHAREDVT)
gboolean
/* gpointer entries[total]; */
} MonoJumpTableChunk;
-static MonoJumpTableChunk* g_jumptable = NULL;
+static MonoJumpTableChunk* g_jumptable;
#define mono_jumptable_lock() EnterCriticalSection (&jumptable_mutex)
#define mono_jumptable_unlock() LeaveCriticalSection (&jumptable_mutex)
static CRITICAL_SECTION jumptable_mutex;
#define printf g_print
#endif
+#if !defined(HAVE_KW_THREAD) || !defined(MONO_ARCH_ENABLE_MONO_LMF_VAR)
+#define MONO_JIT_TLS_DATA_HAS_LMF
+#endif
+
#define MONO_TYPE_IS_PRIMITIVE(t) ((!(t)->byref && ((((t)->type >= MONO_TYPE_BOOLEAN && (t)->type <= MONO_TYPE_R8) || ((t)->type >= MONO_TYPE_I && (t)->type <= MONO_TYPE_U)))))
/* Constants used to encode different types of methods in AOT */
typedef struct {
gpointer end_of_stack;
guint32 stack_size;
-#if !defined(HAVE_KW_THREAD) || !defined(MONO_ARCH_ENABLE_MONO_LMF_VAR)
+ /* !defined(HAVE_KW_THREAD) || !defined(MONO_ARCH_ENABLE_MONO_LMF_VAR) */
MonoLMF *lmf;
-#endif
MonoLMF *first_lmf;
gpointer restore_stack_prot;
guint32 handling_stack_ovf;
MONO_TRAMPOLINE_NUM
} MonoTrampolineType;
+/* These trampolines return normally to their caller */
#define MONO_TRAMPOLINE_TYPE_MUST_RETURN(t) \
((t) == MONO_TRAMPOLINE_CLASS_INIT || \
(t) == MONO_TRAMPOLINE_GENERIC_CLASS_INIT || \
guint soft_breakpoints : 1;
guint arch_eh_jit_info : 1;
guint has_indirection : 1;
- guint has_atomic_add_new_i4 : 1;
+ guint has_atomic_add_i4 : 1;
guint has_atomic_exchange_i4 : 1;
guint has_atomic_cas_i4 : 1;
guint check_pinvoke_callconv : 1;
+ guint has_unwind_info_for_epilog : 1;
gpointer debug_info;
guint32 lmf_offset;
guint16 *intvars;
pid_t mono_runtime_syscall_fork (void) MONO_INTERNAL;
void mono_gdb_render_native_backtraces (pid_t crashed_pid) MONO_INTERNAL;
+void mono_cross_helpers_run (void) MONO_INTERNAL;
+
/*
* Signal handling
*/
#define MONO_ARCH_DYN_CALL_PARAM_AREA 0
#endif
-#ifdef MONO_ARCH_HAVE_IMT
-#define ARCH_HAVE_IMT 1
-#else
-#define ARCH_HAVE_IMT 0
-#endif
-
#ifdef MONO_ARCH_VARARG_ICALLS
#define ARCH_VARARG_ICALLS 1
#else
#include "mini.h"
#include "ir-emit.h"
#include "mono/utils/bsearch.h"
+#include <mono/metadata/abi-details.h>
/*
General notes on SIMD intrinsics
MONO_EMIT_NEW_BIALU_IMM (cfg, OP_MUL_IMM, mult_reg, index2_reg, size);
MONO_EMIT_NEW_BIALU (cfg, OP_PADD, add_reg, array_reg, mult_reg);
- NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, add_reg, add_reg, G_STRUCT_OFFSET (MonoArray, vector));
+ NEW_BIALU_IMM (cfg, ins, OP_PADD_IMM, add_reg, add_reg, MONO_STRUCT_OFFSET (MonoArray, vector));
ins->type = STACK_PTR;
MONO_ADD_INS (cfg->cbb, ins);
}
#if (MONO_APPLY_SSAPRE_TO_SINGLE_EXPRESSION)
-static char *mono_ssapre_expression_name = NULL;
+static char *mono_ssapre_expression_name;
static gboolean
check_ssapre_expression_name (MonoSsapreWorkArea *area, MonoSsapreExpressionDescription *expression_description) {
if (area->expression_is_handled_father) {
#if defined(MONO_SUPPORT_TASKLETS)
/* keepalive_stacks could be a per-stack var to avoid locking overhead */
-static MonoGHashTable *keepalive_stacks = NULL;
+static MonoGHashTable *keepalive_stacks;
static CRITICAL_SECTION tasklets_mutex;
#define tasklets_lock() EnterCriticalSection(&tasklets_mutex)
#define tasklets_unlock() LeaveCriticalSection(&tasklets_mutex)
#include <config.h>
#include <glib.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/marshal.h>
#include <mono/metadata/tabledefs.h>
amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, 8, sizeof(gpointer));
else
amd64_mov_reg_imm (code, AMD64_R11, 0);
- amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rip), AMD64_R11, sizeof(mgreg_t));
+ amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rip), AMD64_R11, sizeof(mgreg_t));
/* Save fp */
amd64_mov_reg_membase (code, AMD64_R11, AMD64_RSP, framesize, sizeof(mgreg_t));
- amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rbp), AMD64_R11, sizeof(mgreg_t));
+ amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rbp), AMD64_R11, sizeof(mgreg_t));
/* Save sp */
amd64_mov_reg_reg (code, AMD64_R11, AMD64_RSP, sizeof(mgreg_t));
amd64_alu_reg_imm (code, X86_ADD, AMD64_R11, framesize + 16);
- amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, rsp), AMD64_R11, sizeof(mgreg_t));
+ amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, rsp), AMD64_R11, sizeof(mgreg_t));
/* Save pointer to registers */
amd64_lea_membase (code, AMD64_R11, AMD64_RBP, saved_regs_offset);
- amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMFTramp, regs), AMD64_R11, sizeof(mgreg_t));
+ amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMFTramp, regs), AMD64_R11, sizeof(mgreg_t));
if (aot) {
code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_get_lmf_addr");
amd64_call_reg (code, AMD64_R11);
/* Save lmf_addr */
- amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMFTramp, lmf_addr), AMD64_RAX, sizeof(gpointer));
+ amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMFTramp, lmf_addr), AMD64_RAX, sizeof(gpointer));
/* Save previous_lmf */
/* Set the lowest bit to signal that this LMF has the ip field set */
/* Set the third lowest bit to signal that this is a MonoLMFTramp structure */
amd64_mov_reg_membase (code, AMD64_R11, AMD64_RAX, 0, sizeof(gpointer));
amd64_alu_reg_imm_size (code, X86_ADD, AMD64_R11, 0x5, sizeof(gpointer));
- amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), AMD64_R11, sizeof(gpointer));
+ amd64_mov_membase_reg (code, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), AMD64_R11, sizeof(gpointer));
/* Set new lmf */
amd64_lea_membase (code, AMD64_R11, AMD64_RBP, lmf_offset);
amd64_mov_membase_reg (code, AMD64_RAX, 0, AMD64_R11, sizeof(gpointer));
amd64_mov_reg_membase (code, AMD64_RAX, AMD64_RBP, res_offset, sizeof(mgreg_t));
/* Restore LMF */
- amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), sizeof(gpointer));
+ amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMF, previous_lmf), sizeof(gpointer));
amd64_alu_reg_imm_size (code, X86_SUB, AMD64_RCX, 0x5, sizeof(gpointer));
- amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, lmf_offset + G_STRUCT_OFFSET (MonoLMFTramp, lmf_addr), sizeof(gpointer));
+ amd64_mov_reg_membase (code, AMD64_R11, AMD64_RBP, lmf_offset + MONO_STRUCT_OFFSET (MonoLMFTramp, lmf_addr), sizeof(gpointer));
amd64_mov_membase_reg (code, AMD64_R11, 0, AMD64_RCX, sizeof(gpointer));
/*
amd64_mov_reg_reg (code, AMD64_RAX, AMD64_ARG_REG1, 8);
} else {
/* load rgctx ptr from vtable */
- amd64_mov_reg_membase (code, AMD64_RAX, AMD64_ARG_REG1, G_STRUCT_OFFSET (MonoVTable, runtime_generic_context), sizeof(gpointer));
+ amd64_mov_reg_membase (code, AMD64_RAX, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context), sizeof(gpointer));
/* is the rgctx ptr null? */
amd64_test_reg_reg (code, AMD64_RAX, AMD64_RAX);
/* if yes, jump to actual trampoline */
amd64_branch8 (code, X86_CC_Z, -1, 1);
/* load obj->synchronization to RCX */
- amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RDI, G_STRUCT_OFFSET (MonoObject, synchronisation), 8);
+ amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RDI, MONO_STRUCT_OFFSET (MonoObject, synchronisation), 8);
if (mono_gc_is_moving ()) {
/*if bit zero is set it's a thin hash*/
/* load MonoInternalThread* into RDX */
code = mono_amd64_emit_tls_get (code, AMD64_RDX, mono_thread_get_tls_offset ());
/* load TID into RDX */
- amd64_mov_reg_membase (code, AMD64_RDX, AMD64_RDX, G_STRUCT_OFFSET (MonoInternalThread, tid), 8);
+ amd64_mov_reg_membase (code, AMD64_RDX, AMD64_RDX, MONO_STRUCT_OFFSET (MonoInternalThread, tid), 8);
/* is synchronization->owner null? */
amd64_alu_membase_imm_size (code, X86_CMP, AMD64_RCX, owner_offset, 0, 8);
amd64_branch8 (code, X86_CC_Z, -1, 1);
/* load obj->synchronization to RCX */
- amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RDI, G_STRUCT_OFFSET (MonoObject, synchronisation), 8);
+ amd64_mov_reg_membase (code, AMD64_RCX, AMD64_RDI, MONO_STRUCT_OFFSET (MonoObject, synchronisation), 8);
if (mono_gc_is_moving ()) {
/*if bit zero is set it's a thin hash*/
/* load MonoInternalThread* into RDX */
code = mono_amd64_emit_tls_get (code, AMD64_RDX, mono_thread_get_tls_offset ());
/* load TID into RDX */
- amd64_mov_reg_membase (code, AMD64_RDX, AMD64_RDX, G_STRUCT_OFFSET (MonoInternalThread, tid), 8);
+ amd64_mov_reg_membase (code, AMD64_RDX, AMD64_RDX, MONO_STRUCT_OFFSET (MonoInternalThread, tid), 8);
/* is synchronization->owner == TID */
amd64_alu_membase_reg_size (code, X86_CMP, AMD64_RCX, owner_offset, AMD64_RDX, 8);
/* if no, jump to actual trampoline */
if (mono_get_jit_tls_offset () != -1) {
code = mono_amd64_emit_tls_get (code, AMD64_RDI, mono_get_jit_tls_offset ());
- amd64_mov_reg_membase (code, AMD64_RDI, AMD64_RDI, G_STRUCT_OFFSET (MonoJitTlsData, handler_block_return_address), 8);
+ amd64_mov_reg_membase (code, AMD64_RDI, AMD64_RDI, MONO_STRUCT_OFFSET (MonoJitTlsData, handler_block_return_address), 8);
/* Simulate a call */
amd64_push_reg (code, AMD64_RAX);
amd64_jump_code (code, tramp);
#include <config.h>
#include <glib.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/marshal.h>
#include <mono/metadata/tabledefs.h>
*/
/* r0 is the result from mono_get_lmf_addr () */
- ARM_STR_IMM (code, ARMREG_R0, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, lmf_addr));
+ ARM_STR_IMM (code, ARMREG_R0, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, lmf_addr));
/* new_lmf->previous_lmf = *lmf_addr */
- ARM_LDR_IMM (code, ARMREG_R2, ARMREG_R0, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
- ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_LDR_IMM (code, ARMREG_R2, ARMREG_R0, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* *(lmf_addr) = r1 */
- ARM_STR_IMM (code, ARMREG_V1, ARMREG_R0, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_STR_IMM (code, ARMREG_V1, ARMREG_R0, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* save method info (it's in v2) */
if ((tramp_type == MONO_TRAMPOLINE_JIT) || (tramp_type == MONO_TRAMPOLINE_JUMP))
- ARM_STR_IMM (code, ARMREG_V2, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, method));
+ ARM_STR_IMM (code, ARMREG_V2, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, method));
else {
ARM_MOV_REG_IMM8 (code, ARMREG_R2, 0);
- ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, method));
+ ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, method));
}
/* save caller SP */
code = mono_arm_emit_load_imm (code, ARMREG_R2, cfa_offset);
ARM_ADD_REG_REG (code, ARMREG_R2, ARMREG_SP, ARMREG_R2);
- ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, sp));
+ ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, sp));
/* save caller FP */
- ARM_LDR_IMM (code, ARMREG_R2, ARMREG_V1, (G_STRUCT_OFFSET (MonoLMF, iregs) + ARMREG_FP*4));
- ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, fp));
+ ARM_LDR_IMM (code, ARMREG_R2, ARMREG_V1, (MONO_STRUCT_OFFSET (MonoLMF, iregs) + ARMREG_FP*4));
+ ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, fp));
/* save the IP (caller ip) */
if (tramp_type == MONO_TRAMPOLINE_JUMP) {
ARM_MOV_REG_IMM8 (code, ARMREG_R2, 0);
} else {
- ARM_LDR_IMM (code, ARMREG_R2, ARMREG_V1, (G_STRUCT_OFFSET (MonoLMF, iregs) + 13*4));
+ ARM_LDR_IMM (code, ARMREG_R2, ARMREG_V1, (MONO_STRUCT_OFFSET (MonoLMF, iregs) + 13*4));
}
- ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, ip));
+ ARM_STR_IMM (code, ARMREG_R2, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, ip));
/* Save VFP registers. */
if (mono_arm_is_hard_float ()) {
* it's easier than attempting to store them on the stack since
* this trampoline code is pretty messy.
*/
- ARM_ADD_REG_IMM8 (code, ARMREG_R0, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, fregs));
+ ARM_ADD_REG_IMM8 (code, ARMREG_R0, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, fregs));
ARM_FSTMD (code, ARM_VFP_D0, 8, ARMREG_R0);
}
* Now we're ready to call xxx_trampoline ().
*/
/* Arg 1: the saved registers */
- ARM_ADD_REG_IMM (code, ARMREG_R0, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, iregs), 0);
+ ARM_ADD_REG_IMM (code, ARMREG_R0, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, iregs), 0);
/* Arg 2: code (next address to the instruction that called us) */
if (tramp_type == MONO_TRAMPOLINE_JUMP) {
* clobbered). This way we can just restore all the regs in one inst
* and branch to IP.
*/
- ARM_STR_IMM (code, ARMREG_R0, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, iregs) + (ARMREG_R12 * sizeof (mgreg_t)));
+ ARM_STR_IMM (code, ARMREG_R0, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, iregs) + (ARMREG_R12 * sizeof (mgreg_t)));
/* Check for thread interruption */
/* This is not perf critical code so no need to check the interrupt flag */
* the same state as before we executed.
*/
/* ip = previous_lmf */
- ARM_LDR_IMM (code, ARMREG_IP, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_LDR_IMM (code, ARMREG_IP, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* lr = lmf_addr */
- ARM_LDR_IMM (code, ARMREG_LR, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, lmf_addr));
+ ARM_LDR_IMM (code, ARMREG_LR, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, lmf_addr));
/* *(lmf_addr) = previous_lmf */
- ARM_STR_IMM (code, ARMREG_IP, ARMREG_LR, G_STRUCT_OFFSET (MonoLMF, previous_lmf));
+ ARM_STR_IMM (code, ARMREG_IP, ARMREG_LR, MONO_STRUCT_OFFSET (MonoLMF, previous_lmf));
/* Restore VFP registers. */
if (mono_arm_is_hard_float ()) {
- ARM_ADD_REG_IMM8 (code, ARMREG_R0, ARMREG_V1, G_STRUCT_OFFSET (MonoLMF, fregs));
+ ARM_ADD_REG_IMM8 (code, ARMREG_R0, ARMREG_V1, MONO_STRUCT_OFFSET (MonoLMF, fregs));
ARM_FLDMD (code, ARM_VFP_D0, 8, ARMREG_R0);
}
ARM_MOV_REG_REG (code, ARMREG_R1, ARMREG_R0);
} else {
/* load rgctx ptr from vtable */
- g_assert (arm_is_imm12 (G_STRUCT_OFFSET (MonoVTable, runtime_generic_context)));
- ARM_LDR_IMM (code, ARMREG_R1, ARMREG_R0, G_STRUCT_OFFSET (MonoVTable, runtime_generic_context));
+ g_assert (arm_is_imm12 (MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context)));
+ ARM_LDR_IMM (code, ARMREG_R1, ARMREG_R0, MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context));
/* is the rgctx ptr null? */
ARM_CMP_REG_IMM (code, ARMREG_R1, 0, 0);
/* if yes, jump to actual trampoline */
#include <config.h>
#include <glib.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/marshal.h>
#include <mono/metadata/tabledefs.h>
mips_move (code, mips_a1, mips_a0);
} else {
/* load rgctx ptr from vtable */
- g_assert (mips_is_imm16 (G_STRUCT_OFFSET (MonoVTable, runtime_generic_context)));
- mips_lw (code, mips_a1, mips_a0, G_STRUCT_OFFSET (MonoVTable, runtime_generic_context));
+ g_assert (mips_is_imm16 (MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context)));
+ mips_lw (code, mips_a1, mips_a0, MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context));
/* is the rgctx ptr null? */
/* if yes, jump to actual trampoline */
rgctx_null_jumps [njumps ++] = code;
#include <config.h>
#include <glib.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/marshal.h>
#include <mono/metadata/tabledefs.h>
ppc_mr (code, ppc_r4, PPC_FIRST_ARG_REG);
} else {
/* load rgctx ptr from vtable */
- ppc_ldptr (code, ppc_r4, G_STRUCT_OFFSET (MonoVTable, runtime_generic_context), PPC_FIRST_ARG_REG);
+ ppc_ldptr (code, ppc_r4, MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context), PPC_FIRST_ARG_REG);
/* is the rgctx ptr null? */
ppc_compare_reg_imm (code, 0, ppc_r4, 0);
/* if yes, jump to actual trampoline */
#include <glib.h>
#include <string.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/marshal.h>
#include <mono/metadata/tabledefs.h>
s390_lgr (code, s390_r1, s390_r2);
} else {
/* load rgctx ptr from vtable */
- s390_lg (code, s390_r1, 0, s390_r2, G_STRUCT_OFFSET(MonoVTable, runtime_generic_context));
+ s390_lg (code, s390_r1, 0, s390_r2, MONO_STRUCT_OFFSET(MonoVTable, runtime_generic_context));
/* is the rgctx ptr null? */
s390_ltgr (code, s390_r1, s390_r1);
/* if yes, jump to actual trampoline */
#include <config.h>
#include <glib.h>
+#include <mono/metadata/abi-details.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/metadata-internals.h>
#include <mono/metadata/marshal.h>
#include "mini.h"
#include "mini-x86.h"
+#define ALIGN_TO(val,align) ((((guint64)val) + ((align) - 1)) & ~((align) - 1))
+
/*
* mono_arch_get_unbox_trampoline:
* @m: method pointer
{
char *tramp_name;
guint8 *buf, *code, *tramp;
- int pushed_args, pushed_args_caller_saved;
GSList *unwind_ops = NULL;
MonoJumpInfo *ji = NULL;
+ int i, offset, frame_size, regarray_offset, lmf_offset, caller_ip_offset, arg_offset;
unwind_ops = mono_arch_get_cie_program ();
* the ret address is at: esp + (pushed_args + 1) * sizeof (gpointer)
*/
- /* Put all registers into an array on the stack
- * If this code is changed, make sure to update the offset value in
- * mono_arch_get_this_arg_from_call () in mini-x86.c.
- */
- x86_push_reg (code, X86_EDI);
- x86_push_reg (code, X86_ESI);
- x86_push_reg (code, X86_EBP);
- x86_push_reg (code, X86_ESP);
- x86_push_reg (code, X86_EBX);
- x86_push_reg (code, X86_EDX);
- x86_push_reg (code, X86_ECX);
- x86_push_reg (code, X86_EAX);
-
- pushed_args_caller_saved = pushed_args = 8;
-
- /* Align stack on apple */
- x86_alu_reg_imm (code, X86_SUB, X86_ESP, 4);
-
- pushed_args ++;
-
- /* save LMF begin */
-
- /* save the IP (caller ip) */
- if (tramp_type == MONO_TRAMPOLINE_JUMP)
- x86_push_imm (code, 0);
- else
- x86_push_membase (code, X86_ESP, (pushed_args + 1) * sizeof (gpointer));
-
- pushed_args++;
-
+ // FIXME: Unwind info
+
+ /* Compute frame offsets relative to the frame pointer %ebp */
+ arg_offset = sizeof (mgreg_t);
+ caller_ip_offset = 2 * sizeof (mgreg_t);
+ offset = 0;
+ offset += sizeof (MonoLMF);
+ lmf_offset = -offset;
+ offset += X86_NREG * sizeof (mgreg_t);
+ regarray_offset = -offset;
+ /* Argument area */
+ offset += 4 * sizeof (mgreg_t);
+ frame_size = ALIGN_TO (offset, MONO_ARCH_FRAME_ALIGNMENT);
+
+ /* Allocate frame */
x86_push_reg (code, X86_EBP);
- x86_push_reg (code, X86_ESI);
- x86_push_reg (code, X86_EDI);
- x86_push_reg (code, X86_EBX);
-
- pushed_args += 4;
-
- /* save ESP */
- x86_push_reg (code, X86_ESP);
- /* Adjust ESP so it points to the previous frame */
- x86_alu_membase_imm (code, X86_ADD, X86_ESP, 0, (pushed_args + 2) * 4);
-
- pushed_args ++;
-
- /* save method info */
- if ((tramp_type == MONO_TRAMPOLINE_JIT) || (tramp_type == MONO_TRAMPOLINE_JUMP))
- x86_push_membase (code, X86_ESP, pushed_args * sizeof (gpointer));
- else
- x86_push_imm (code, 0);
-
- pushed_args++;
-
- /* On apple, the stack is correctly aligned to 16 bytes because pushed_args is
- * 16 and there is the extra trampoline arg + the return ip pushed by call
- * FIXME: Note that if an exception happens while some args are pushed
- * on the stack, the stack will be misaligned.
- */
- g_assert (pushed_args == 16);
+ x86_mov_reg_reg (code, X86_EBP, X86_ESP, sizeof (mgreg_t));
+ /* There are three words on the stack, adding + 4 aligns the stack to 16, which is needed on osx */
+ x86_alu_reg_imm (code, X86_SUB, X86_ESP, frame_size + sizeof (mgreg_t));
+
+ /* Save all registers */
+ for (i = X86_EAX; i <= X86_EDI; ++i) {
+ int reg = i;
+
+ if (i == X86_EBP) {
+ /* Save original ebp */
+ /* EAX is already saved */
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, 0, sizeof (mgreg_t));
+ reg = X86_EAX;
+ } else if (i == X86_ESP) {
+ /* Save original esp */
+ /* EAX is already saved */
+ x86_mov_reg_reg (code, X86_EAX, X86_EBP, sizeof (mgreg_t));
+ /* Saved ebp + trampoline arg + return addr */
+ x86_alu_reg_imm (code, X86_ADD, X86_EAX, 3 * sizeof (mgreg_t));
+ reg = X86_EAX;
+ }
+ x86_mov_membase_reg (code, X86_EBP, regarray_offset + (i * sizeof (mgreg_t)), reg, sizeof (mgreg_t));
+ }
+ /* Setup LMF */
+ /* eip */
+ if (tramp_type == MONO_TRAMPOLINE_JUMP) {
+ x86_mov_membase_imm (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, eip), 0, sizeof (mgreg_t));
+ } else {
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, caller_ip_offset, sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, eip), X86_EAX, sizeof (mgreg_t));
+ }
+ /* method */
+ if ((tramp_type == MONO_TRAMPOLINE_JIT) || (tramp_type == MONO_TRAMPOLINE_JUMP)) {
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, arg_offset, sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, method), X86_EAX, sizeof (mgreg_t));
+ } else {
+ x86_mov_membase_imm (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, method), 0, sizeof (mgreg_t));
+ }
+ /* esp */
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, regarray_offset + (X86_ESP * sizeof (mgreg_t)), sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, esp), X86_EAX, sizeof (mgreg_t));
+ /* callee save registers */
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, regarray_offset + (X86_EBX * sizeof (mgreg_t)), sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebx), X86_EAX, sizeof (mgreg_t));
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, regarray_offset + (X86_EDI * sizeof (mgreg_t)), sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, edi), X86_EAX, sizeof (mgreg_t));
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, regarray_offset + (X86_ESI * sizeof (mgreg_t)), sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, esi), X86_EAX, sizeof (mgreg_t));
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, regarray_offset + (X86_EBP * sizeof (mgreg_t)), sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, ebp), X86_EAX, sizeof (mgreg_t));
+
+ /* Push LMF */
/* get the address of lmf for the current thread */
if (aot) {
code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_get_lmf_addr");
} else {
x86_call_code (code, mono_get_lmf_addr);
}
- /* push lmf */
- x86_push_reg (code, X86_EAX);
- /* push *lfm (previous_lmf) */
- x86_push_membase (code, X86_EAX, 0);
+ /* lmf->lmf_addr = lmf_addr (%eax) */
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, lmf_addr), X86_EAX, sizeof (mgreg_t));
+ /* lmf->previous_lmf = *(lmf_addr) */
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, 0, sizeof (mgreg_t));
/* Signal to mono_arch_find_jit_info () that this is a trampoline frame */
- x86_alu_membase_imm (code, X86_ADD, X86_ESP, 0, 1);
- /* *(lmf) = ESP */
- x86_mov_membase_reg (code, X86_EAX, 0, X86_ESP, 4);
- /* save LFM end */
-
- pushed_args += 2;
-
- /* starting the call sequence */
-
- /* FIXME: Push the trampoline address */
- x86_push_imm (code, 0);
-
- pushed_args++;
-
- /* push the method info */
- x86_push_membase (code, X86_ESP, pushed_args * sizeof (gpointer));
-
- pushed_args++;
-
- /* push the return address onto the stack */
- if (tramp_type == MONO_TRAMPOLINE_JUMP)
- x86_push_imm (code, 0);
- else
- x86_push_membase (code, X86_ESP, (pushed_args + 1) * sizeof (gpointer));
- pushed_args++;
- /* push the address of the register array */
- x86_lea_membase (code, X86_EAX, X86_ESP, (pushed_args - 8) * sizeof (gpointer));
- x86_push_reg (code, X86_EAX);
-
- pushed_args++;
-
+ x86_alu_reg_imm (code, X86_ADD, X86_ECX, 1);
+ x86_mov_membase_reg (code, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), X86_ECX, sizeof (mgreg_t));
+ /* *lmf_addr = lmf */
+ x86_lea_membase (code, X86_ECX, X86_EBP, lmf_offset);
+ x86_mov_membase_reg (code, X86_EAX, 0, X86_ECX, sizeof (mgreg_t));
+
+ /* Call trampoline function */
+ /* Arg 1 - registers */
+ x86_lea_membase (code, X86_EAX, X86_EBP, regarray_offset);
+ x86_mov_membase_reg (code, X86_ESP, (0 * sizeof (mgreg_t)), X86_EAX, sizeof (mgreg_t));
+ /* Arg2 - calling code */
+ if (tramp_type == MONO_TRAMPOLINE_JUMP) {
+ x86_mov_membase_imm (code, X86_ESP, (1 * sizeof (mgreg_t)), 0, sizeof (mgreg_t));
+ } else {
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, caller_ip_offset, sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_ESP, (1 * sizeof (mgreg_t)), X86_EAX, sizeof (mgreg_t));
+ }
+ /* Arg3 - trampoline argument */
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, arg_offset, sizeof (mgreg_t));
+ x86_mov_membase_reg (code, X86_ESP, (2 * sizeof (mgreg_t)), X86_EAX, sizeof (mgreg_t));
+ /* Arg4 - trampoline address */
+ // FIXME:
+ x86_mov_membase_imm (code, X86_ESP, (3 * sizeof (mgreg_t)), 0, sizeof (mgreg_t));
+
+ // FIXME:
#ifdef __APPLE__
/* check the stack is aligned after the ret ip is pushed */
/*x86_mov_reg_reg (buf, X86_EDX, X86_ESP, 4);
x86_breakpoint (buf);*/
#endif
- mono_add_unwind_op_def_cfa (unwind_ops, code, buf, X86_ESP, ((pushed_args + 2) * 4));
-
if (aot) {
char *icall_name = g_strdup_printf ("trampoline_func_%d", tramp_type);
code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, icall_name);
x86_call_code (code, tramp);
}
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, 4*4);
-
- pushed_args -= 4;
+ /*
+ * Overwrite the trampoline argument with the address we need to jump to,
+ * to free %eax.
+ */
+ x86_mov_membase_reg (code, X86_EBP, arg_offset, X86_EAX, 4);
- /* Check for thread interruption */
- /* This is not perf critical code so no need to check the interrupt flag */
- /* Align the stack on osx */
- x86_alu_reg_imm (code, X86_SUB, X86_ESP, 3 * 4);
- x86_push_reg (code, X86_EAX);
+ /* Check for interruptions */
if (aot) {
code = mono_arch_emit_load_aotconst (buf, code, &ji, MONO_PATCH_INFO_JIT_ICALL_ADDR, "mono_thread_force_interruption_checkpoint");
x86_call_reg (code, X86_EAX);
} else {
x86_call_code (code, (guint8*)mono_thread_force_interruption_checkpoint);
}
- x86_pop_reg (code, X86_EAX);
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, 3 * 4);
/* Restore LMF */
-
- /* ebx = previous_lmf */
- x86_pop_reg (code, X86_EBX);
- pushed_args--;
- x86_alu_reg_imm (code, X86_SUB, X86_EBX, 1);
-
- /* edi = lmf */
- x86_pop_reg (code, X86_EDI);
- pushed_args--;
-
- /* *(lmf) = previous_lmf */
- x86_mov_membase_reg (code, X86_EDI, 0, X86_EBX, 4);
-
- /* discard method info */
- x86_pop_reg (code, X86_ESI);
- pushed_args--;
-
- /* discard ESP */
- x86_pop_reg (code, X86_ESI);
- pushed_args--;
-
- /* restore caller saved regs */
- x86_pop_reg (code, X86_EBX);
- x86_pop_reg (code, X86_EDI);
- x86_pop_reg (code, X86_ESI);
- x86_pop_reg (code, X86_EBP);
-
- pushed_args -= 4;
-
- /* discard save IP */
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, 4);
- pushed_args--;
-
- /* restore LMF end */
-
- if (!MONO_TRAMPOLINE_TYPE_MUST_RETURN (tramp_type)) {
- /*
- * Overwrite the method ptr with the address we need to jump to,
- * to free %eax.
- */
- x86_mov_membase_reg (code, X86_ESP, pushed_args * sizeof (gpointer), X86_EAX, 4);
+ x86_mov_reg_membase (code, X86_EAX, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, lmf_addr), sizeof (mgreg_t));
+ x86_mov_reg_membase (code, X86_ECX, X86_EBP, lmf_offset + G_STRUCT_OFFSET (MonoLMF, previous_lmf), sizeof (mgreg_t));
+ x86_alu_reg_imm (code, X86_SUB, X86_ECX, 1);
+ x86_mov_membase_reg (code, X86_EAX, 0, X86_ECX, sizeof (mgreg_t));
+
+ /* Restore registers */
+ for (i = X86_EAX; i <= X86_EDI; ++i) {
+ if (i == X86_ESP || i == X86_EBP)
+ continue;
+ if (i == X86_EAX && !((tramp_type == MONO_TRAMPOLINE_RESTORE_STACK_PROT) || (tramp_type == MONO_TRAMPOLINE_AOT_PLT)))
+ continue;
+ x86_mov_reg_membase (code, i, X86_EBP, regarray_offset + (i * 4), 4);
}
- /* Restore caller saved registers */
- x86_mov_reg_membase (code, X86_ECX, X86_ESP, (pushed_args - pushed_args_caller_saved + X86_ECX) * 4, 4);
- x86_mov_reg_membase (code, X86_EDX, X86_ESP, (pushed_args - pushed_args_caller_saved + X86_EDX) * 4, 4);
- if ((tramp_type == MONO_TRAMPOLINE_RESTORE_STACK_PROT) || (tramp_type == MONO_TRAMPOLINE_AOT_PLT))
- x86_mov_reg_membase (code, X86_EAX, X86_ESP, (pushed_args - pushed_args_caller_saved + X86_EAX) * 4, 4);
-
- if (!MONO_TRAMPOLINE_TYPE_MUST_RETURN (tramp_type)) {
- /* Pop saved reg array + stack align */
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, 9 * 4);
- pushed_args -= 9;
- g_assert (pushed_args == 0);
- } else {
- /* Pop saved reg array + stack align + method ptr */
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, 10 * 4);
- pushed_args -= 10;
-
- /* We've popped one more stack item than we've pushed (the
- method ptr argument), so we must end up at -1. */
- g_assert (pushed_args == -1);
- }
+ /* Restore frame */
+ x86_leave (code);
- /*block guard trampolines are called with the stack aligned but must exit with the stack unaligned. */
- if (tramp_type == MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD) {
- x86_pop_reg (code, X86_EAX);
- x86_alu_reg_imm (code, X86_ADD, X86_ESP, 0x8);
- x86_jump_reg (code, X86_EAX);
- } else {
+ if (MONO_TRAMPOLINE_TYPE_MUST_RETURN (tramp_type)) {
+ /* Load the value returned by the trampoline */
+ x86_mov_reg_membase (code, X86_EAX, X86_ESP, 0, 4);
+ /* The trampoline returns normally, pop the trampoline argument */
+ x86_alu_reg_imm (code, X86_ADD, X86_ESP, 4);
x86_ret (code);
+ } else {
+ /* The trampoline argument is at the top of the stack, and it contains the address we need to branch to */
+ if (tramp_type == MONO_TRAMPOLINE_HANDLER_BLOCK_GUARD) {
+ x86_pop_reg (code, X86_EAX);
+ x86_alu_reg_imm (code, X86_ADD, X86_ESP, 0x8);
+ x86_jump_reg (code, X86_EAX);
+ } else {
+ x86_ret (code);
+ }
}
nacl_global_codeman_validate (&buf, 256, &code);
x86_mov_reg_membase (code, X86_EAX, X86_ESP, 4, 4);
if (!mrgctx) {
/* load rgctx ptr from vtable */
- x86_mov_reg_membase (code, X86_EAX, X86_EAX, G_STRUCT_OFFSET (MonoVTable, runtime_generic_context), 4);
+ x86_mov_reg_membase (code, X86_EAX, X86_EAX, MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context), 4);
/* is the rgctx ptr null? */
x86_test_reg_reg (code, X86_EAX, X86_EAX);
/* if yes, jump to actual trampoline */
x86_branch8 (code, X86_CC_Z, -1, 1);
/* load obj->synchronization to ECX */
- x86_mov_reg_membase (code, X86_ECX, X86_EAX, G_STRUCT_OFFSET (MonoObject, synchronisation), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoObject, synchronisation), 4);
if (mono_gc_is_moving ()) {
/*if bit zero is set it's a thin hash*/
code = mono_x86_emit_tls_get (code, X86_EDX, mono_thread_get_tls_offset ());
}
/* load TID into EDX */
- x86_mov_reg_membase (code, X86_EDX, X86_EDX, G_STRUCT_OFFSET (MonoInternalThread, tid), 4);
+ x86_mov_reg_membase (code, X86_EDX, X86_EDX, MONO_STRUCT_OFFSET (MonoInternalThread, tid), 4);
/* is synchronization->owner null? */
x86_alu_membase_imm (code, X86_CMP, X86_ECX, owner_offset, 0);
x86_branch8 (code, X86_CC_Z, -1, 1);
/* load obj->synchronization to ECX */
- x86_mov_reg_membase (code, X86_ECX, X86_EAX, G_STRUCT_OFFSET (MonoObject, synchronisation), 4);
+ x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoObject, synchronisation), 4);
if (mono_gc_is_moving ()) {
/*if bit zero is set it's a thin hash*/
code = mono_x86_emit_tls_get (code, X86_EDX, mono_thread_get_tls_offset ());
}
/* load TID into EDX */
- x86_mov_reg_membase (code, X86_EDX, X86_EDX, G_STRUCT_OFFSET (MonoInternalThread, tid), 4);
+ x86_mov_reg_membase (code, X86_EDX, X86_EDX, MONO_STRUCT_OFFSET (MonoInternalThread, tid), 4);
/* is synchronization->owner == TID */
x86_alu_membase_reg (code, X86_CMP, X86_ECX, owner_offset, X86_EDX);
/* if no, jump to actual trampoline */
if (mono_get_jit_tls_offset () != -1) {
code = mono_x86_emit_tls_get (code, X86_EAX, mono_get_jit_tls_offset ());
- x86_mov_reg_membase (code, X86_EAX, X86_EAX, G_STRUCT_OFFSET (MonoJitTlsData, handler_block_return_address), 4);
+ x86_mov_reg_membase (code, X86_EAX, X86_EAX, MONO_STRUCT_OFFSET (MonoJitTlsData, handler_block_return_address), 4);
} else {
/*Slow path uses a c helper*/
x86_call_code (code, handler_block_trampoline_helper);
offset = decode_sleb128 (p, &p) * DWARF_DATA_ALIGN;
printf ("CFA: [%x] offset_extended_sf: %s at cfa-0x%x\n", pos, mono_arch_regname (mono_dwarf_reg_to_hw_reg (reg)), -offset);
break;
+ case DW_CFA_same_value:
+ reg = decode_uleb128 (p, &p);
+ printf ("CFA: [%x] same_value: %s\n", pos, mono_arch_regname (mono_dwarf_reg_to_hw_reg (reg)));
+ break;
case DW_CFA_advance_loc4:
pos += read32 (p);
p += 4;
break;
+ case DW_CFA_remember_state:
+ printf ("CFA: [%x] remember_state\n", pos);
+ break;
+ case DW_CFA_restore_state:
+ printf ("CFA: [%x] restore_state\n", pos);
+ break;
+ case DW_CFA_mono_advance_loc:
+ printf ("CFA: [%x] mono_advance_loc\n", pos);
+ break;
default:
g_assert_not_reached ();
}
/* Convert the register from the hw encoding to the dwarf encoding */
reg = mono_hw_reg_to_dwarf_reg (op->reg);
+ if (op->op == DW_CFA_mono_advance_loc) {
+ /* This advances loc to its location */
+ loc = op->when;
+ }
+
/* Emit an advance_loc if neccesary */
while (op->when > loc) {
- if (op->when - loc < 32) {
+ if (op->when - loc > 65536) {
+ *p ++ = DW_CFA_advance_loc4;
+ *(guint32*)p = (guint32)(op->when - loc);
+ g_assert (read32 (p) == (guint32)(op->when - loc));
+ p += 4;
+ loc = op->when;
+ } else if (op->when - loc > 256) {
+ *p ++ = DW_CFA_advance_loc2;
+ *(guint16*)p = (guint16)(op->when - loc);
+ g_assert (read16 (p) == (guint32)(op->when - loc));
+ p += 2;
+ loc = op->when;
+ } else if (op->when - loc >= 32) {
+ *p ++ = DW_CFA_advance_loc1;
+ *(guint8*)p = (guint8)(op->when - loc);
+ p += 1;
+ loc = op->when;
+ } else if (op->when - loc < 32) {
*p ++ = DW_CFA_advance_loc | (op->when - loc);
loc = op->when;
} else {
*p ++ = op->op;
encode_uleb128 (reg, p, &p);
break;
+ case DW_CFA_same_value:
+ *p ++ = op->op;
+ encode_uleb128 (reg, p, &p);
+ break;
case DW_CFA_offset:
if (reg > 63) {
*p ++ = DW_CFA_offset_extended_sf;
encode_uleb128 (op->val / DWARF_DATA_ALIGN, p, &p);
}
break;
+ case DW_CFA_remember_state:
+ case DW_CFA_restore_state:
+ *p ++ = op->op;
+ break;
+ case DW_CFA_mono_advance_loc:
+ /* Only one location is supported */
+ g_assert (op->val == 0);
+ *p ++ = op->op;
+ break;
default:
g_assert_not_reached ();
break;
printf ("\n");
}
+typedef struct {
+ Loc locations [NUM_REGS];
+ guint8 reg_saved [NUM_REGS];
+ int cfa_reg, cfa_offset;
+} UnwindState;
+
/*
* Given the state of the current frame as stored in REGS, execute the unwind
* operations in unwind_info until the location counter reaches POS. The result is
* If SAVE_LOCATIONS is non-NULL, it should point to an array of size SAVE_LOCATIONS_LEN.
* On return, the nth entry will point to the address of the stack slot where register
* N was saved, or NULL, if it was not saved by this frame.
+ * MARK_LOCATIONS should contain the locations marked by mono_emit_unwind_op_mark_loc (), if any.
* This function is signal safe.
*/
void
mono_unwind_frame (guint8 *unwind_info, guint32 unwind_info_len,
- guint8 *start_ip, guint8 *end_ip, guint8 *ip, mgreg_t *regs, int nregs,
+ guint8 *start_ip, guint8 *end_ip, guint8 *ip, guint8 **mark_locations,
+ mgreg_t *regs, int nregs,
mgreg_t **save_locations, int save_locations_len,
guint8 **out_cfa)
{
int i, pos, reg, cfa_reg, cfa_offset, offset;
guint8 *p;
guint8 *cfa_val;
+ UnwindState state_stack [1];
+ int state_stack_pos;
memset (reg_saved, 0, sizeof (reg_saved));
pos = 0;
cfa_reg = -1;
cfa_offset = -1;
+ state_stack_pos = 0;
while (pos <= ip - start_ip && p < unwind_info + unwind_info_len) {
int op = *p & 0xc0;
locations [reg].loc_type = LOC_OFFSET;
locations [reg].offset = offset * DWARF_DATA_ALIGN;
break;
+ case DW_CFA_same_value:
+ reg = decode_uleb128 (p, &p);
+ locations [reg].loc_type = LOC_SAME;
+ break;
+ case DW_CFA_advance_loc1:
+ pos += *p;
+ p += 1;
+ break;
+ case DW_CFA_advance_loc2:
+ pos += read16 (p);
+ p += 2;
+ break;
case DW_CFA_advance_loc4:
pos += read32 (p);
p += 4;
break;
+ case DW_CFA_remember_state:
+ g_assert (state_stack_pos == 0);
+ memcpy (&state_stack [0].locations, &locations, sizeof (locations));
+ memcpy (&state_stack [0].reg_saved, ®_saved, sizeof (reg_saved));
+ state_stack [0].cfa_reg = cfa_reg;
+ state_stack [0].cfa_offset = cfa_offset;
+ state_stack_pos ++;
+ break;
+ case DW_CFA_restore_state:
+ g_assert (state_stack_pos == 1);
+ state_stack_pos --;
+ memcpy (&locations, &state_stack [0].locations, sizeof (locations));
+ memcpy (®_saved, &state_stack [0].reg_saved, sizeof (reg_saved));
+ cfa_reg = state_stack [0].cfa_reg;
+ cfa_offset = state_stack [0].cfa_offset;
+ break;
+ case DW_CFA_mono_advance_loc:
+ g_assert (mark_locations [0]);
+ pos = mark_locations [0] - start_ip;
+ break;
default:
g_assert_not_reached ();
}
* A copy is made of the unwind info.
* This function is useful for two reasons:
* - many methods have the same unwind info
- * - MonoJitInfo->used_regs is an int so it can't store the pointer to the unwind info
+ * - MonoJitInfo->unwind_info is an int so it can't store the pointer to the unwind info
*/
guint32
mono_cache_unwind_info (guint8 *unwind_info, guint32 unwind_info_len)
static public int count = 0;
~P () {
- T.finalized = true;
- Thread.Sleep (1000);
// Console.WriteLine ("finalizer done");
count++;
}
}
class T {
-
- static public bool finalized = false;
-
- static void makeP () {
- P p = new P ();
- p = null;
- }
-
static int Main () {
- var t = new Thread (makeP);
- t.Start ();
- t.Join ();
-
- GC.Collect ();
- while (!finalized) {
- Thread.Sleep (100);
+ for (int i = 0; i < 1000; ++i) {
+ var t = new Thread (() => {
+ P p = new P ();
+ });
+ t.Start ();
+ t.Join ();
+
+ GC.Collect ();
+ GC.WaitForPendingFinalizers ();
+ if (P.count != i + 1)
+ return 1;
}
- GC.WaitForPendingFinalizers ();
-
- if (P.count == 0)
- return 1;
return 0;
}
}
$(MCS) -Warn:0 descriptor-tests.cs
descriptor-tests.cs : descriptor-tests-driver.cs descriptor-tests-prefix.cs gen-descriptor-tests.py
- -cp $^ .
+ if [ "$(srcdir)" != "$(builddir)" ]; then cp $^ .; fi
$(srcdir)/gen-descriptor-tests.py >descriptor-tests.cs
EXTRA_DIST = descriptor-tests-driver.cs descriptor-tests-prefix.cs gen-descriptor-tests.py
if (Marshal.SizeOf (typeof (TestStruct10)) != 12)
return 16;
} else {
- if (Marshal.SizeOf (typeof (TestStruct8)) != 16)
+ if (Marshal.SizeOf (typeof (TestStruct8)) != 16 && Marshal.SizeOf (typeof (TestStruct8)) != 12)
return 14;
- if (Marshal.SizeOf (typeof (TestStruct10)) != 16)
+ if (Marshal.SizeOf (typeof (TestStruct10)) != 16 && Marshal.SizeOf (typeof (TestStruct10)) != 12)
return 16;
}
if (Marshal.SizeOf (typeof (TestStruct9)) != 12)
/.libs
/*.la
/*.lo
+/*.trs
/test-gc-memfuncs
/test-mono-linked-list-set
/test-sgen-qsort
#endif
#endif
+#ifdef HOST_WIN32
+#define TO_INTERLOCKED_ARGP(ptr) ((volatile LONG*)(ptr))
+#else
+#define TO_INTERLOCKED_ARGP(ptr) (ptr)
+#endif
+
/* And now for some dirty hacks... The Windows API doesn't
* provide any useful primitives for this (other than getting
* into architecture-specific madness), so use CAS. */
static inline gint32 InterlockedRead(volatile gint32 *src)
{
- return InterlockedCompareExchange (src, 0, 0);
+ return InterlockedCompareExchange (TO_INTERLOCKED_ARGP (src), 0, 0);
}
static inline gint64 InterlockedRead64(volatile gint64 *src)
static inline void InterlockedWrite(volatile gint32 *dst, gint32 val)
{
- InterlockedExchange (dst, val);
+ InterlockedExchange (TO_INTERLOCKED_ARGP (dst), val);
}
static inline void InterlockedWrite64(volatile gint64 *dst, gint64 val)
#include <config.h>
+#if defined(TARGET_OSX)
+/* For pthread_main_np () */
+#define _DARWIN_C_SOURCE 1
+#include <pthread.h>
+#endif
+
#if defined(__OpenBSD__) || defined(__FreeBSD__)
#include <pthread.h>
#include <pthread_np.h>
*staddr = (guint8*)pthread_get_stackaddr_np (pthread_self());
*stsize = pthread_get_stacksize_np (pthread_self());
-
#ifdef TARGET_OSX
/*
* Mavericks reports stack sizes as 512kb:
* http://permalink.gmane.org/gmane.comp.java.openjdk.hotspot.devel/11590
* https://bugs.openjdk.java.net/browse/JDK-8020753
*/
- if (*stsize == 512 * 1024)
+ if (pthread_main_np () && *stsize == 512 * 1024)
*stsize = 2048 * mono_pagesize ();
#endif
<ClCompile Include="..\mono\metadata\threadpool.c" />\r
<ClCompile Include="..\mono\metadata\threads.c" />\r
<ClCompile Include="..\mono\metadata\verify.c" />\r
+ <ClCompile Include="..\mono\mini\mini-cross-helpers.c" />\r
</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="..\mono\metadata\appdomain.h" />\r
mono_domain_is_unloading
mono_domain_owns_vtable_slot
mono_domain_set
+mono_domain_set_config
mono_domain_set_internal
mono_domain_try_type_resolve
mono_domain_try_unload
mono_domain_is_unloading
mono_domain_owns_vtable_slot
mono_domain_set
+mono_domain_set_config
mono_domain_set_internal
mono_domain_try_type_resolve
mono_domain_try_unload
mono_domain_is_unloading
mono_domain_owns_vtable_slot
mono_domain_set
+mono_domain_set_config
mono_domain_set_internal
mono_domain_try_type_resolve
mono_domain_try_unload