Exemplo n.º 1
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));
        }
Exemplo n.º 2
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));
        }
Exemplo n.º 3
0
        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
                       ));
        }
Exemplo n.º 4
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
                       ));
        }
Exemplo n.º 5
0
        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
                       ));
        }
Exemplo n.º 6
0
        public Expression Parse(CsExpression pStatement, FactoryExpressionCreator pCreator)
        {
            CsAssignmentExpression ex = (CsAssignmentExpression)pStatement;

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

            if (((ex.lhs is CsElementAccess) || (ex.lhs is CsPrimaryExpressionMemberAccess)) && left.InternalType)
            {
                switch (ex.oper)
                {
                case CsTokenType.tkASSIGN:
                    return(new Expression(string.Format(left.Value, right.Value), pStatement.entity_typeref));

                case CsTokenType.tkPLUS_EQ:
                case CsTokenType.tkMINUS_EQ:
                case CsTokenType.tkDIV_EQ:
                case CsTokenType.tkMUL_EQ:
                    string getter = ElementAccessHelper.parseElementAccess(ex.lhs, true, false, pCreator).Value;
                    return(new Expression(string.Format(left.Value, getter + As3Helpers.ConvertTokens(Helpers.GetTokenType(convertToken(ex.oper))) + right.Value), pStatement.entity_typeref));
                }
            }

            if ((ex.lhs is CsSimpleName) && left.InternalType)
            {
                switch (ex.oper)
                {
                case CsTokenType.tkASSIGN:
                    return(new Expression(string.Format(left.Value, right.Value), pStatement.entity_typeref));

                case CsTokenType.tkPLUS_EQ:
                case CsTokenType.tkMINUS_EQ:
                case CsTokenType.tkDIV_EQ:
                case CsTokenType.tkMUL_EQ:
                    string getter = SimpleNameHelper.ParseSimpleName(ex.lhs, true, false).Value;
                    return(new Expression(string.Format(left.Value, getter + As3Helpers.ConvertTokens(Helpers.GetTokenType(convertToken(ex.oper))) + right.Value), pStatement.entity_typeref));
                }
            }

            if (ex.lhs is CsPrimaryExpressionMemberAccess)
            {
                if (ex.lhs.ec == expression_classification.ec_event_access)
                {
                    CsEntityEvent ev = (CsEntityEvent)ex.lhs.entity;

                    TheClass theClass = TheClassFactory.Get(ev.parent, pCreator);
                    string   eventName;
                    //flash event on flash.xxxx
                    if (theClass == null)
                    {
                        eventName = Helpers.GetEventFromAttr(ev.attributes);

                        return(new Expression(
                                   left.Value +
                                   (ex.oper == CsTokenType.tkPLUS_EQ ?
                                    ("addEventListener(" + eventName + ", " + right.Value + ", false, 0, true)") :
                                    ("removeEventListener(" + eventName + ", " + right.Value + ")"))
                                   , pStatement.entity_typeref
                                   ));
                    }

                    TheEvent theEvent = theClass.GetEvent(ev.name);

                    if (theEvent != null && string.IsNullOrEmpty(theEvent.EventName))                      //custom event on the same class
                    {
                        return(new Expression(
                                   //event name == left => left IS the event name. Do not add twice
                                   left.Value + (ev.name.Equals(left.Value, StringComparison.Ordinal) ? string.Empty : ev.name) +
                                   (ex.oper == CsTokenType.tkPLUS_EQ ? ".add" : ".remove") +
                                   "(" + right.Value + ")"
                                   , pStatement.entity_typeref
                                   ));
                    }

                    eventName = theEvent == null?Helpers.GetEventFromAttr(ev.attributes) : theEvent.EventName;

                    //flash event on the same class.
                    return(new Expression(
                               //event name == left => left IS the event name. Do not add twice
                               (ev.name.Equals(left.Value, StringComparison.Ordinal) ? string.Empty : left.Value) +
                               (ex.oper == CsTokenType.tkPLUS_EQ
                                                        ? ("addEventListener(" + eventName + ", " + right.Value + ", false, 0, true)")
                                                        : ("removeEventListener(" + eventName + ", " + right.Value + ")"))
                               , pStatement.entity_typeref));
                }
                //else {
                //    left = FactoryExpressionCreator.Parse(ex.lhs);
                //    CsPrimaryExpressionMemberAccess primaryExpressionMemberAccess = (CsPrimaryExpressionMemberAccess)ex.lhs;
                //    TheClass theClass = TheClassFactory.Get((CsEntity)primaryExpressionMemberAccess.entity);
                //    //TheProperty theProp = theClass.GetProperty();
                //}
            }



            return(new Expression(string.Format("{0} {2} {1}", left.Value, right.Value, As3Helpers.ConvertTokens(Helpers.GetTokenType(ex.oper))), pStatement.entity_typeref));
        }