-
-
Save sailro/0f5c6501701b5f327597 to your computer and use it in GitHub Desktop.
| using UnityEngine; | |
| using System.Collections; | |
| using System; | |
| using System.Text; | |
| using System.Linq; | |
| public class Test : MonoBehaviour { | |
| string testCecilSpec; | |
| int[,] dynArray; | |
| int[][][] dynJaggedArray; | |
| static T CreateJaggedArray<T>(params int[] lengths) { | |
| return (T)CreateJaggedArray(typeof(T).GetElementType(), 0, lengths); | |
| } | |
| static object CreateJaggedArray(Type type, int index, int[] lengths) { | |
| var array = Array.CreateInstance(type, lengths[index]); | |
| var elementType = type.GetElementType(); | |
| if (elementType != null) | |
| for (int i = 0; i < lengths[index]; i++) | |
| array.SetValue(CreateJaggedArray(elementType, index + 1, lengths), i); | |
| return array; | |
| } | |
| public string MagicConcat(__arglist) { | |
| var builder = new StringBuilder(); | |
| ArgIterator ai = new ArgIterator(__arglist); | |
| while (ai.GetRemainingCount() > 0) | |
| { | |
| var tr = ai.GetNextArg(); | |
| builder.Append(TypedReference.ToObject(tr)); | |
| } | |
| return builder.ToString(); | |
| } | |
| unsafe void Start() { | |
| // Test Cecil specs with GenericTypeInstance(Of ArrayType( Of GenericTypeInstance(Of int) ) ) | |
| Predicate<Nullable<int>[]> foo = t => t.Length == 3 && t[0] == 6 && !t[1].HasValue && t[2] == 1; | |
| testCecilSpec = foo(new int?[]{6, null, 1}).ToString(); | |
| // Test pointers | |
| fixed (char* s = testCecilSpec) | |
| { | |
| short* p = (short*)s; | |
| *(p++) = (short)'X'; | |
| *(p++) = (short)'Y'; | |
| } | |
| // Test dynamic arrays with lower bounds | |
| dynArray = (int[,])Array.CreateInstance(typeof(int), new int[] { 4, 2 }, new int[] { -4, -1 }); | |
| dynArray[-2, -1] = 666; | |
| // Test dynamic jagged array | |
| dynJaggedArray = CreateJaggedArray<int[][][]>(1, 2, 3); | |
| dynJaggedArray[0][1][2] = 999; | |
| } | |
| void OnGUI () { | |
| // Undocumented __makeref, __refvalue and __arglist. Supported by Mono and VS | |
| var str = testCecilSpec + dynArray[-2, -1] + dynJaggedArray[0][1][2] + "-" + MagicConcat(__arglist(1, "a", 5)); | |
| GUI.Label(new Rect(0, 0, 128, 32), str); // Should be "XYue666999-1a5" (works in the Unity Editor) | |
| } | |
| } |
Exception: C:\Program Files\Unity\Editor\Data\Tools/UnusedByteCodeStripper2/UnusedBytecodeStripper2.exe did not run properly!
UnityEditorInternal.Runner.RunManagedProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:68)
UnityEditorInternal.AssemblyStripper.RunAssemblyLinker (IEnumerable1 args, System.String& out, System.String& err, System.String linkerPath, System.String workingDirectory) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:192) UnityEditorInternal.AssemblyStripper.StripAssembliesTo (System.String outputFolder, System.String workingDirectory, System.String& output, System.String& error, System.String linkerPath, System.String descriptorsFolder, IEnumerable1 additionalBlacklist) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:185)
UnityEditorInternal.AssemblyStripper.Strip (System.String outputFolder, System.String workingDirectory, System.String& output, System.String& error, System.String monoLinkerPath, System.String descriptorsFolder, IEnumerable1 additionalBlacklist) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:136) UnityEditorInternal.AssemblyStripper.Strip (System.String[] assemblies, System.String[] searchDirs, System.String outputFolder, System.String workingDirectory, System.String& output, System.String& error, System.String monoLinkerPath, System.String descriptorsFolder, IEnumerable1 additionalBlacklist) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:121)
UnityEditorInternal.IL2CPPBuilder.RunAssemblyStripper (IEnumerable assemblies, System.String managedAssemblyFolderPath, System.String[] assembliesToStrip, System.String[] searchDirs, System.String monoLinkerPath) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:445)
UnityEditorInternal.IL2CPPBuilder.StripAssemblies (System.String[] assemblies, System.String managedAssemblyFolderPath) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:433)
UnityEditorInternal.IL2CPPBuilder.Run () (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:273)
UnityEditorInternal.IL2CPPUtils.RunIl2Cpp (System.String stagingAreaData, IIl2CppPlatformProvider platformProvider, System.Action`1 modifyOutputBeforeCompile, UnityEditor.RuntimeClassRegistry runtimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:218)
UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:316)
UnityEditor.HostView:OnGUI()
__arglist is using a specific OpCode