예제 #1
0
 public ArrayDesigner(CilEmitter ilEmitter, Type elementType, int elementsCount)
 {
     _ilEmitter = ilEmitter;
     _ilEmitter
     .Emit(OpCodes.Ldc_I4, elementsCount)
     .Emit(OpCodes.Newarr, elementType);
 }
예제 #2
0
 public IfStatementDesigner IsNull(LocalBuilder localVariable)
 {
     _ilEmitter
     .Emit(OpCodes.Ldloc, localVariable)
     .Emit(OpCodes.Ldnull)
     .Emit(OpCodes.Ceq)
     .Emit(OpCodes.Brfalse, _endBranchLabel);
     return(this);
 }
예제 #3
0
        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));
        }
예제 #4
0
        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);
 }
예제 #6
0
 public VariableDesigner AssignTo(Action <LocalBuilder> assignAction)
 {
     assignAction(Variable);
     _ilEmitter.Emit(OpCodes.Stloc, Variable);
     return(this);
 }