public JNode ExportInitializer(IMember fieldOrProperty, BlockStatement ccBlock, bool isGlobal, bool isNative = false) { var initializer = GetCreateInitializer(fieldOrProperty); var init2 = AccessSelfFieldOrProperty(fieldOrProperty).Assign(initializer); var jsInit = JsCodeImporter.VisitExpression(init2); if (isGlobal) { //danel HACK var st = new JPreUnaryExpression { Operator = "var ", Right = jsInit }.Statement(); return(st); } else if (isNative) { var st = jsInit.Statement(); return(st); } else //clr { var st = jsInit.Statement(); return(st); } }
public virtual List <JEntityDeclaration> _VisitField(IField fld) { var init2 = GetCreateFieldInitializer(fld); JExpression initializer = null; if (init2 != null) { initializer = JsCodeImporter.VisitExpression(init2); } var fe2 = new JFieldDeclaration { FieldDefinition = fld, Initializer = initializer, Type = fld.Type.JAccess(), Name = JNaming.JName(fld) }; ImportModifiers(fld, fe2); return(new List <JEntityDeclaration> { fe2 }); }
protected JBlock ExportMethodBody(IMethod me) { if (me.DeclaringTypeDefinition.IsInterface()) { return(null); } if (CompilerConfig.Current.EnableLogging) { Log.Debug("JsTypeImporter: Visit Method: " + me.ToString()); } var nativeCode = JMeta.GetNativeCode(me); if (nativeCode != null) { var block = J.Block().Add(J.Code(nativeCode).Statement()); //TODO: double semicolon? var x = block.ToJs(); return(block); } var def = me.GetDefinition(); if (def == null || def.IsNull) { if (me.DeclaringTypeDefinition.IsDelegate()) { var block = J.Block(); if (!me.ReturnType.IsVoid()) { block.Add(J.Return(J.Null())); } return(block); } if (me.IsAutomaticEventAccessor()) { if (me.IsEventAddAccessor()) { var node = GenerateAutomaticEventAccessor((IEvent)me.GetOwner(), false); return(node.Block); } else if (me.IsEventRemoveAccessor()) { var node = GenerateAutomaticEventAccessor((IEvent)me.GetOwner(), true); return(node.Block); } } else if (me.IsAutomaticPropertyAccessor()) { var bf = J.Member(JNaming.JName(me.AccessorOwner).ToJavaNaming()); if (!me.IsStatic) { bf.PreviousMember = J.This(); } else if (!JMeta.IsGlobalMethod(me)) { bf.PreviousMember = JNaming.JAccess(me.DeclaringType); } if (me.IsGetter()) { return(J.Block().Add(J.Return(bf))); } else { return(J.Block().Add(bf.Assign(J.Member("value")).Statement())); } } return(null); } var block2 = (JBlock)JsCodeImporter.Visit(def); if (def.Descendants.OfType <YieldReturnStatement>().FirstOrDefault() != null) { if (!JsCodeImporter.SupportClrYield) { if (block2.Statements == null) { block2.Statements = new List <JStatement>(); } var arg = me.ReturnType.TypeArguments[0].JAccess(); var listType = J.Members("java.util.ArrayList").AddGenericArg(arg); var yieldVar = J.Var("$yield", listType, J.New(listType)).Statement(); block2.Statements.Insert(0, yieldVar); block2.Statements.Add(JCodeImporter.GenerateYieldReturnStatement(me)); } } return(block2); }
protected JBlock ExportConstructorBody(IMethod ctor) { var ctorNode = (ConstructorDeclaration)ctor.GetDeclaration(); BlockStatement ccc = null; if (ctorNode != null) { ccc = ctorNode.Body; } //var ccc = ctor.GetDefinition();//.decl as CsConstructor; //var ccc = ctor.GetDefinition(); var block2 = (JBlock)JsCodeImporter.Visit(ccc); if (block2 == null) { block2 = new JBlock { Statements = new List <JStatement>() } } ; var ce = ctor.GetDeclaringTypeDefinition(); var isClr = JMeta.IsClrType(ce); var isPrototype = JMeta.IsNativeType(ce); var statements = new List <JStatement>(); if (!ctor.IsStatic) { //TODO: //base/this ctor invocation var invocation = GetConstructorBaseOrThisInvocation2(ctor); if (invocation.Arguments.Count > 0) { var exp2 = (JNewObjectExpression)JsCodeImporter.VisitExpression(invocation); var exp3 = exp2.Invocation; exp3.Member = J.Member("super"); statements.Insert(0, exp3.Statement()); } } if (block2.Statements == null) { block2.Statements = new List <JStatement>(); } block2.Statements.InsertRange(0, statements); return(block2); } void ExportConstructorParameters(IMethod ctor, JFunction func) { var ce = ctor.GetDeclaringTypeDefinition(); var list = new List <string>(); if (!JMeta.IgnoreTypeArguments(ce)) { //danel var gprms = ce.TypeParameters.ToList();//.GetGenericArguments().Where(ga => ga.isGenericParam()).ToList(); if (gprms.IsNotNullOrEmpty()) { var i = 0; foreach (var gprm in gprms) { func.Parameters.Add(gprm.Name); if (!ctor.IsStatic && func.Block != null) { func.Block.Statements.Insert(i, J.This().Member(gprm.Name).Assign(J.Member(gprm.Name)).Statement()); i++; } } } } var prms = ctor.Parameters; if (prms != null) { func.Parameters.AddRange(prms.Select(t => t.Name)); } }