Example #1
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            // "base" "[" expression-list "]"
            CsBaseIndexerAccess indexerAccess = (CsBaseIndexerAccess)pStatement;

            return(ElementAccessHelper.getIndexerExpression(indexerAccess, indexerAccess.expression_list.list, null, false, false, pCreator));
        }
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsPostIncrementDecrementExpression ex = (CsPostIncrementDecrementExpression)pStatement;

			Expression exp = pCreator.Parse(ex.expression);
			if (exp.InternalType) {
				if (ex.expression is CsElementAccess) {
					string setter = ElementAccessHelper.parseElementAccess(ex.expression, true, true, pCreator).Value;

					switch (ex.oper) {
						case CsTokenType.tkINC:
							return new Expression(string.Format(setter, exp.Value + "++"), exp.Type);

						case CsTokenType.tkDEC:
							return new Expression(string.Format(setter, exp.Value + "--"), exp.Type);

						default:
							throw new Exception();
					}

				}
			}

			switch (ex.oper) {
				case CsTokenType.tkINC:
					return new Expression(exp.Value + "++", exp.Type);

				case CsTokenType.tkDEC:
					return new Expression(exp.Value + "--", exp.Type);

				default:
					throw new NotImplementedException();
			}
		}
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            //embedded-type "." identifier
            CsPredefinedTypeMemberAccess ex = pStatement as CsPredefinedTypeMemberAccess;
            string name;
            bool   renamed = Helpers.GetRealName(ex, ex.identifier.identifier, out name);

            if (renamed)
            {
                return(new Expression(name, pStatement.entity_typeref));
            }

            CsEntityProperty p = ex.entity as CsEntityProperty;

            if (p != null)
            {
                //getter, rename
                name = "get_" + name + "()";
            }
            else if (ex.ec == expression_classification.ec_event_access)                //remove eventhandler name
            {
                name = string.Empty;
            }
            //FactoryExpressionCreator.Parse(ex.expression).Value
            return(new Expression(
                       "nose" + "." + name,
                       pStatement.entity_typeref
                       ));
        }
Example #4
0
        public static void Parse(TheConstructor pConstructor, CodeBuilder pBuilder, FactoryExpressionCreator pCreator)
        {
            if (pConstructor.IsStaticConstructor)
            {
                pBuilder.Append("{");
            }
            else
            {
                pBuilder.AppendFormat("{4}{0}function {1}({2}){3} {{",
                                      ClassParser.IsMainClass ? "private " : As3Helpers.ConvertModifiers(pConstructor.Modifiers, _notValidConstructorMod),
                                      ClassParser.IsMainClass ? @"$ctor" : pConstructor.Name,
                                      As3Helpers.GetParameters(pConstructor.Arguments),
                                      ClassParser.IsMainClass ? ":void" : string.Empty,                          // pConstructor.MyClass.Name,
                                      pConstructor.OverridesBaseConstructor ? "override " : string.Empty
                                      );
            }

            pBuilder.AppendLine();

            if (pConstructor.HasBaseCall)
            {
                pBuilder.AppendFormat("\tsuper({0});", As3Helpers.GetCallingArguments(pConstructor.BaseArguments));
                pBuilder.AppendLine();
            }

            BlockParser.Parse(pConstructor.CodeBlock, pBuilder, pCreator);

            pBuilder.AppendLine("}");
            pBuilder.AppendLine();
        }
Example #5
0
 public LambdaMethodExpression(CsLambdaExpression pStatement, FactoryExpressionCreator pCreator)
 {
     Arguments  = BaseMethod.getArguments(pStatement.signature.parameters, pCreator);
     ReturnType = Helpers.GetType(pStatement.best_common_type);
     //ReturnType = Helpers.GetType(((CsEntityMethod)((CsEntityAnonymousMethod)pStatement.entity).parent.parent).specifier.return_type);
     CodeBlock = pStatement.body;
 }
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			// "default" ( type )
			return new Expression(
				null,
				pStatement.entity_typeref
			);
		}
Example #7
0
		public static void Parse(TheConstructor pConstructor, CodeBuilder pBuilder, FactoryExpressionCreator pCreator) {
			if (pConstructor.IsStaticConstructor) {
				pBuilder.Append("{");

			} else {
				pBuilder.AppendFormat("{4}{0}function {1}({2}){3} {{",
								ClassParser.IsMainClass ? "private " : As3Helpers.ConvertModifiers(pConstructor.Modifiers, _notValidConstructorMod),
								ClassParser.IsMainClass ? @"$ctor" : pConstructor.Name,
								As3Helpers.GetParameters(pConstructor.Arguments),
								ClassParser.IsMainClass ? ":void" : string.Empty,// pConstructor.MyClass.Name,
								pConstructor.OverridesBaseConstructor ? "override " : string.Empty
					);
			}

			pBuilder.AppendLine();

			if (pConstructor.HasBaseCall) {
				pBuilder.AppendFormat("\tsuper({0});", As3Helpers.GetCallingArguments(pConstructor.BaseArguments));
				pBuilder.AppendLine();
			}
		
			BlockParser.Parse(pConstructor.CodeBlock, pBuilder, pCreator);

			pBuilder.AppendLine("}");
			pBuilder.AppendLine();
		}
Example #8
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            //"(" expression ")"
            CsParenthesizedExpression ex = (CsParenthesizedExpression)pStatement;

            return(new Expression("(" + pCreator.Parse(ex.expression).Value + ")", pStatement.entity_typeref));
        }
