コード例 #1
0
		protected override void GenerateMethodInvokeExpression(CodeMethodInvokeExpression expression)
		{
			TextWriter output = base.Output;
			this.GenerateMethodReferenceExpression(expression.Method);
			output.Write('(');
			this.OutputExpressionList(expression.Parameters);
			output.Write(')');
		}
コード例 #2
0
		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);
			}
		}
コード例 #3
0
		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);
				}
			}
		}