--- /dev/null
+abc1
+-----
+<?php
+echo
+ 1
+ +
+ 2
+ +
+ 3;
+-----
+$stmts[0]->exprs[0]->left->right->value = 42;
+-----
+<?php
+echo
+ 1
+ +
+ 42
+ +
+ 3;
+-----
+<?php
+function foo($a)
+ { return $a; }
+-----
+$stmts[0]->name = new Node\Identifier('bar');
+-----
+<?php
+function bar($a)
+ { return $a; }
+-----
+<?php
+function
+foo() {
+ call(
+ $bar
+ );
+}
+-----
+// This triggers a fallback
+$stmts[0]->byRef = true;
+-----
+<?php
+function &foo()
+{
+ call(
+ $bar
+ );
+}
+-----
+<?php
+function
+foo() {
+echo "Start
+End";
+}
+-----
+// This triggers a fallback
+$stmts[0]->byRef = true;
+-----
+<?php
+function &foo()
+{
+ echo "Start
+End";
+}
+-----
+<?php
+function test() {
+ call1(
+ $bar
+ );
+}
+call2(
+ $foo
+);
+-----
+$tmp = $stmts[0]->stmts[0];
+$stmts[0]->stmts[0] = $stmts[1];
+$stmts[1] = $tmp;
+-----
+<?php
+function test() {
+ call2(
+ $foo
+ );
+}
+call1(
+ $bar
+);
+-----
+<?php
+x;
+function test() {
+ call1(
+ $bar
+ );
+}
+call2(
+ $foo
+);
+-----
+$tmp = $stmts[1]->stmts[0];
+$stmts[1]->stmts[0] = $stmts[2];
+$stmts[2] = $tmp;
+// Same test, but also removing first statement, triggering fallback
+array_splice($stmts, 0, 1, []);
+-----
+<?php
+
+function test() {
+ call2(
+ $foo
+ );
+}
+call1(
+ $bar
+);
+-----
+<?php
+ echo 1;
+-----
+$stmts[0] = new Stmt\Expression(
+ new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b')));
+-----
+<?php
+ $a = $b;
+-----
+<?php
+echo$a;
+-----
+$stmts[0]->exprs[0] = new Expr\ConstFetch(new Node\Name('C'));
+-----
+<?php
+echo C;
+-----
+<?php
+function foo() {
+ foo();
+ /*
+ * bar
+ */
+ baz();
+}
+
+{
+ $x;
+}
+-----
+$tmp = $stmts[0];
+$stmts[0] = $stmts[1];
+$stmts[1] = $tmp;
+/* TODO This used to do two replacement operations, but with the node list diffing this is a
+ * remove, keep, add (which probably makes more sense). As such, this currently triggers a
+ * fallback. */
+-----
+<?php
+
+$x;
+function foo() {
+ foo();
+ /*
+ * bar
+ */
+ baz();
+}
+-----
+<?php
+echo "${foo}bar";
+echo "${foo['baz']}bar";
+-----
+$stmts[0]->exprs[0]->parts[0] = new Expr\Variable('bar');
+$stmts[1]->exprs[0]->parts[0] = new Expr\Variable('bar');
+-----
+<?php
+echo "{$bar}bar";
+echo "{$bar}bar";
+-----
+<?php
+[$a
+,$b
+,
+,] = $b;
+-----
+/* Nothing */
+-----
+<?php
+[$a
+,$b
+,
+,] = $b;
\ No newline at end of file