Example #9
0
        internal TheConstructor(CsConstructor pConstructor, TheClass pMyClass, FactoryExpressionCreator pCreator)
        {
            _constructor = pConstructor;
            _creator     = pCreator;
            MyClass      = pMyClass;
            Modifiers.AddRange(Helpers.GetModifiers(pConstructor.modifiers));
            Arguments     = getArguments(pConstructor.parameters.parameters, pCreator);
            BaseArguments = Helpers.GetCallingArguments(pConstructor.argument_list, pCreator);

            Signature   = getSignature(Arguments);
            CodeBlock   = pConstructor.definition;
            HasBaseCall = pConstructor.basethis == CsTokenType.tkBASE;

            LinkedList <CsFormalParameter> csFormalParameters = pConstructor.parameters.parameters;

            _noFormalParams     = csFormalParameters == null;
            _name               = pConstructor.identifier.identifier;
            IsStaticConstructor = (pConstructor.modifiers.flags & (uint)CsModifierEnum.mSTATIC) != 0;

            if (pConstructor.basethis == CsTokenType.tkBASE || pConstructor.basethis == CsTokenType.tkTHIS)
            {
                _baseConstructor = pConstructor.basethis == CsTokenType.tkBASE
                                                        ? (CsEntityClass)((CsEntityClass)pConstructor.entity.parent).base_type.u
                                                        : ((CsEntityClass)pConstructor.entity.parent);
            }
        }
Example #10
0
        public TheMethod GetMethod(CsEntityMethod pMethod, FactoryExpressionCreator pCreator)
        {
            if (pMethod.decl != null)
            {
                return(GetMethod((CsMethod)pMethod.decl));
            }

            TheMethod c;

            if (_entityMethods.TryGetValue(pMethod, out c))
            {
                return(c);
            }

            c = new TheMethod(pMethod, this, pCreator);
            Dictionary <string, bool> methodNames = new Dictionary <string, bool>();

            foreach (KeyValuePair <CsEntityMethod, TheMethod> entityMethod in
                     _entityMethods.Where(pEntityMethod => methodNames.ContainsKey(pEntityMethod.Value.Name)))
            {
                entityMethod.Value._isUnique = false;
                c._isUnique = false;
            }

            _entityMethods.Add(pMethod, c);
            return(c);
        }
Example #11
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsLambdaExpression ex = (CsLambdaExpression)pStatement;

            LambdaMethodExpression lambda = new LambdaMethodExpression((CsLambdaExpression)pStatement, pCreator);

            CodeBuilder b = new CodeBuilder();

            b.AppendFormat("function ({0}):{1} {{",
                           As3Helpers.GetParameters(lambda.Arguments),
                           (lambda.ReturnType == null) ? "void" : As3Helpers.Convert(lambda.ReturnType)
                           );

            b.Indent();
            b.Indent();
            b.Indent();
            b.AppendLine();

            if (!(lambda.CodeBlock is CsBlock))
            {
                b.Append("return ");
            }

            BlockParser.ParseNode(lambda.CodeBlock, b, pCreator);

            b.AppendLine("}");
            b.AppendLine();
            b.Unindent();
            b.Unindent();
            b.Unindent();
            return(new Expression(b.ToString(), ex.entity_typeref));
        }
Example #12
0
        public static void ParseNode(CsNode pNode, CodeBuilder pSb, FactoryExpressionCreator pCreator)
        {
            CsBlock block = pNode as CsBlock;

            if (block != null)
            {
                Parse(block, pSb, pCreator);
                return;
            }

            CsStatement statement = pNode as CsStatement;

            if (statement != null)
            {
                pSb.Indent();
                parseStatement(statement, pSb, pCreator);
                pSb.Unindent();
                return;
            }

            CsExpression expression = pNode as CsExpression;

            if (expression != null)
            {
                Expression ex = pCreator.Parse(pNode as CsExpression);
                pSb.Append(ex.Value + ";");
                pSb.AppendLine();
                return;
            }

            throw new Exception();
        }
Example #13
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsBaseMemberAccess baseMemberAccess = (CsBaseMemberAccess)pStatement;

            // "base" "." identifier (type-argument-list)?
            return(new Expression("super." + baseMemberAccess.identifier.identifier, pStatement.entity_typeref));
        }
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsLambdaExpression ex = (CsLambdaExpression)pStatement;

			LambdaMethodExpression lambda = new LambdaMethodExpression((CsLambdaExpression)pStatement, pCreator);

			CodeBuilder b = new CodeBuilder();
			b.AppendFormat("function ({0}):{1} {{",
			               As3Helpers.GetParameters(lambda.Arguments),
			               (lambda.ReturnType == null) ? "void" : As3Helpers.Convert(lambda.ReturnType)
				);

			b.Indent();
			b.Indent();
			b.Indent();
			b.AppendLine();

			if (!(lambda.CodeBlock is CsBlock)) {
				b.Append("return ");
			}

			BlockParser.ParseNode(lambda.CodeBlock, b, pCreator);

			b.AppendLine("}");
			b.AppendLine();
			b.Unindent();
			b.Unindent();
			b.Unindent();
			return new Expression(b.ToString(), ex.entity_typeref);
		}
Example #15
0
		public static void Parse(TheMethod pMethod, CodeBuilder pBuilder, FactoryExpressionCreator pCreator) {
			if (pMethod == null) return;
			bool isInterface = pMethod.MyClass.IsInterface;

			Dictionary<string,string> nonValidMethod = new Dictionary<string, string>(_notValidMethodMod);
			if (ClassParser.IsExtension) {
				nonValidMethod.Add("static",string.Empty);
			}

			pBuilder.AppendFormat("{0}function {1}({2}):{3}{4}",
				As3Helpers.ConvertModifiers(pMethod.Modifiers, nonValidMethod),
				pMethod.Name,
				As3Helpers.GetParameters(pMethod.Arguments),
				As3Helpers.Convert(pMethod.ReturnType),
				isInterface ? ";":" {"
			);

			pBuilder.AppendLine();

			if (isInterface)
				return;

			pBuilder.AppendLine();
			BlockParser.Parse(pMethod.CodeBlock, pBuilder, pCreator);
			pBuilder.AppendLine();
			pBuilder.AppendLine("}");
			pBuilder.AppendLine();
		}
