internal static Expression getIndexerExpression(CsExpression pStatement, IEnumerable <CsExpression> pList, Expression pIndexer, bool pForce, bool pGetSetter, FactoryExpressionCreator pCreator) { TheClass k = TheClassFactory.Get(pStatement, pCreator); List <string> indexes = new List <string>(); List <CsEntityTypeRef> param = new List <CsEntityTypeRef>(); foreach (CsExpression ex in pList) { Expression te = pCreator.Parse(ex); indexes.Add(te.Value); param.Add(te.Type); } string exp = pIndexer == null ? "super" : pIndexer.Value; bool isInternal = false; TheIndexer i = null; if (k != null) { i = k.GetIndexer(pStatement); } //TODO: Check array access... if (i == null || pIndexer == null || (pIndexer.Type != null && pIndexer.Type.type == cs_entity_type.et_array)) { //Array access or unknown accessor exp += "[" + indexes[0] + "]"; } else { //TheIndexers i = k.GetIndexerBySignature(param); isInternal = true; CsAssignmentExpression parent = pStatement.parent as CsAssignmentExpression; if (!pForce) { pGetSetter = parent != null && parent.lhs.Equals(pStatement); } if (pGetSetter) { exp += "." + i.Setter.Name + "(" + string.Join(", ", indexes.ToArray()) + ", {0})"; } else { exp += "." + i.Getter.Name + "(" + string.Join(", ", indexes.ToArray()) + ")"; } } return(new Expression(exp, pStatement.entity_typeref, isInternal)); }
public static void Parse(TheIndexer pGetIndexer, CodeBuilder pBuilder, FactoryExpressionCreator pCreator) { bool isInterface = pGetIndexer.MyClass.IsInterface; if (pGetIndexer.Getter != null) { pBuilder.AppendFormat("{0}function {1}({2}):{3}{4}", As3Helpers.ConvertModifiers(pGetIndexer.Getter.Modifiers, _notValidMod), pGetIndexer.Getter.Name, As3Helpers.GetParameters(pGetIndexer.Getter.Arguments), As3Helpers.Convert(pGetIndexer.ReturnType), isInterface ? ";":" {" ); pBuilder.AppendLine(); if (!isInterface) { BlockParser.Parse(pGetIndexer.Getter.CodeBlock, pBuilder, pCreator); pBuilder.AppendLine(); pBuilder.AppendLine("}"); pBuilder.AppendLine(); } } if (pGetIndexer.Setter == null) { return; } pBuilder.AppendFormat( "{0}function {1}({2}):void{3}", As3Helpers.ConvertModifiers(pGetIndexer.Setter.Modifiers, _notValidMod), pGetIndexer.Setter.Name, As3Helpers.GetParameters(pGetIndexer.Setter.Arguments), isInterface ? ";" : " {" ); pBuilder.AppendLine(); if (isInterface) { return; } //BlockParser.InsideSetter = true; BlockParser.Parse(pGetIndexer.Setter.CodeBlock, pBuilder, pCreator); //BlockParser.InsideSetter = false; pBuilder.AppendLine(); pBuilder.AppendLine("}"); pBuilder.AppendLine(); }
public static void Parse(TheIndexer pGetIndexer, CodeBuilder pBuilder, FactoryExpressionCreator pCreator) { bool isInterface = pGetIndexer.MyClass.IsInterface; if (pGetIndexer.Getter != null) { pBuilder.AppendFormat("{0}function {1}({2}):{3}{4}", JsHelpers.ConvertModifiers(pGetIndexer.Getter.Modifiers, _notValidMod), pGetIndexer.Getter.Name, JsHelpers.GetParameters(pGetIndexer.Getter.Arguments), JsHelpers.Convert(pGetIndexer.ReturnType), isInterface ? ";":" {" ); pBuilder.AppendLine(); if (!isInterface) { BlockParser.Parse(pGetIndexer.Getter.CodeBlock, pBuilder, pCreator); pBuilder.AppendLine(); pBuilder.AppendLine("}"); pBuilder.AppendLine(); } } if (pGetIndexer.Setter == null) { return; } pBuilder.AppendFormat( "{0}function {1}({2}):void{3}", JsHelpers.ConvertModifiers(pGetIndexer.Setter.Modifiers, _notValidMod), pGetIndexer.Setter.Name, JsHelpers.GetParameters(pGetIndexer.Setter.Arguments), isInterface ? ";" : " {" ); pBuilder.AppendLine(); if (isInterface) return; //BlockParser.InsideSetter = true; BlockParser.Parse(pGetIndexer.Setter.CodeBlock, pBuilder, pCreator); //BlockParser.InsideSetter = false; pBuilder.AppendLine(); pBuilder.AppendLine("}"); pBuilder.AppendLine(); }