public static CodeStream Create(IAssemblyCompilerContext assemblyCompilerContext, MethodReference method) { var m = method.Resolve(); var body = m.Body; var stream = new CodeStream(assemblyCompilerContext) { Method = m, Body = body, Outside = new CilInstruction(body.Instructions.Outside) }; var il = stream.Body.Instructions.Outside; var ilCopy = stream.Outside; while (il.Next != null) { ilCopy.Next = new CilInstruction(il.Next) { Previous = ilCopy }; ilCopy = ilCopy.Next; il = il.Next; } return(stream); }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { var assemblyContext = context as AssemblyCompilerContext; if (assemblyContext == null) { return(context); } var cmd = new StringBuilder("gcc -Wall -o "); cmd.Append(assemblyContext.Output); foreach (var file in assemblyContext.OutputFiles) { cmd.AppendFormat(" {0}", file.Filename); } string output; string error; if (Helper.Execute(cmd.ToString(), out error, out output) == 0) { if (!string.IsNullOrEmpty(error)) { Helper.Break(); } return(context); } Helper.Stop(() => new BuildException(error, output)); return(null); }
public IAssemblyCompilerContext Compile(IAssemblyCompilerContext context) { OnBeforeCompile(context); context = this.Stages.Aggregate(context, (current, stage) => stage.Run(this, current)); OnAfterCompile(context); return(context); }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { var assemblyContext = context as AssemblyCompilerContext; if (assemblyContext == null) return context; var cmd = new StringBuilder("gcc -Wall -o "); cmd.Append(assemblyContext.Output); foreach (var file in assemblyContext.OutputFiles) cmd.AppendFormat(" {0}", file.Filename); string output; string error; if (Helper.Execute(cmd.ToString(), out error, out output) == 0) { if (!string.IsNullOrEmpty(error)) Helper.Break(); return context; } Helper.Stop(() => new BuildException(error, output)); return null; }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { var assemblyContext = context as AssemblyCompilerContext; if (assemblyContext == null) return context; var list = new List<IMethodCompilerContext>(assemblyContext.MethodContexts); assemblyContext.MethodContexts.Clear(); foreach (var mc in list) assemblyContext.MethodContexts.Add(compiler.MethodCompiler.Compile(mc)); return assemblyContext; }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext ctxt) { var context = ctxt as TestContext; if (context == null) return ctxt; var mc = context.MethodContexts.First(); CreateRuntime(context, mc.Method); //CreateStack(assemblyContext, method); return context; }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { var ac = context as AssemblyCompilerContext; Helper.IsNotNull(ac); var asm = ac.AssemblyDefinition; var mc = compiler.MethodCompiler; foreach (ModuleDefinition module in asm.Modules) foreach (TypeDefinition type in module.Types) foreach (MethodDefinition method in type.Methods) ac.MethodContexts.Add(mc.GetContext(context, method)); return ac; }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext ctxt) { var context = ctxt as TestContext; if (context == null) { return(ctxt); } var mc = context.MethodContexts.First(); CreateRuntime(context, mc.Method); //CreateStack(assemblyContext, method); return(context); }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { var asmcc = context as AssemblyCompilerContext; if (asmcc == null) { return(context); } var asm = asmcc.AssemblyDefinition; foreach (AssemblyNameReference asmRef in asm.MainModule.AssemblyReferences) { } return(context); }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { var assemblyContext = context as AssemblyCompilerContext; if (assemblyContext == null) { return(context); } var list = new List <IMethodCompilerContext>(assemblyContext.MethodContexts); assemblyContext.MethodContexts.Clear(); foreach (var mc in list) { assemblyContext.MethodContexts.Add(compiler.MethodCompiler.Compile(mc)); } return(assemblyContext); }
public override IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { var ac = context as AssemblyCompilerContext; Helper.IsNotNull(ac); var asm = ac.AssemblyDefinition; var mc = compiler.MethodCompiler; foreach (ModuleDefinition module in asm.Modules) { foreach (TypeDefinition type in module.Types) { foreach (MethodDefinition method in type.Methods) { ac.MethodContexts.Add(mc.GetContext(context, method)); } } } return(ac); }
public IMethodCompilerContext GetContext(IAssemblyCompilerContext context, MethodReference method) { return(CodeStream.Create(context, method)); }
protected override void OnAfterCompile(IAssemblyCompilerContext context) { //save resultant context info }
protected virtual void OnAfterCompile(IAssemblyCompilerContext context) { }
protected virtual void OnBeforeCompile(IAssemblyCompilerContext context) { }
public virtual IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { return context; }
public virtual IAssemblyCompilerContext Run(IAssemblyCompiler compiler, IAssemblyCompilerContext context) { return(context); }
private CodeStream(IAssemblyCompilerContext assemblyCompilerContext) { this.AssemblyCompilerContext = assemblyCompilerContext; }
public IMethodCompilerContext GetContext(IAssemblyCompilerContext context, MethodReference method) { return CodeStream.Create(context, method); }