Example #16
0
        internal TheIndexer(CsIndexer pIndexer, TheClass pMyClass, FactoryExpressionCreator pCreator)
        {
            MyClass    = pMyClass;
            _creator   = pCreator;
            Arguments  = getArguments(pIndexer.parameters.parameters, pCreator);
            Signature  = getSignature(Arguments);
            ReturnType = Helpers.GetType(pIndexer.entity.specifier.return_type);
            Modifiers.AddRange(Helpers.GetModifiers(pIndexer.modifiers));

            //Name = Helpers.GetRealName(pIndexer, pIndexer.entity.name);
            Name = pIndexer.entity.name;

            FullName = MyClass.FullName + "." + Name;
            //FullRealName = MyClass.FullRealName + "." + RealName;

            string sig = Signature.Replace(',', '_').Replace("<", "").Replace(">", "");

            if (pIndexer.getter != null)
            {
                Getter = processIndexer(pIndexer.getter, false, sig);
            }

            if (pIndexer.setter != null)
            {
                Setter = processIndexer(pIndexer.setter, true, sig);
            }
        }
Example #17
0
        private static void parseUsingStatement(CsStatement pArg1, CodeBuilder pSb, FactoryExpressionCreator pCreator)
        {
            CsUsingStatement           statement   = (CsUsingStatement)pArg1;
            CsLocalVariableDeclaration declaration = statement.resource as CsLocalVariableDeclaration;

            string varname;

            if (declaration == null)
            {
                varname = "$$using$$";
                Expression e = pCreator.Parse(statement.resource);

                pSb.AppendFormat("var {0}:{1} = {2};",
                                 varname,
                                 As3Helpers.Convert(Helpers.GetType(e.Type)),
                                 e.Value
                                 );

                pSb.AppendLine();
            }
            else
            {
                CsLocalVariableDeclarator declarator = declaration.declarators.First.Value;
                StringBuilder             sb         = new StringBuilder();

                sb.AppendFormat("var {0}:{1}",
                                declarator.identifier.identifier,
                                As3Helpers.Convert(Helpers.GetType(declaration.type))
                                );

                varname = declarator.identifier.identifier;

                if (declarator.initializer == null)
                {
                    sb.Append(";");
                }
                else
                {
                    sb.AppendFormat(" = {0};", parseNode(declarator.initializer, pCreator));
                }

                pSb.Append(sb.ToString());
                pSb.AppendLine();
            }

            pSb.Append("try {");
            pSb.AppendLine();

            ParseNode(statement.statement, pSb, pCreator);

            pSb.Append("} finally {");
            pSb.AppendLine();
            pSb.AppendFormat("	if ({0} != null) {0}.Dispose();", varname);
            pSb.AppendLine();

            pSb.Append("}");
            pSb.AppendLine();
            pSb.AppendLine();
        }
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsBinaryExpression li = (CsBinaryExpression)pStatement;

			Expression left = pCreator.Parse(li.lhs);
			Expression right = pCreator.Parse(li.rhs);

			return new Expression(left.Value + " " + JsHelpers.ConvertTokens(Helpers.GetTokenType(li.oper)) + " " + right.Value, pStatement.entity_typeref);
		}
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsOperatorUnaryExpression ex = (CsOperatorUnaryExpression)pStatement;

			return new Expression(
				JsHelpers.ConvertTokens(Helpers.GetTokenType(ex.oper)) + pCreator.Parse(ex.unary_expression).Value,
				pStatement.entity_typeref
			);
		}
 public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
 {
     // "default" ( type )
     return(new Expression(
                null,
                pStatement.entity_typeref
                ));
 }
Example #21
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            //expression "." identifier (type-argument-list?)
            CsPrimaryExpressionMemberAccess ex = (CsPrimaryExpressionMemberAccess)pStatement;
            string name;
            bool   renamed = Helpers.GetRealName(ex, ex.identifier.identifier, out name);

            if (renamed)
            {
                return(new Expression(name, pStatement.entity_typeref));
            }

            CsEntityProperty p          = ex.entity as CsEntityProperty;
            bool             isInternal = false;

            if (p != null && p.decl != null)
            {
                TheClass theClass = TheClassFactory.Get(p, pCreator);
                TheClass parent   = theClass;

                //Am I extending a standard flash class? Do not rename then...
                bool isStandardGetSet = false;
                while (parent.Base != null)
                {
                    isStandardGetSet |= parent.FullName.StartsWith("flash.");
                    parent            = parent.Base;
                }

                if (!isStandardGetSet)
                {
                    TheProperty theProperty = theClass.GetProperty((CsProperty)p.decl);
                    if (theProperty != null)
                    {
                        if (ex.parent is CsAssignmentExpression)
                        {
                            //setter
                            isInternal = true;
                            name       = "set_" + name + "({0})";
                        }
                        else
                        {
                            //getter, rename
                            name = "get_" + name + "()";
                        }
                    }
                }
            }
            else if (ex.ec == expression_classification.ec_event_access)                //remove eventhandler name
            {
                name = string.Empty;
            }

            return(new Expression(
                       pCreator.Parse(ex.expression).Value + "." + name,
                       pStatement.entity_typeref,
                       isInternal
                       ));
        }
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			//object-creation-expression: 
			//"new" type "(" ( argument_list )? ")" object-or-collection-initializer? 
			//"new" type object-or-collection-initializer

			//delegate-creation-expression: 
			//"new" delegate-type "(" expression ")"
			CsNewObjectExpression node = (CsNewObjectExpression)pStatement;

			StringBuilder sb = new StringBuilder();

			string name = As3Helpers.Convert(Helpers.GetType(node.type));
			bool isVector = name.StartsWith("Vector.<", StringComparison.Ordinal) && node.initializer != null;
			bool isArray = name.Equals("Array", StringComparison.Ordinal) && node.initializer != null;

			if (!isArray)
				sb.Append("(new ");

			if (isVector || isArray) {
				if (isVector) {
					int lb = name.IndexOf("<") + 1;
					sb.AppendFormat("<{0}>", name.Substring(lb, name.IndexOf(">") - lb));	
				}

				sb.Append("[");

				CsCollectionInitializer initializer = (CsCollectionInitializer)node.initializer;
				if (initializer.element_initializer_list != null) {
					List<string> args = new List<string>();
					foreach (var csNode in initializer.element_initializer_list) {
						args.Add(pCreator.Parse(csNode).Value);
					}
					sb.Append(String.Join(", ", args.ToArray()));
				}

			} else {
				sb.AppendFormat("{0}(", name);
				if (node.argument_list != null) {
					List<string> args = new List<string>();
					foreach (CsArgument argument in node.argument_list.list) {
						args.Add(pCreator.Parse(argument.expression).Value);
					}

					sb.Append(String.Join(", ", args.ToArray()));
				}
			}

			sb.Append(isVector || isArray ? "]" : ")");

			if (!isArray)
				sb.Append(")");

			return new Expression(
				sb.ToString(),
				pStatement.entity_typeref
			);
		}
