protected override IPhpStatement[] VisitCodeBlock(CodeBlock src) { var res = new PhpCodeBlock(); res.Statements.AddRange(TranslateStatements(src.Items)); return(MkArray(res)); }
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)); }
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); }