protected override void GenerateMethodInvokeExpression(CodeMethodInvokeExpression expression) { TextWriter output = base.Output; this.GenerateMethodReferenceExpression(expression.Method); output.Write('('); this.OutputExpressionList(expression.Parameters); output.Write(')'); }
protected override void GenerateMethodInvokeExpression(CodeMethodInvokeExpression expression) { if (expression.Parameters.Count == 0 && expression.Method.MethodName == "ToString") { base.Output.Write("to!string("); if (expression.Method.TargetObject != null) { GenerateExpression(expression.Method.TargetObject); } base.Output.Write(")"); } else { base.GenerateMethodInvokeExpression(expression); } }
public void Write(CodeMemberMethod mthd) { if (Operations.Count == 1 && Operations[0].OpType == BitPatternPieceOperation.OperationType.PatternInvoke) { mthd.Statements.Add(Operations[0].GetExpression()); } else { CodeExpression expr = null; uint curLength = 0; for(int i = Operations.Count - 1; i >= 0; i--) { if (expr == null) { expr = Utils.WrapInCast(Operations[i].GetExpression(), (byte)TotalLength); } else { expr = new CodeBinaryOperatorExpression( Utils.WrapInCast( new CodeBinaryOperatorExpression( Utils.WrapInCast(Operations[i].GetExpression(), (byte)TotalLength), CodeBinaryOperatorType.ShiftLeft, new CodePrimitiveExpression((int)curLength) ), (byte)TotalLength ), CodeBinaryOperatorType.BitwiseOr, expr ); } curLength += Operations[i].Length; } expr = Utils.WrapInCast(expr, (byte)TotalLength); CodeExpression stat = null; switch (TotalLength) { case 0: stat = null; break; case 8: stat = new CodeMethodInvokeExpression( StaticTypeReferences.Emit_StreamArg, "WriteImm8", Utils.WrapInCast(expr, 8) ); break; case 16: stat = new CodeMethodInvokeExpression( StaticTypeReferences.Emit_StreamArg, "WriteImm16", Utils.WrapInCast(expr, 16) ); break; case 32: stat = new CodeMethodInvokeExpression( StaticTypeReferences.Emit_StreamArg, "WriteImm32", Utils.WrapInCast(expr, 32) ); break; default: throw new Exception("Unknown total size for a bit pattern piece! The total number of bits must be 8, 16 or 32!"); } if (stat != null) { mthd.Statements.Add(stat); } } }