Example #23
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsBinaryExpression li = (CsBinaryExpression)pStatement;

            Expression left  = pCreator.Parse(li.lhs);
            Expression right = pCreator.Parse(li.rhs);

            return(new Expression(left.Value + " " + As3Helpers.ConvertTokens(Helpers.GetTokenType(li.oper)) + " " + right.Value, pStatement.entity_typeref));
        }
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsOperatorUnaryExpression ex = (CsOperatorUnaryExpression)pStatement;

            return(new Expression(
                       As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper)) + pCreator.Parse(ex.unary_expression).Value,
                       pStatement.entity_typeref
                       ));
        }
Example #25
0
        public static TheClass Get(CsNode pNode, FactoryExpressionCreator pCreator)
        {
            if (pNode == null)
            {
                return(null);
            }

            CsExpression csExpression = pNode as CsExpression;

            if (csExpression != null && csExpression.ec != expression_classification.ec_nothing)
            {
                return(Get((CsEntity)csExpression.entity, pCreator));
            }

            while (pNode != null)
            {
                if (pNode is CsTypeRef || pNode is CsClass || pNode is CsInterface)
                {
                    break;
                }

                pNode = pNode.parent;
            }

            CsClass klass = pNode as CsClass;

            if (klass != null)
            {
                if (!_classes.ContainsKey(klass))
                {
                    _classes[klass] = new TheClass(klass, pCreator);
                }

                return(_classes[klass]);
            }

            CsTypeRef csTypeRef = pNode as CsTypeRef;

            if (csTypeRef != null)
            {
                return(csTypeRef.entity_typeref == null ? null : Get((CsEntityClass)(csTypeRef.entity_typeref.u), pCreator));
            }

            CsInterface csInterface = pNode as CsInterface;

            if (csInterface != null)
            {
                if (!_interfaces.ContainsKey(csInterface))
                {
                    _interfaces[csInterface] = new TheClass(csInterface, pCreator);
                }

                return(_interfaces[csInterface]);
            }

            throw new Exception();
        }
Example #26
0
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsAsIsExpression ex = (CsAsIsExpression)pStatement;
			
			return new Expression(
				pCreator.Parse(ex.expression).Value 
				+ " "
				+ As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper)) + " " + As3Helpers.Convert(Helpers.GetType(ex.type)),
				ex.entity_typeref
			);
		}
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsPreIncrementDecrementExpression ex = (CsPreIncrementDecrementExpression)pStatement;

			Expression exp = pCreator.Parse(ex.unary_expression);

			return new Expression(
				As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper)) + exp.Value,
				pStatement.entity_typeref
			);
		}
Example #28
0
		private static void parseUsingStatement(CsStatement pArg1, CodeBuilder pSb, FactoryExpressionCreator pCreator) {
			CsUsingStatement statement = (CsUsingStatement)pArg1;
			CsLocalVariableDeclaration declaration = statement.resource as CsLocalVariableDeclaration;

			string varname;

			if (declaration == null) {
				varname = "$$using$$";
				Expression e = pCreator.Parse(statement.resource);

				pSb.AppendFormat("var {0}:{1} = {2};", 
					varname,
					As3Helpers.Convert(Helpers.GetType(e.Type)),
					e.Value
				);

				pSb.AppendLine();

			} else {
				CsLocalVariableDeclarator declarator = declaration.declarators.First.Value;
				StringBuilder sb = new StringBuilder();

				sb.AppendFormat("var {0}:{1}",
					declarator.identifier.identifier,
					As3Helpers.Convert(Helpers.GetType(declaration.type))
				);

				varname = declarator.identifier.identifier;

				if (declarator.initializer == null) {
					sb.Append(";");

				} else {
					sb.AppendFormat(" = {0};", parseNode(declarator.initializer, pCreator));
				}

				pSb.Append(sb.ToString());
				pSb.AppendLine();

			}

			pSb.Append("try {");
			pSb.AppendLine();

			ParseNode(statement.statement, pSb, pCreator);

			pSb.Append("} finally {");
			pSb.AppendLine();
			pSb.AppendFormat("	if ({0} != null) {0}.Dispose();", varname);
			pSb.AppendLine();

			pSb.Append("}");
			pSb.AppendLine();
			pSb.AppendLine();
		}
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsConditionalExpression ex = (CsConditionalExpression)pStatement;

			return new Expression(
				pCreator.Parse(ex.condition).Value + " ? " +
				pCreator.Parse(ex.true_expression).Value + " : " +
				pCreator.Parse(ex.false_expression).Value,

				pStatement.entity_typeref
			);
		}
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsTypeofExpression ex = (CsTypeofExpression)pStatement;
			//"typeof" "(" type ")"

			CsNamespaceOrTypeName isClass = ex.type.type_name as CsNamespaceOrTypeName;
			if (isClass != null) {
				return new Expression(isClass.identifier.identifier, ex.type.entity_typeref);
			}

			throw new NotImplementedException();
		}
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsCastUnaryExpression ex = (CsCastUnaryExpression)pStatement;
			
			//Do not cast anything. This is here just to support the automatic casting done by the flash player.
			return new Expression(
				//As3Helpers.Convert(Helpers.GetType(ex.type)) + "(" + 
				pCreator.Parse(ex.unary_expression).Value 
				//+ ")"
				, ex.type.entity_typeref
			);
		}
