public ArrayDesigner(CilEmitter ilEmitter, Type elementType, int elementsCount) { _ilEmitter = ilEmitter; _ilEmitter .Emit(OpCodes.Ldc_I4, elementsCount) .Emit(OpCodes.Newarr, elementType); }
public IfStatementDesigner IsNull(LocalBuilder localVariable) { _ilEmitter .Emit(OpCodes.Ldloc, localVariable) .Emit(OpCodes.Ldnull) .Emit(OpCodes.Ceq) .Emit(OpCodes.Brfalse, _endBranchLabel); return(this); }
public ImmutableArray <Diagnostic> Emit(string moduleName, string[] references, string outputPath) { var parseDiagnostics = this.SyntaxTrees.SelectMany(st => st.Diagnostics); var diagnostics = parseDiagnostics.Concat(this.GlobalScope.Diagnostics).ToImmutableArray(); if (diagnostics.Any()) { return(diagnostics); } var program = this.GetProgram(); return(CilEmitter.Emit(program, moduleName, references, outputPath)); }
public void FillArray(IEnumerable <LocalBuilder> localVariables) { var index = 0; foreach (var localVariable in localVariables) { _ilEmitter .Emit(OpCodes.Dup) .Emit(OpCodes.Ldc_I4, index) .Emit(OpCodes.Ldloc, localVariable) .Emit(OpCodes.Stelem_Ref); index++; } }
public ControlFlowDesigner PushToStack(LocalBuilder localVariable) { _ilEmitter.Emit(OpCodes.Ldloc, localVariable); return(this); }
public VariableDesigner AssignTo(Action <LocalBuilder> assignAction) { assignAction(Variable); _ilEmitter.Emit(OpCodes.Stloc, Variable); return(this); }