public override object Exec(DoubleType firstOperand, object arg) { // * Double type and bounded type variable if (TypeExpression.As <DoubleType>(this.secondOperand) != null) { return(0); } // * WriteType variable TypeVariable typeVariable = this.secondOperand as TypeVariable; if (typeVariable != null && typeVariable.Substitution == null) { // * A free variable is complete promotion return(0); } // * Union type UnionType unionType = TypeExpression.As <UnionType>(this.secondOperand); if (unionType != null) { return(unionType.SuperType(firstOperand)); } // * Field type and bounded type variable FieldType fieldType = TypeExpression.As <FieldType>(this.secondOperand); if (fieldType != null) { return(firstOperand.AcceptOperation(new PromotionLevelOperation(fieldType.FieldTypeExpression), arg)); } // * Use the BCL object oriented approach return(firstOperand.AsClassType().AcceptOperation(this, arg)); }
public override object Exec(DoubleType d, object arg) { return(d.AsClassType().AcceptOperation(this, arg)); }