Example #32
0
		internal static Expression parseElementAccess(CsExpression pStatement, bool pForce, bool pGetSetter, FactoryExpressionCreator pCreator) {
			//expression "[" expression-list "]"
			CsElementAccess stat = (CsElementAccess)pStatement;

			List<CsExpression> l = new List<CsExpression>();
			foreach (CsArgument csArgument in stat.argument_list.list) {
				l.Add(csArgument.expression);
			}

			return getIndexerExpression(stat, l, pCreator.Parse(stat.expression), pForce, pGetSetter, pCreator);
		}
Example #33
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsAsIsExpression ex = (CsAsIsExpression)pStatement;

            return(new Expression(
                       pCreator.Parse(ex.expression).Value
                       + " "
                       + As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper)) + " " + As3Helpers.Convert(Helpers.GetType(ex.type)),
                       ex.entity_typeref
                       ));
        }
Example #34
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsCastUnaryExpression ex = (CsCastUnaryExpression)pStatement;

            //Do not cast anything. This is here just to support the automatic casting done by the flash player.
            return(new Expression(
                       //JsHelpers.Convert(Helpers.GetType(ex.type)) + "(" +
                       pCreator.Parse(ex.unary_expression).Value
                       //+ ")"
                       , ex.type.entity_typeref
                       ));
        }
Example #35
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsConditionalExpression ex = (CsConditionalExpression)pStatement;

            return(new Expression(
                       pCreator.Parse(ex.condition).Value + " ? " +
                       pCreator.Parse(ex.true_expression).Value + " : " +
                       pCreator.Parse(ex.false_expression).Value,

                       pStatement.entity_typeref
                       ));
        }
Example #36
0
        public static string GetEventFromAttr(CsAttributes pList, FactoryExpressionCreator pCreator)
        {
            addImports(pList, pCreator);

            List <AttributeItem> vals = GetAttributeValue(pList, EVENT_ATTRIBUTE, pCreator);

            if (vals.Count == 0)
            {
                return(null);
            }

            return(vals[0].Parameters.Count == 0 ? null : (string)vals[0].Parameters[0]);
        }
Example #37
0
        private static void parseStatement(CsStatement pStatement, CodeBuilder pSb, FactoryExpressionCreator pCreator)
        {
            Type type = pStatement.GetType();

            if (_statementWritters.ContainsKey(type))
            {
                _statementWritters[type](pStatement, pSb, pCreator);
            }
            else
            {
                throw new NotImplementedException("Statement of type: " + pStatement + " not implemented");
            }
        }
Example #38
0
		public TheProperty(CsProperty pCsProperty, TheClass pTheClass, FactoryExpressionCreator pCreator) {
			MyClass = pTheClass;
			Modifiers.AddRange(Helpers.GetModifiers(pCsProperty.modifiers));
			Name = pCsProperty.identifier.identifier;
			FullName = MyClass.FullName + "." + Name;
			
			ReturnType = Helpers.GetType(pCsProperty.type);

			if (pCsProperty.getter != null)
				Getter = new Property(pCsProperty.getter, this);

			if (pCsProperty.setter != null)
				Setter = new Property(pCsProperty.setter, this);
		}
Example #39
0
        public static TheClass Get(CsEntity pCsEntity, FactoryExpressionCreator pCreator)
        {
            if (pCsEntity == null)
            {
                return(null);
            }

            while (pCsEntity != null)
            {
                if (pCsEntity is CsEntityClass || pCsEntity is CsEntityStruct || pCsEntity is CsEntityInterface)
                {
                    break;
                }

                pCsEntity = pCsEntity.parent;
            }

            CsEntityClass entityKlass = pCsEntity as CsEntityClass;

            if (entityKlass != null && entityKlass.nodes.Count != 0 && entityKlass.nodes.First.Value != null)
            {
                return(Get(entityKlass.nodes.First.Value, pCreator));
            }

            CsEntityStruct entityStruct = pCsEntity as CsEntityStruct;

            if (entityStruct != null && entityStruct.nodes.Count != 0 && entityStruct.nodes.First.Value != null)
            {
                return(Get(entityStruct.nodes.First.Value, pCreator));
            }

            CsEntityInterface entityInterface = pCsEntity as CsEntityInterface;

            if (entityInterface != null && entityInterface.nodes.Count != 0 && entityInterface.nodes.First.Value != null)
            {
                return(Get(entityInterface.nodes.First.Value, pCreator));
            }

            if (pCsEntity != null)
            {
                if (!_entities.ContainsKey(pCsEntity))
                {
                    _entities[pCsEntity] = new TheClass(pCsEntity, pCreator);
                }

                return(_entities[pCsEntity]);
            }

            throw new Exception();
        }
