예제 #1
0
        public void AST2ILTest()
        {
            var w   = new VeinSyntax();
            var ast = w.CompilationUnit.ParseVein(
                " class Program { main(): void { if(ze()) return x; else { return d();  } } }");

            var module = new VeinModuleBuilder("foo");

            foreach (var member in ast.Members)
            {
                if (member is ClassDeclarationSyntax classMember)
                {
                    var @class = module.DefineClass($"global::vein/lang/{classMember.Identifier}");

                    foreach (var methodMember in classMember.Methods)
                    {
                        var method    = @class.DefineMethod(methodMember.Identifier.ExpressionString, VeinTypeCode.TYPE_VOID.AsClass());
                        var generator = method.GetGenerator();

                        foreach (var statement in methodMember.Body.Statements)
                        {
                            var st = statement;
                        }
                    }
                }
            }
        }
예제 #2
0
    public void SpaceDirectiveTest()
    {
        var a = new VeinSyntax();
        var d = a.SpaceSyntax
                .ParseVein("#space \"foo\"");

        Assert.AreEqual("foo", d.Value.Token);
    }
예제 #3
0
    public void MethodParametersTest(string parseStr, string name, bool needFail)
    {
        var a = new VeinSyntax();
        var d = default(MethodDeclarationSyntax);

        if (needFail)
        {
            Assert.Throws <VeinParseException>(() => d = a.OperationDeclaration
                                                         .ParseVein(parseStr + "{body{}}"));
        }
        else
        {
            d = a.OperationDeclaration
                .ParseVein(parseStr + "{body{}}");
            Assert.AreEqual(name, d.Identifier.ToString());
        }
    }
예제 #4
0
    public void FullsetMethodParametersAndBodyTest()
    {
        var a = new VeinSyntax();
        var d = a.ClassDeclaration
                .ParseVein("public class DDD { public test(x: int32): void { } }");

        Assert.False(d.IsStruct);
        Assert.False(d.IsInterface);
        Assert.AreEqual("DDD", d.Identifier.ToString());
        IshtarAssert.Contains(d.Modifiers, x => x.ModificatorKind == ModificatorKind.Public);
        var method = d.Methods.Single();

        Assert.AreEqual("test", method.Identifier.ToString());
        IshtarAssert.Contains(method.Modifiers, x => x.ModificatorKind == ModificatorKind.Public);
        Assert.AreEqual("void", method.ReturnType.Identifier.ToString().ToLower());

        var @params = method.Parameters.Single();

        Assert.AreEqual("x", @params.Identifier.ToString());
        Assert.AreEqual("int32", @params.Type.Identifier.ToString().ToLower());
    }