protected override ICode VisitNewArray(ExprNewArray e) {
     var ctx = e.Ctx;
     MethodInfo caGenDef;
     if (e.ElementType.IsValueType) {
         caGenDef = ((Func<int, int[]>)InternalFunctions.CreateArrayValueType<int>).Method.GetGenericMethodDefinition();
     } else {
         caGenDef = ((Func<int, object[]>)InternalFunctions.CreateArrayRefType<object>).Method.GetGenericMethodDefinition();
     }
     var mCreateArray = ctx.Module.Import(caGenDef).MakeGeneric(e.ElementType);
     var expr = new ExprCall(ctx, mCreateArray, null, e.ExprNumElements);
     return expr;
 }
 protected override ICode VisitNewArray(ExprNewArray e) {
     newArrayTypes.Add(e.Type);
     return base.VisitNewArray(e);
 }
 protected override ICode VisitNewArray(ExprNewArray e) {
     this.code.Append("new[");
     this.Visit(e.ExprNumElements);
     this.code.Append("]");
     return e;
 }
 protected override ICode VisitNewArray(ExprNewArray e) {
     throw new InvalidOperationException("Should never get here");
 }
 private Stmt NewArray(Instruction inst) {
     var exprNumElements = this.stack.Pop();
     var elementType = ((TypeReference)inst.Operand).FullResolve(this.ctx);
     var expr = new ExprNewArray(this.ctx, elementType, exprNumElements);
     return this.SsaLocalAssignment(expr);
 }