Example #40
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsTypeofExpression ex = (CsTypeofExpression)pStatement;
            //"typeof" "(" type ")"

            CsNamespaceOrTypeName isClass = ex.type.type_name as CsNamespaceOrTypeName;

            if (isClass != null)
            {
                return(new Expression(isClass.identifier.identifier, ex.type.entity_typeref));
            }

            throw new NotImplementedException();
        }
Example #41
0
        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();
        }
Example #42
0
		internal static List<TheMethodArgument> getArguments(IEnumerable<CsFormalParameter> pLinkedList, FactoryExpressionCreator pCreator) {
			List<TheMethodArgument> arguments = new List<TheMethodArgument>();

			if (pLinkedList != null) {
				arguments.AddRange(from param in pLinkedList
				                   let e = param.default_argument == null ? null : pCreator.Parse(param.default_argument.expression)
				                   select new TheMethodArgument {
				                   	Name = param.identifier.identifier,
									Type = param.type == null ? Helpers.GetType(param.entity.type) : Helpers.GetType(param.type), 
									DefaultValue = e
				                   });
			}

			return arguments;
		}
Example #43
0
		internal TheMethod(CsMethod pCsMethod, TheClass pMyClass, FactoryExpressionCreator pCreator) {
			MyClass = pMyClass;
			Modifiers.AddRange(Helpers.GetModifiers(pCsMethod.modifiers));
			Arguments = getArguments(pCsMethod.parameters.parameters, pCreator);
			Signature = getSignature(Arguments);
			CodeBlock = pCsMethod.definition;

			//_sig = Signature.Replace(',', '_').Replace("<", "").Replace(">", "");
			//_name = Helpers.GetRealName(pCsMethod, pCsMethod.identifier.identifier);
			_realName = _name = pCsMethod.identifier.identifier;
			//FullRealName = MyClass.FullRealName + "." + RealName;

			ReturnType = Helpers.GetType(pCsMethod.return_type);
			IsExtensionMethod = pCsMethod.entity.isExtensionMethod();
		}
Example #44
0
        private static void addImports(CsAttributes pList, FactoryExpressionCreator pCreator)
        {
            if (pList == null)
            {
                return;
            }

            List <AttributeItem> vals = GetAttributeValue(pList, NAMESPACE_ATTRIBUTE, pCreator);

            if (vals.Count == 0 || vals[0].Parameters.Count == 0)
            {
                return;
            }

            ImportStatementList.AddImport((string)vals[0].Parameters[0]);
        }
Example #45
0
		public TheConstant(CsConstantDeclaration pCsConstantDeclaration, TheClass pTheClass, FactoryExpressionCreator pCreator) {
			Modifiers.AddRange(Helpers.GetModifiers(pCsConstantDeclaration.modifiers));

			foreach (CsConstantDeclarator declarator in pCsConstantDeclaration.declarators) {
				Constant v = new Constant {
					//RealName = declarator.identifier.identifier,
					//Name = Helpers.GetRealName(declarator, declarator.identifier.identifier),
					Name = declarator.identifier.identifier,
					Initializer = pCreator.Parse(declarator.expression),
					ReturnType = Helpers.GetType(declarator.entity.type)
				};

				v.Modifiers.AddRange(Modifiers);
				Constants.Add(v);
			}
		}
Example #46
0
        internal TheMethod(CsMethod pCsMethod, TheClass pMyClass, FactoryExpressionCreator pCreator)
        {
            MyClass = pMyClass;
            Modifiers.AddRange(Helpers.GetModifiers(pCsMethod.modifiers));
            Arguments = getArguments(pCsMethod.parameters.parameters, pCreator);
            Signature = getSignature(Arguments);
            CodeBlock = pCsMethod.definition;

            //_sig = Signature.Replace(',', '_').Replace("<", "").Replace(">", "");
            //_name = Helpers.GetRealName(pCsMethod, pCsMethod.identifier.identifier);
            _realName = _name = pCsMethod.identifier.identifier;
            //FullRealName = MyClass.FullRealName + "." + RealName;

            ReturnType        = Helpers.GetType(pCsMethod.return_type);
            IsExtensionMethod = pCsMethod.entity.isExtensionMethod();
        }
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			//expression "." identifier (type-argument-list?)
			CsPrimaryExpressionMemberAccess ex = (CsPrimaryExpressionMemberAccess)pStatement;
			string name;
			bool renamed = Helpers.GetRealName(ex, ex.identifier.identifier, out name);

			if (renamed) {
				return new Expression(name, pStatement.entity_typeref);
			}

			CsEntityProperty p = ex.entity as CsEntityProperty;
			bool isInternal = false;
			if (p != null && p.decl != null) {
				TheClass theClass = TheClassFactory.Get(p, pCreator);
				TheClass parent = theClass;

				//Am I extending a standard flash class? Do not rename then...
				bool isStandardGetSet = false;
				while (parent.Base != null) {
					isStandardGetSet |= parent.FullName.StartsWith("flash.");
					parent = parent.Base;
				}

				if (!isStandardGetSet) {
					TheProperty theProperty = theClass.GetProperty((CsProperty)p.decl);
					if (theProperty != null) {
						if (ex.parent is CsAssignmentExpression) {
							//setter
							isInternal = true;
							name = "set_" + name + "({0})";
						} else {
							//getter, rename
							name = "get_" + name + "()";
						}
					}
				}

			} else if (ex.ec == expression_classification.ec_event_access) {//remove eventhandler name
				name = string.Empty;
			}

			return new Expression(
				pCreator.Parse(ex.expression).Value + "." + name,
				pStatement.entity_typeref,
				isInternal
			);
		}
