Exposing ExecuteCodeWithGuaranteedCleanup in mscorlib
authorRama Krishnan Raghupathy <ramarag@microsoft.com>
Wed, 14 Sep 2016 00:46:07 +0000 (17:46 -0700)
committerRama Krishnan Raghupathy <ramarag@microsoft.com>
Sat, 17 Sep 2016 01:08:55 +0000 (18:08 -0700)
src/mscorlib/model.xml
src/mscorlib/ref/mscorlib.cs
tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.cs [new file with mode: 0644]
tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.csproj [new file with mode: 0644]

index 4f7d71ca50cfc51e0b8ecc19ab05b60a460212f1..ba7adbc18d4fb7c2faa8dde3b597181aeb137dd9 100644 (file)
       <Member Name="GetHashCode(System.Object)" />
       <Member Name="RunClassConstructor(System.RuntimeTypeHandle)" />
       <Member Name="RunModuleConstructor(System.ModuleHandle)" />
+      <Member Name="ExecuteCodeWithGuaranteedCleanup(System.Runtime.CompilerServices.RuntimeHelpers+TryCode,System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode,System.Object)" />
       <Member MemberType="Property" Name="OffsetToStringData" />
       <Member Status="ImplRoot" Name="ExecuteBackoutCodeHelper(System.Object,System.Object,System.Boolean)" />
       <Member Status="ImplRoot" Name="PrepareConstrainedRegionsNoOP" />
       <Member Status="ImplRoot" Name="PrepareConstrainedRegions" />
     </Type>
+    <Type Name="System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode">
+      <Member Name="#ctor(System.Object,System.IntPtr)" />
+      <Member Name="BeginInvoke(System.Object,System.Boolean,System.AsyncCallback,System.Object)" />
+      <Member Name="EndInvoke(System.IAsyncResult)" />
+      <Member Name="Invoke(System.Object,System.Boolean)" />
+    </Type>
+    <Type Name="System.Runtime.CompilerServices.RuntimeHelpers+TryCode">
+      <Member Name="#ctor(System.Object,System.IntPtr)" />
+      <Member Name="BeginInvoke(System.Object,System.AsyncCallback,System.Object)" />
+      <Member Name="EndInvoke(System.IAsyncResult)" />
+      <Member Name="Invoke(System.Object)" />
+    </Type>
     <Type Name="System.Runtime.CompilerServices.ConditionalWeakTable&lt;TKey,TValue&gt;">
       <Member Name="#ctor" />
       <Member Name="Add(TKey,TValue)" />
index fb5b889e7ef704aa4df26071f1985aa1a6dd891c..cb83c6c0fe82aa443c9548be65f9d6caeb6c93a2 100644 (file)
@@ -10072,6 +10072,12 @@ namespace System.Runtime.CompilerServices
         public static void InitializeArray(System.Array array, System.RuntimeFieldHandle fldHandle) { }
         public static void RunClassConstructor(System.RuntimeTypeHandle type) { }
         public static void RunModuleConstructor(System.ModuleHandle module) { }
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)][System.Security.SecurityCriticalAttribute]
+        public static void ExecuteCodeWithGuaranteedCleanup(System.Runtime.CompilerServices.RuntimeHelpers.TryCode code, System.Runtime.CompilerServices.RuntimeHelpers.CleanupCode backoutCode, object userData) { }
+        [System.Security.SecurityCriticalAttribute]
+        public delegate void CleanupCode(object userData, bool exceptionThrown);
+        [System.Security.SecurityCriticalAttribute]
+        public delegate void TryCode(object userData);
     }
     [System.AttributeUsageAttribute((System.AttributeTargets)(972))]
     public sealed partial class SpecialNameAttribute : System.Attribute
diff --git a/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.cs b/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.cs
new file mode 100644 (file)
index 0000000..58cee3c
--- /dev/null
@@ -0,0 +1,62 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+//
+using System;
+using System.Runtime.CompilerServices;
+
+namespace GCD
+{
+    /// <summary>
+    /// Summary description for Class1.
+    /// </summary>
+    class GCD
+    {
+        private int _val = -2;
+        private int _exitcode = -1;
+        public GCD() {}
+        public int GetExitCode(){ return _exitcode;}
+        public void g ()
+        {
+            throw new System.Exception("TryCode test");
+        }
+        public void TryCode0 (object obj)
+        {
+            _val = (int)obj;
+            g();
+        }
+        public void CleanupCode0 (object obj, bool excpThrown)
+        {
+            if(excpThrown && ((int)obj == _val))
+            {
+                _exitcode = 100;
+            }
+        }
+    }
+
+
+    class GCDTest 
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+            static int Main(string[] args)
+            {
+                GCD gcd = new GCD();
+                RuntimeHelpers.TryCode t = new RuntimeHelpers.TryCode(gcd.TryCode0);
+                RuntimeHelpers.CleanupCode c = new RuntimeHelpers.CleanupCode(gcd.CleanupCode0);
+                int val = 21;
+                try
+                {
+                    RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(t, c, val);
+                }
+                catch (Exception Ex)
+                {
+
+                }
+
+                return gcd.GetExitCode();
+            }
+    }
+}
diff --git a/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.csproj b/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.csproj
new file mode 100644 (file)
index 0000000..605d11b
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+    <CLRTestKind>BuildAndRun</CLRTestKind>
+  </PropertyGroup>
+  <!-- Default configurations to help VS understand the configurations -->
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <!-- Add Compile Object Here -->
+    <Compile Include="ExecuteCodeWithGuaranteedCleanup.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+  </ItemGroup>
+  <ItemGroup>
+    <NoWarn Include="42016,42020,42025,42024" />
+  </ItemGroup>
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+  </PropertyGroup>
+</Project>