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; } } } } }
public void SpaceDirectiveTest() { var a = new VeinSyntax(); var d = a.SpaceSyntax .ParseVein("#space \"foo\""); Assert.AreEqual("foo", d.Value.Token); }
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()); } }
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()); }