Example #48
0
		internal static List<TheMethodArgument> getArguments(CsEntityFormalParameter[] pCsEntityFormalParameter, FactoryExpressionCreator pCreator) {
			List<TheMethodArgument> arguments = new List<TheMethodArgument>();

			if (pCsEntityFormalParameter != null) {
				foreach (CsEntityFormalParameter formalParameter in pCsEntityFormalParameter) {
					CsFormalParameter p = formalParameter.param;

					arguments.Add(new TheMethodArgument {
						Name = p == null ? formalParameter.name : p.identifier.identifier,
						Type = Helpers.GetType(formalParameter.type),
						DefaultValue = p == null ? null : p.default_argument == null ? null : pCreator.Parse(p.default_argument.expression)
					});
				}
			}

			return arguments;
		}
Example #49
0
		internal TheVariable(CsVariableDeclaration pCsVariableDeclaration, TheClass pTheClass, FactoryExpressionCreator pCreator) {
			Modifiers.AddRange(Helpers.GetModifiers(pCsVariableDeclaration.modifiers));

			foreach (CsVariableDeclarator declarator in pCsVariableDeclaration.declarators) {
				Variable v = new Variable {
					//RealName = declarator.identifier.identifier,
					//Name = Helpers.GetRealName(declarator, declarator.identifier.identifier),
					Name = declarator.identifier.identifier,
					Initializer =
						declarator.initializer == null ? null : pCreator.Parse(declarator.initializer as CsExpression),
					ReturnType = Helpers.GetType(declarator.entity.type)
				};

				v.Modifiers.AddRange(Modifiers);
				Variables.Add(v);
			}
		}
