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 JsNode VisitInvocationResolveResultAsCtor(CSharpInvocationResolveResult res) { if (res.Type.Kind == TypeKind.Delegate) { return(Visit(res.Arguments.Single())); } var me = (IMethod)res.Member; var meAtt = Sk.GetJsMethodAttribute(me); var ce = me.GetDeclaringTypeDefinition(); var att = ce == null ? null : ce.GetJsTypeAttribute(); if (att != null && att.Mode == JsMode.Json && (meAtt == null || meAtt.Name == null)) { var jtfn = ce == null ? null : Sk.GetJsonTypeFieldName(ce); var node2 = VisitInvocationResolveResult(res); var json = Importer.InitializersToJson(res.InitializerStatements, res.Type); if (jtfn != null) { var x = json as JsJsonObjectExpression; if (x != null) { x.Add(jtfn, SkJs.EntityTypeRefToMember(res.Type)); } } return(json); } else { var invokeExp = (JsInvocationExpression)VisitInvocationResolveResult(res); var newExp = new JsNewObjectExpression { Invocation = invokeExp }; JsExpression finalExp; if (meAtt != null && meAtt.OmitNewOperator) { finalExp = invokeExp; } else { finalExp = newExp; } if (meAtt != null && meAtt.JsonInitializers) { var json = Importer.InitializersToJson(res.InitializerStatements, res.Type); invokeExp.Arguments.Add(json); } else if (res.InitializerStatements.IsNotNullOrEmpty()) { var func = Js.Function(); var inits2 = res.InitializerStatements.Select(t => Visit(t)).ToList(); //var init1 = res.InitializerStatements[0]; var target = AstNodeConverter.FindInitializedObjectResolveResult(res);// ((init1 as OperatorResolveResult).Operands[0] as MemberResolveResult).TargetResult as InitializedObjectResolveResult; var varName = Importer.Initializers[target]; func.Add(Js.Var(varName, finalExp).Statement()); foreach (var init in inits2) { var exp = ((JsExpression)init); func.Add(exp.Statement()); } func.Add(Js.Return(Js.Member(varName))); finalExp = Importer.WrapFunctionAndInvoke(res, func); } return(finalExp); } }