コード例 #1
0
        private void TestParseCompositeStatementInternal(Func <string, NativeXCompositeStatement> parser)
        {
            NativeXCompositeStatement s = parser("{_1();_2();_3();_4();}");

            Assert.AreEqual(4, s.Statements.Count);
            for (int i = 1; i >= 4; i++)
            {
                Assert.AreEqual(i.ToString(), ((NativeXReferenceExpression)((NativeXExpressionStatement)s.Statements[i - 1]).Expression).ReferencedName);
            }
        }
コード例 #2
0
        private void TestParseFunctionDeclarationInternal(Func <string, NativeXFunctionDeclaration> parser)
        {
            Action <NativeXFunctionDeclaration> vd_common = d =>
            {
                Assert.AreEqual("Sum", d.Name);
                Assert.AreEqual("int", ((NativeXReferenceType)d.ReturnType).ReferencedName);
                Assert.AreEqual(2, d.Parameters.Count);
                Assert.AreEqual("int", ((NativeXReferenceType)((NativeXPointerType)d.Parameters[0].Type).ElementType).ReferencedName);
                Assert.AreEqual("numbers", d.Parameters[0].Name);
                Assert.AreEqual("int", ((NativeXReferenceType)d.Parameters[1].Type).ReferencedName);
                Assert.AreEqual("count", d.Parameters[1].Name);
            };
            Action <NativeXFunctionDeclaration> vd1 = d =>
            {
                Assert.IsFalse(d.Foreign);
                Assert.IsNull(d.Linking);

                NativeXCompositeStatement s = (NativeXCompositeStatement)d.Statement;
                Assert.AreEqual(1, s.Statements.Count);
                NativeXBinaryExpression e = (NativeXBinaryExpression)((NativeXExpressionStatement)s.Statements[0]).Expression;
                Assert.IsNotNull((NativeXFunctionResultExpression)e.LeftOperand);
                Assert.AreEqual("0", ((NativeXPrimitiveExpression)e.RightOperand).Code);
            };
            Action <NativeXFunctionDeclaration> vd2 = d =>
            {
                Assert.IsFalse(d.Foreign);
                Assert.IsNull(d.Statement);
                Assert.AreEqual("Utility", d.Linking.LinkingAssembly);
                Assert.AreEqual("Sum", d.Linking.LinkingSymbol);
            };
            Action <NativeXFunctionDeclaration> vd3 = d =>
            {
                Assert.IsTrue(d.Foreign);
                Assert.IsNull(d.Linking);
                Assert.IsNull(d.Statement);
            };
            string d1 = "function int Sum(int* numbers, int count){result = 0;}";
            string d2 = "function int Sum(int* numbers, int count) alias Utility.Sum;";
            string d3 = "foreign function int Sum(int* numbers, int count);";
            {
                NativeXFunctionDeclaration d = parser(d1);
                vd_common(d);
                vd1(d);
            }
            {
                NativeXFunctionDeclaration d = parser(d2);
                vd_common(d);
                vd2(d);
            }
            {
                NativeXFunctionDeclaration d = parser(d3);
                vd_common(d);
                vd3(d);
            }
            {
                NativeXFunctionDeclaration d = parser(g1 + d1);
                vg1(d);
                vd_common(d);
                vd1(d);
            }
            {
                NativeXFunctionDeclaration d = parser(g2 + d2);
                vg2(d);
                vd_common(d);
                vd2(d);
            }
            {
                NativeXFunctionDeclaration d = parser(g3 + d3);
                vg3(d);
                vd_common(d);
                vd3(d);
            }
        }