Example #50
0
		internal TheMethod(CsEntityMethod pCsMethod, TheClass pMyClass, FactoryExpressionCreator pCreator, bool pIsEvent = false, bool pIsAddEvent = false) {
			MyClass = pMyClass;
			//Modifiers.AddRange(Helpers.GetModifiers(pCsMethod.access));
			Arguments = getArguments(pCsMethod.parameters, pCreator);
			Signature = getSignature(Arguments);
			
			//_name = Helpers.GetRealName(pCsMethod, pIsEvent ? 
			//    pIsAddEvent ? "add" : "remove" : 
			//    pCsMethod.name);
			
			_name = pIsEvent ? pIsAddEvent ? "add" : "remove" : pCsMethod.name;
			_realName = pCsMethod.name;

			//FullRealName = MyClass.FullRealName + "." + RealName;

			ReturnType = Helpers.GetType(pCsMethod.specifier.return_type);
			IsExtensionMethod = pCsMethod.isExtensionMethod();
		}
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			CsAnonymousObjectCreationExpression ex = (CsAnonymousObjectCreationExpression)pStatement;
			StringBuilder builder = new StringBuilder("{");

			if (ex.member_declarator_list != null) {
				foreach (var declarator in ex.member_declarator_list) {
					builder.AppendFormat(@"""{0}"": {1}, ",
						declarator.identifier.identifier,
						pCreator.Parse(declarator.expression).Value
					);
				}

				builder.Remove(builder.Length - 2, 2);
			}

			builder.Append("}");
			return new Expression(builder.ToString(), ex.entity_typeref);
		}
Example #52
0
		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);
		}
Example #53
0
        internal TheMethod(CsEntityMethod pCsMethod, TheClass pMyClass, FactoryExpressionCreator pCreator, bool pIsEvent = false, bool pIsAddEvent = false)
        {
            MyClass = pMyClass;
            //Modifiers.AddRange(Helpers.GetModifiers(pCsMethod.access));
            Arguments = getArguments(pCsMethod.parameters, pCreator);
            Signature = getSignature(Arguments);

            //_name = Helpers.GetRealName(pCsMethod, pIsEvent ?
            //    pIsAddEvent ? "add" : "remove" :
            //    pCsMethod.name);

            _name     = pIsEvent ? pIsAddEvent ? "add" : "remove" : pCsMethod.name;
            _realName = pCsMethod.name;

            //FullRealName = MyClass.FullRealName + "." + RealName;

            ReturnType        = Helpers.GetType(pCsMethod.specifier.return_type);
            IsExtensionMethod = pCsMethod.isExtensionMethod();
        }
Example #54
0
        public static void Parse(CsBlock pCsBlock, CodeBuilder pSb, FactoryExpressionCreator pCreator)
        {
            if (pCsBlock == null)
            {
                return;
            }

            pSb.Indent();

            if (pCsBlock.statements != null)
            {
                foreach (CsStatement statement in pCsBlock.statements)
                {
                    parseStatement(statement, pSb, pCreator);
                }
            }

            pSb.Unindent();
        }
Example #55
0
		public TheEvent(CsEvent pCsEvent, TheClass pTheClass, FactoryExpressionCreator pCreator) {
			MyClass = pTheClass;

			if (pCsEvent.declarators.Count > 1) throw new Exception("No more than one event declaration per handler is supported");

			_declarator = pCsEvent.declarators.First.Value;

			Name = _declarator.identifier.identifier;//RealName = 
			//FullRealName = MyClass.FullRealName + "." + RealName;
			FullName = MyClass.FullName + "." + Name;
			Modifiers.AddRange(Helpers.GetModifiers(pCsEvent.modifiers));

			string eventName = Helpers.GetEventFromAttr(pCsEvent.attributes, pCreator);
			IsFlashEvent = !string.IsNullOrEmpty(eventName);

			Add = new TheMethod(_declarator.entity.add, pTheClass, pCreator, true, true);
			Remove = new TheMethod(_declarator.entity.remove, pTheClass, pCreator, true);
			EventName = Helpers.GetEventFromAttr(pCsEvent.attributes, pCreator);
		}
Example #56
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            //"new" non-array-type "[" expression-list "]" ( rank-specifiers )? ( array-initializer )?
            //"new" non-array-type? rank-specifiers array-initializer
            CsNewArrayExpression ex = (CsNewArrayExpression)pStatement;

            StringBuilder builder = new StringBuilder();

            if (ex.initializer != null)
            {
                builder.Append("[");
                //builder.AppendFormat("new <{0}>[", As3Helpers.Convert(Helpers.GetType(((CsEntityArraySpecifier)ex.entity_typeref.u).type)));


                if (ex.initializer.initializers != null)
                {
                    List <string> initializers = new List <string>();

                    foreach (CsNode node in ex.initializer.initializers)
                    {
                        Expression expression = pCreator.Parse(node as CsExpression);
                        initializers.Add(expression.Value);
                    }

                    if (initializers.Count != 0)
                    {
                        builder.Append(string.Join(", ", initializers.ToArray()));
                    }
                }

                builder.Append("]");
                //builder.Append("]");
            }
            else if (ex.expressions != null && ex.expressions.list != null && ex.expressions.list.Count == 1)
            {
                builder.Append("new Array(");
                Expression expression = pCreator.Parse(ex.expressions.list.First.Value);
                builder.Append(expression.Value);
                builder.Append(")");
            }

            return(new Expression(builder.ToString(), pStatement.entity_typeref));
        }
Example #57
0
		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();
		}
Example #58
0
		public static TheClass Get(CsNode pNode, FactoryExpressionCreator pCreator) {
			if (pNode == null)
				return null;

			CsExpression csExpression = pNode as CsExpression;
			if (csExpression != null && csExpression.ec != expression_classification.ec_nothing) {
				return Get((CsEntity)csExpression.entity, pCreator);
			}

			while (pNode != null) {
				if (pNode is CsTypeRef || pNode is CsClass || pNode is CsInterface) {
					break;
				}

				pNode = pNode.parent;
			}

			CsClass klass = pNode as CsClass;
			if (klass != null) {
				if (!_classes.ContainsKey(klass))
					_classes[klass] = new TheClass(klass, pCreator);

				return _classes[klass];
			}

			CsTypeRef csTypeRef = pNode as CsTypeRef;
			if (csTypeRef != null) {
				return csTypeRef.entity_typeref == null ? null : Get((CsEntityClass)(csTypeRef.entity_typeref.u), pCreator);
			}

			CsInterface csInterface = pNode as CsInterface;
			if (csInterface != null) {
				if (!_interfaces.ContainsKey(csInterface))
					_interfaces[csInterface] = new TheClass(csInterface, pCreator);

				return _interfaces[csInterface];
			}

			throw new Exception();
		}
Example #59
0
		internal TheConstructor(CsConstructor pConstructor, TheClass pMyClass, FactoryExpressionCreator pCreator) {
			_constructor = pConstructor;
			_creator = pCreator;
			MyClass = pMyClass;
			Modifiers.AddRange(Helpers.GetModifiers(pConstructor.modifiers));
			Arguments = getArguments(pConstructor.parameters.parameters, pCreator);
			BaseArguments = Helpers.GetCallingArguments(pConstructor.argument_list, pCreator);

			Signature = getSignature(Arguments);
			CodeBlock = pConstructor.definition;
			HasBaseCall = pConstructor.basethis == CsTokenType.tkBASE;

			LinkedList<CsFormalParameter> csFormalParameters = pConstructor.parameters.parameters;
			_noFormalParams = csFormalParameters == null;
			_name = pConstructor.identifier.identifier;
			IsStaticConstructor = (pConstructor.modifiers.flags & (uint)CsModifierEnum.mSTATIC) != 0;

			if (pConstructor.basethis == CsTokenType.tkBASE || pConstructor.basethis == CsTokenType.tkTHIS) {
				_baseConstructor = pConstructor.basethis == CsTokenType.tkBASE
				                   	? (CsEntityClass)((CsEntityClass)pConstructor.entity.parent).base_type.u
				                   	: ((CsEntityClass)pConstructor.entity.parent);
			}
		}
		public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator) {
			//"new" non-array-type "[" expression-list "]" ( rank-specifiers )? ( array-initializer )?
			//"new" non-array-type? rank-specifiers array-initializer
			CsNewArrayExpression ex = (CsNewArrayExpression) pStatement;

			StringBuilder builder = new StringBuilder();

			if (ex.initializer != null) {
				builder.Append("[");
				//builder.AppendFormat("new <{0}>[", JsHelpers.Convert(Helpers.GetType(((CsEntityArraySpecifier)ex.entity_typeref.u).type)));


				if (ex.initializer.initializers != null) {
					List<string> initializers = new List<string>();

					foreach (CsNode node in ex.initializer.initializers) {
						Expression expression = pCreator.Parse(node as CsExpression);
						initializers.Add(expression.Value);
					}

					if (initializers.Count != 0) {
						builder.Append(string.Join(", ", initializers.ToArray()));
					}
				}

				builder.Append("]");
				//builder.Append("]");

			} else if (ex.expressions != null && ex.expressions.list != null && ex.expressions.list.Count == 1) {
				builder.Append("new Array(");
				Expression expression = pCreator.Parse(ex.expressions.list.First.Value);
				builder.Append(expression.Value);
				builder.Append(")");
			}

			return new Expression(builder.ToString(), pStatement.entity_typeref);
		}