public static Assembly CompileCode(string code, CompilationTarget target = CompilationTarget.Library) { var parsed = new LightParser().Parse(code); AssertEx.That(() => !parsed.HasErrors); var processor = TestEnvironment.Container.Resolve <LightProcessor>(); processor.Process(parsed.Root, new ProcessingOptions { ReferencedAssemblies = { typeof(CompilationHelper).Assembly } }); var assemblyName = GetAssemblyName(); var compilationArguments = new CompilationArguments { AssemblyName = assemblyName, AssemblyVersion = new Version(0, 1, 0, 0), Target = target }; var stream = new MemoryStream(); var compiler = TestEnvironment.Container.Resolve <LightCompiler>(); compiler.Compile((AstRoot)parsed.Root, stream, compilationArguments); var bytes = stream.ToArray(); var assembly = Assembly.Load(bytes); WriteAssemblyOnDiskAndPEVerify(assembly, bytes, target); return(assembly); }
public static void IsParsedTo <TAstElement>(string code, Func <IAstElement, TAstElement> getElementFromResult, Expression <Func <TAstElement, bool> > condition) { var result = new LightParser().Parse(code); AssertEx.That(() => !result.HasErrors); var element = getElementFromResult(result.Root); Assert.IsNotNull(element); AssertEx.That(Expression.Lambda <Func <bool> >(Expression.Invoke(condition, Expression.Constant(element)))); }
private static void AssertIsParsed(string programName) { var code = Resource.ReadAllText(typeof(Resource), "Programs." + programName); var parsed = new LightParser().Parse(code); Assert.IsFalse( parsed.HasErrors, "Errors while parsing: {0}{1}", Environment.NewLine, string.Join(Environment.NewLine, parsed.Messages) ); }
public static void IsParsedTo(string code, string expectedResult, bool includeExpressionType = false, bool parenthiseAll = false) { var parser = new LightParser(); var result = parser.Parse(code); AssertEx.That(() => !result.HasErrors); var resultString = new AstToCodeTransformer { UseParenthesesInAllExpressions = parenthiseAll }.Transform(result.Root); var resultExpression = result.Root as IAstExpression; if (resultExpression != null && includeExpressionType) { resultString = resultString + ": " + new TypeFormatter(new BuiltInTypeMap()).Format(resultExpression.ExpressionType); } Assert.AreEqual(expectedResult, resultString); }
public static Assembly CompileCode(string code, CompilationTarget target = CompilationTarget.Library) { var parsed = new LightParser().Parse(code); AssertEx.That(() => !parsed.HasErrors); var processor = TestEnvironment.Container.Resolve<LightProcessor>(); processor.Process(parsed.Root); var assemblyName = GetAssemblyName(); var compilationArguments = new CompilationArguments { AssemblyName = assemblyName, AssemblyVersion = new Version(0, 1, 0, 0), Target = target }; var stream = new MemoryStream(); var compiler = TestEnvironment.Container.Resolve<LightCompiler>(); compiler.Compile((AstRoot)parsed.Root, stream, compilationArguments); var bytes = stream.ToArray(); var assembly = Assembly.Load(bytes); WriteAssemblyOnDiskAndPEVerify(assembly, bytes, target); return assembly; }
public LightLanguageService(LightGrammar grammar, LightParser parser, LightProcessor processor) { this.grammar = grammar; this.parser = parser; this.processor = processor; }
private static void SetupCompiler() { var builder = new ContainerBuilder(); builder.RegisterAssemblyModules(typeof(LightProcessor).Assembly); builder.RegisterAssemblyModules(typeof(LightCompiler).Assembly); var container = builder.Build(); parser = container.Resolve<LightParser>(); processor = container.Resolve<LightProcessor>(); compiler = container.Resolve<LightCompiler>(); typeFormatter = container.Resolve<TypeFormatter>(); }