protected override IPhpStatement[] VisitCodeBlock(CodeBlock src)
        {
            var res = new PhpCodeBlock();

            res.Statements.AddRange(TranslateStatements(src.Items));
            return(MkArray(res));
        }
Exemple #2
0
 public void Add(IEmitable statement)
 {
     if (statement is IPhpStatement && !PhpCodeBlock.HasAny(statement as IPhpStatement))
     {
         return;
     }
     if (statement is PhpNamespaceStatement)
     {
         var tmp  = statement as PhpNamespaceStatement;
         var item = GetItemForNamespace(Container, tmp.Name);
         item.Items.AddRange(tmp.Code.Statements);
     }
     else if (statement is PhpClassDefinition)
     {
         var tmp = statement as PhpClassDefinition;
         if (tmp.IsEmpty)
         {
             return;
         }
         var item = GetItemForNamespace(Container, tmp.Name.Namespace);
         item.Items.Add(statement);
     }
     else
     {
         var item = GetItemForNamespace(Container, PhpNamespace.Root);
         item.Items.Add(statement);
     }
 }
        protected override IPhpStatement[] VisitSwitchStatement(CsharpSwitchStatement src)
        {
            var switchStatement = new PhpSwitchStatement
            {
                Expression = TransValue(src.Expression)
            };

            foreach (var sec in src.Sections)
            {
                var section = new PhpSwitchSection
                {
                    Labels = sec.Labels.Select(q => new PhpSwitchLabel
                    {
                        Value     = q.Expression == null ? null : TransValue(q.Expression),
                        IsDefault = q.IsDefault
                    }).ToArray()
                };
                var statements = TranslateStatements(sec.Statements);
                var block      = new PhpCodeBlock();
                block.Statements.AddRange(statements);
                section.Statement = PhpCodeBlock.Reduce(block);
                switchStatement.Sections.Add(section);
            }

            return(MkArray(switchStatement));
        }
Exemple #4
0
 protected virtual T VisitPhpCodeBlock(PhpCodeBlock node)
 {
     if (ThrowNotImplementedException)
     {
         throw new NotImplementedException(string.Format("Method {0} is not supported in class {1}", "VisitPhpCodeBlock", this.GetType().FullName));
     }
     return(default(T));
 }
        protected override IPhpStatement VisitPhpCodeBlock(PhpCodeBlock node)
        {
            var newNode = new PhpCodeBlock();

            foreach (var i in node.GetPlain())
            {
                newNode.Statements.Add(Simplify(i));
            }

            #region Łączenie kolejnych echo
            if (op.JoinEchoStatements)
            {
                //newNode.Statements.Clear();
                {
                    for (var i = 1; i < newNode.Statements.Count; i++)
                    {
                        var e1 = GetPhpNativeMethodCall(newNode.Statements[i - 1], "echo");
                        if (e1 == null)
                        {
                            continue;
                        }
                        var e2 = GetPhpNativeMethodCall(newNode.Statements[i], "echo");
                        if (e2 == null)
                        {
                            continue;
                        }

                        Func <IPhpValue, IPhpValue> AddBracketsIfNecessary = (ee) =>
                        {
                            if (ee is PhpParenthesizedExpression || ee is PhpConstValue || ee is PhpPropertyAccessExpression)
                            {
                                return(ee);
                            }

                            if (ee is PhpBinaryOperatorExpression && ((PhpBinaryOperatorExpression)ee).Operator == ".")
                            {
                                return(ee);
                            }
                            return(new PhpParenthesizedExpression(ee));
                        };

                        var a1 = AddBracketsIfNecessary(e1.Arguments[0].Expression);
                        var a2 = AddBracketsIfNecessary(e2.Arguments[0].Expression);

                        IPhpValue e = new PhpBinaryOperatorExpression(".", a1, a2);
                        e = Simplify(e);
                        IPhpValue echo = new PhpMethodCallExpression("echo", e);
                        newNode.Statements[i - 1] = new PhpExpressionStatement(echo);
                        newNode.Statements.RemoveAt(i);
                        i--;
                    }
                    for (var i = 0; i < newNode.Statements.Count; i++)
                    {
                        var a = newNode.Statements[i];
                        if (a is PhpSourceBase)
                        {
                            newNode.Statements[i] = Visit(a as PhpSourceBase);
                        }
                    }
                }
            }
            #endregion
            return(PhpSourceBase.EqualCode_List(node.Statements, newNode.Statements) ? node : newNode);
        }