Пример #1
0
        public void ReturnStatementCompilation2()
        {
            var ret = new ReturnStatementSyntax(new IdentifierExpression("x"));

            var actual     = CreateGenerator();
            var ctx_actual = actual.ConsumeFromMetadata <GeneratorContext>("context");

            ctx_actual.Classes.First().Value
            .DefineField("x", FieldFlags.None, VeinTypeCode.TYPE_STRING.AsClass());


            actual.EmitReturn(ret);

            var expected     = CreateGenerator();
            var ctx_expected = expected.ConsumeFromMetadata <GeneratorContext>("context");

            var field = ctx_expected.Classes.First().Value
                        .DefineField("x", FieldFlags.None, VeinTypeCode.TYPE_STRING.AsClass());

            expected.Emit(OpCodes.LDARG_0);
            expected.Emit(OpCodes.LDF, field);
            expected.Emit(OpCodes.RET);

            IshtarAssert.SequenceEqual(expected._debug_list, actual._debug_list);
        }
Пример #2
0
    public void LiteralAssignedExpressionTest()
    {
        var result = Syntax.FieldDeclaration.End().ParseVein("foo: Int32 = -22;");

        Assert.NotNull(result);
        Assert.AreEqual("int32", result.Type.Identifier.ToString().ToLower());
        Assert.AreEqual("foo", result.Field.Identifier.ToString());
        Assert.AreEqual("(22)", result.Field.Expression.ExpressionString);
        IshtarAssert.IsType <UnaryExpressionSyntax>(result.Field.Expression);
    }
Пример #3
0
        public void ReturnStatementCompilation3()
        {
            var ret = new ReturnStatementSyntax(new IdentifierExpression("x"));

            var actual = CreateGenerator(("x", VeinTypeCode.TYPE_STRING));

            actual.EmitReturn(ret);

            var expected = CreateGenerator(("x", VeinTypeCode.TYPE_STRING));

            expected.Emit(OpCodes.LDARG_0);
            expected.Emit(OpCodes.RET);

            IshtarAssert.SequenceEqual(expected._debug_list, actual._debug_list);
        }
Пример #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());
    }