2 // GenericTypeExpressionVisitor.cs
5 // Alexander Chebaturkin (chebaturkin@gmail.com)
7 // Copyright (C) 2012 Alexander Chebaturkin
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 namespace Mono
.CodeContracts
.Static
.Analysis
.Numerical
{
30 abstract class GenericTypeExpressionVisitor
<TVariable
, TExpression
, TIn
, TOut
> {
31 protected readonly IExpressionDecoder
<TVariable
, TExpression
> Decoder
;
33 protected GenericTypeExpressionVisitor (IExpressionDecoder
<TVariable
, TExpression
> decoder
)
38 public virtual TOut
Visit (TExpression e
, TIn input
)
40 switch (Decoder
.TypeOf (e
)) {
41 case ExpressionType
.Unknown
:
42 return Default (e
, input
);
43 case ExpressionType
.Int32
:
44 return VisitInt32 (e
, input
);
45 case ExpressionType
.Bool
:
46 return VisitBool (e
, input
);
48 throw new AbstractInterpretationException ("Unknown type for expressions " +
53 protected virtual TOut
VisitBool (TExpression expr
, TIn input
)
55 return Default (expr
, input
);
58 protected virtual TOut
VisitInt32 (TExpression expr
, TIn input
)
60 return Default (expr
, input
);
63 protected abstract TOut
Default (TExpression expr
, TIn input
);