Beispiel #1
0
        /// <remarks>
        /// See $7.10.10 of C# 4 Spec for details.
        /// </remarks>
        Value Visit(TypeIsResolveResult result)
        {
            var  importedType = NullableType.GetUnderlyingType(Import(result.TargetType));
            var  val          = Convert(result.Input);
            var  conversions  = CSharpConversions.Get(debuggerTypeSystem);
            bool evalResult   = false;

            if (!val.IsNull)
            {
                IType inputType = NullableType.GetUnderlyingType(val.Type);
                if (inputType.Equals(importedType))
                {
                    evalResult = true;
                }
                else if (conversions.IsImplicitReferenceConversion(inputType, importedType))
                {
                    evalResult = true;
                }
                else if (conversions.IsBoxingConversion(inputType, importedType))
                {
                    evalResult = true;
                }
            }
            return(Eval.CreateValue(evalThread, evalResult));
        }
Beispiel #2
0
        public JNode VisitTypeIsResolveResult(TypeIsResolveResult res)
        {
            var typeDef = res.TargetType.GetDefinitionOrArrayType(Compiler);
            //if (Sk.OmitCasts(typeDef))
            //{
            //    return J.True();
            //    //var node2 = Visit(res.Input);
            //    //return node2;
            //}
            //else
            //{
            var node2 = VisitExpression(res.Input).InstanceOf(JNaming.JAccess(res.TargetType));

            return(node2);
            //}
        }
Beispiel #3
0
 public JsNode VisitTypeIsResolveResult(TypeIsResolveResult res)
 {
     if (Sk.OmitCasts(res.TargetType))
     {
         return(Js.True());
         //var node2 = Visit(res.Input);
         //return node2;
     }
     else if (Sk.NativeCasts(res.TargetType))
     {
         var typeFieldName = Sk.GetJsonTypeFieldName(res.TargetType.GetDefinitionOrArrayType());
         if (typeFieldName != null && Sk.IsJsonMode(res.TargetType.GetDefinitionOrArrayType()))
         {
             return(Js.Parentheses(VisitExpression(res.Input).Or(Js.Json())).Member(typeFieldName).Equal(SkJs.EntityTypeRefToMember(res.TargetType)));
         }
         var node2 = VisitExpression(res.Input).InstanceOf(SkJs.EntityTypeRefToMember(res.TargetType));
         return(node2);
     }
     else
     {
         var node2 = Js.Member("Is").Invoke(VisitExpression(res.Input), SkJs.EntityTypeRefToMember(res.TargetType));
         return(node2);
     }
 }
 public virtual TResult VisitTypeIsResolveResult(TypeIsResolveResult rr, TData data)
 {
     VisitChildResolveResults(rr, data);
     return(default(TResult));
 }
Beispiel #5
0
 string Visit(TypeIsResolveResult result)
 {
     throw new NotImplementedException();
 }
Beispiel #6
0
 public override string VisitTypeIsResolveResult(TypeIsResolveResult rr, object data)
 {
     return(CompileFactoryCall("TypeIs", new[] { typeof(Expression), typeof(Type) }, new[] { VisitResolveResult(rr.Input, null), ExpressionTreeBuilder.GetTypeName(rr.TargetType, this._emitter) }));
 }
Beispiel #7
0
 public virtual object VisitTypeIsResolveResult(TypeIsResolveResult rr, object data)
 {
     VisitChildResolveResults(rr, data);
     return(null);
 }
		public override JsExpression VisitTypeIsResolveResult(TypeIsResolveResult rr, object data) {
			return CompileFactoryCall("TypeIs", new[] { typeof(Expression), typeof(Type) }, new[] { VisitResolveResult(rr.Input, null), _instantiateType(rr.TargetType) });
		}
 public object VisitTypeIsResolveResult(TypeIsResolveResult res)
 {
     throw new NotImplementedException();
 }