public override CodeTypeMember CreateBinaryOperator(
            string argumentTypeName, string firstArgumentName, string secondArgumentName,
            CodeOverridableOperatorType operatorType, string returnTypeName,
            CodeStatementCollection statements, MemberAttributes attributes)
        {
            StringBuilder sb = new StringBuilder();

            AppendMemberAttributeString(sb, c_memberAttributeKeywordMappings, attributes);
            sb.Append(" ");
            sb.Append(returnTypeName);
            sb.Append(" operator ");
            sb.Append(GetOverridableOperatorString(operatorType));
            sb.Append(" (");
            sb.Append(argumentTypeName);
            sb.Append(" ");
            sb.Append(firstArgumentName);
            sb.Append(", ");
            sb.Append(argumentTypeName);
            sb.Append(" ");
            sb.Append(secondArgumentName);
            sb.Append(") {");

            StringWriter writer = new StringWriter(sb);

            // CodeGeneratorOptions options  = new CodeGeneratorOptions ();

            foreach (CodeStatement statement in statements)
            {
                Generator.GenerateCodeFromStatement(statement, writer, null);
            }

            sb.Append("        }");

            return(new CodeSnippetTypeMember(sb.ToString()));
        }
示例#2
0
 public virtual CodeTypeMember CreateBinaryOperator(
     string argumentTypeName, string firstArgumentName, string secondArgumentName,
     CodeOverridableOperatorType operatorType, string returnTypeName,
     CodeStatementCollection statements, MemberAttributes attributes)
 {
     throw new NotSupportedException(this.GetType().FullName + " does not support operator overriding.");
 }
        private string GetOverridableOperatorString(CodeOverridableOperatorType operatorType)
        {
            switch (operatorType)
            {
            case CodeOverridableOperatorType.Equality:
                return("==");

            case CodeOverridableOperatorType.Inequality:
                return("!=");

            case CodeOverridableOperatorType.BitwiseAnd:
                return("&");

            case CodeOverridableOperatorType.BooleanOr:
                return("|");

            case CodeOverridableOperatorType.GreaterThan:
                return(">");

            case CodeOverridableOperatorType.GreaterThanOrEqual:
                return(">=");

            case CodeOverridableOperatorType.LessThan:
                return("<");

            case CodeOverridableOperatorType.LessThanOrEqual:
                return("<=");

            case CodeOverridableOperatorType.Add:
                return("+");

            case CodeOverridableOperatorType.Multiply:
                return("*");

            case CodeOverridableOperatorType.Subtract:
                return("-");

            case CodeOverridableOperatorType.Divide:
                return("/");

            case CodeOverridableOperatorType.Modulus:
                return("%");

            default:
                throw new ArgumentException("Invalid CodeOverridableOperatorType value: " + operatorType.ToString(), "operatorType");
            }
        }