Exemple #1
0
        public static void CallStaticMethodTest()
        {
            var mainMethod = testType.GetMethod("CallTestMethod");

            var translateContext = new TranslateContext(testTypeAssembly.Location);
            var tw = new StringWriter();

            var prepared = AssemblyPreparer.Prepare(
                translateContext, method => method.MemberEquals(mainMethod));

            AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, "  ");

            var sourceCode = tw.ToString();

            var expected = new StringWriter();

            expected.WriteLine(@"int32_t IL2C_TestTargetClass_CallTestMethod(void)");
            expected.WriteLine(@"{");
            expected.WriteLine(@"  int32_t local0;");
            expected.WriteLine(@"");
            expected.WriteLine(@"  int32_t __stack0_int32_t;");
            expected.WriteLine(@"  int32_t __stack1_int32_t;");
            expected.WriteLine(@"");
            expected.WriteLine(@"  __stack0_int32_t = 1;");
            expected.WriteLine(@"  __stack1_int32_t = 2;");
            expected.WriteLine(@"  __stack0_int32_t = IL2C_TestTargetClass_CallStaticMethodTestType_Test(__stack0_int32_t, (int16_t)__stack1_int32_t);");
            expected.WriteLine(@"  local0 = __stack0_int32_t;");
            expected.WriteLine(@"  goto L_0000;");
            expected.WriteLine(@"L_0000:");
            expected.WriteLine(@"  __stack0_int32_t = local0;");
            expected.WriteLine(@"  return __stack0_int32_t;");
            expected.WriteLine(@"}");

            Assert.AreEqual(expected.ToString(), sourceCode);
        }
Exemple #2
0
        public static void ConditionalBranchTest()
        {
            var mainMethod = testType.GetMethod("ConditionalBranchMainBody");

            var translateContext = new TranslateContext(testTypeAssembly.Location);
            var tw = new StringWriter();

            var prepared = AssemblyPreparer.Prepare(
                translateContext, method => method.MemberEquals(mainMethod));

            AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, "  ");

            var sourceCode = tw.ToString();

            var expected = new StringWriter();

            expected.WriteLine(@"int32_t IL2C_TestTargetClass_ConditionalBranchMainBody(int32_t a)");
            expected.WriteLine(@"{");
            expected.WriteLine(@"  bool local0;");
            expected.WriteLine(@"  int32_t local1;");
            expected.WriteLine();
            expected.WriteLine(@"  int32_t __stack0_int32_t;");
            expected.WriteLine(@"  int32_t __stack1_int32_t;");
            expected.WriteLine();
            expected.WriteLine(@"  __stack0_int32_t = a;");
            expected.WriteLine(@"  __stack1_int32_t = 0;");
            expected.WriteLine(@"  __stack0_int32_t = (__stack0_int32_t > __stack1_int32_t) ? 1 : 0;");
            expected.WriteLine(@"  local0 = __stack0_int32_t ? true : false;");
            expected.WriteLine(@"  __stack0_int32_t = local0 ? 1 : 0;");
            expected.WriteLine(@"  if (__stack0_int32_t == 0) goto L_0000;");
            expected.WriteLine(@"  __stack0_int32_t = a;");
            expected.WriteLine(@"  __stack1_int32_t = 1;");
            expected.WriteLine(@"  __stack0_int32_t = __stack0_int32_t + __stack1_int32_t;");
            expected.WriteLine(@"  local1 = __stack0_int32_t;");
            expected.WriteLine(@"  goto L_0001;");
            expected.WriteLine(@"L_0000:");
            expected.WriteLine(@"  __stack0_int32_t = a;");
            expected.WriteLine(@"  __stack1_int32_t = 2;");
            expected.WriteLine(@"  __stack0_int32_t = __stack0_int32_t + __stack1_int32_t;");
            expected.WriteLine(@"  local1 = __stack0_int32_t;");
            expected.WriteLine(@"  goto L_0001;");
            expected.WriteLine(@"L_0001:");
            expected.WriteLine(@"  __stack0_int32_t = local1;");
            expected.WriteLine(@"  return __stack0_int32_t;");
            expected.WriteLine(@"}");

            Assert.AreEqual(expected.ToString(), sourceCode);
        }
Exemple #3
0
        public static void SimpleOverallByInt64SummationTest()
        {
            var mainMethod = testType.GetMethod("Int64MainBody");

            var translateContext = new TranslateContext(testTypeAssembly.Location);
            var tw = new StringWriter();

            var prepared = AssemblyPreparer.Prepare(
                translateContext, method => method.MemberEquals(mainMethod));

            AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, "  ");

            var sourceCode = tw.ToString();

            var expected = new StringWriter();

            expected.WriteLine(@"int64_t IL2C_TestTargetClass_Int64MainBody(void)");
            expected.WriteLine(@"{");
            expected.WriteLine(@"  int64_t local0;");
            expected.WriteLine(@"  int64_t local1;");
            expected.WriteLine(@"  int64_t local2;");
            expected.WriteLine(@"  int64_t local3;");
            expected.WriteLine();
            expected.WriteLine(@"  int32_t __stack0_int32_t;");
            expected.WriteLine(@"  int64_t __stack0_int64_t;");
            expected.WriteLine(@"  int64_t __stack1_int64_t;");
            expected.WriteLine();
            expected.WriteLine(@"  __stack0_int32_t = 1;");
            expected.WriteLine(@"  __stack0_int64_t = __stack0_int32_t;");
            expected.WriteLine(@"  local0 = __stack0_int64_t;");
            expected.WriteLine(@"  __stack0_int32_t = 2;");
            expected.WriteLine(@"  __stack0_int64_t = __stack0_int32_t;");
            expected.WriteLine(@"  local1 = __stack0_int64_t;");
            expected.WriteLine(@"  __stack0_int64_t = local0;");
            expected.WriteLine(@"  __stack1_int64_t = local1;");
            expected.WriteLine(@"  __stack0_int64_t = __stack0_int64_t + __stack1_int64_t;");
            expected.WriteLine(@"  local2 = __stack0_int64_t;");
            expected.WriteLine(@"  __stack0_int64_t = local2;");
            expected.WriteLine(@"  local3 = __stack0_int64_t;");
            expected.WriteLine(@"  goto L_0000;");
            expected.WriteLine(@"L_0000:");
            expected.WriteLine(@"  __stack0_int64_t = local3;");
            expected.WriteLine(@"  return __stack0_int64_t;");
            expected.WriteLine(@"}");

            Assert.AreEqual(expected.ToString(), sourceCode);
        }
Exemple #4
0
        public static void AccessValueTypeFieldTest()
        {
            Assert.Fail("TODO:");

            var mainMethod = testType.GetMethod("AccessValueTypeFieldMethod");

            var translateContext = new TranslateContext(testTypeAssembly.Location);
            var tw = new StringWriter();

            var targetType = typeof(TestTargetClass.AccessValueTypeFieldTestType);

            var prepared = AssemblyPreparer.Prepare(
                translateContext, method => method.MemberEquals(mainMethod));

            AssemblyWriter.InternalConvertFromMethod(tw, translateContext, prepared, mainMethod, "  ");

            var sourceCode = tw.ToString();

            var expected = new StringWriter();

            expected.WriteLine(@"");

            Assert.AreEqual(expected.ToString(), sourceCode);
        }