#50: nodes stmt.Exit and stmt.Die was merged

This commit is contained in:
z7zmey
2018-07-10 00:51:02 +03:00
parent a69e899f04
commit 18d6d59292
17 changed files with 605 additions and 572 deletions

View File

@@ -234,8 +234,6 @@ func (p *PrettyPrinter) printNode(n node.Node) {
p.printExprClosure(n)
case *expr.ConstFetch:
p.printExprConstFetch(n)
case *expr.Die:
p.printExprDie(n)
case *expr.Empty:
p.printExprEmpty(n)
case *expr.ErrorSuppress:
@@ -1067,14 +1065,6 @@ func (p *PrettyPrinter) printExprConstFetch(n node.Node) {
p.Print(nn.Constant)
}
func (p *PrettyPrinter) printExprDie(n node.Node) {
nn := n.(*expr.Die)
io.WriteString(p.w, "die(")
p.Print(nn.Expr)
io.WriteString(p.w, ")")
}
func (p *PrettyPrinter) printExprEmpty(n node.Node) {
nn := n.(*expr.Empty)
@@ -1101,7 +1091,11 @@ func (p *PrettyPrinter) printExprEval(n node.Node) {
func (p *PrettyPrinter) printExprExit(n node.Node) {
nn := n.(*expr.Exit)
io.WriteString(p.w, "exit(")
if nn.Die {
io.WriteString(p.w, "die(")
} else {
io.WriteString(p.w, "exit(")
}
p.Print(nn.Expr)
io.WriteString(p.w, ")")
}

View File

@@ -1443,20 +1443,6 @@ func TestPrintExprConstFetch(t *testing.T) {
}
}
func TestPrintDie(t *testing.T) {
o := bytes.NewBufferString("")
p := printer.NewPrettyPrinter(o, " ")
p.Print(&expr.Die{Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}})
expected := `die($var)`
actual := o.String()
if expected != actual {
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
}
}
func TestPrintEmpty(t *testing.T) {
o := bytes.NewBufferString("")
@@ -1503,7 +1489,7 @@ func TestPrintExit(t *testing.T) {
o := bytes.NewBufferString("")
p := printer.NewPrettyPrinter(o, " ")
p.Print(&expr.Exit{Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}})
p.Print(&expr.Exit{Die: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}})
expected := `exit($var)`
actual := o.String()
@@ -1513,6 +1499,20 @@ func TestPrintExit(t *testing.T) {
}
}
func TestPrintDie(t *testing.T) {
o := bytes.NewBufferString("")
p := printer.NewPrettyPrinter(o, " ")
p.Print(&expr.Exit{Die: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}})
expected := `die($var)`
actual := o.String()
if expected != actual {
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
}
}
func TestPrintFunctionCall(t *testing.T) {
o := bytes.NewBufferString("")

View File

@@ -231,8 +231,6 @@ func (p *Printer) printNode(n node.Node) {
p.printExprClosure(n)
case *expr.ConstFetch:
p.printExprConstFetch(n)
case *expr.Die:
p.printExprDie(n)
case *expr.Empty:
p.printExprEmpty(n)
case *expr.ErrorSuppress:
@@ -1401,21 +1399,6 @@ func (p *Printer) printExprConstFetch(n node.Node) {
p.printMeta(nn, meta.NodeEnd)
}
func (p *Printer) printExprDie(n node.Node) {
nn := n.(*expr.Die)
p.printMeta(nn, meta.NodeStart)
p.printMeta(nn, meta.ExitToken)
io.WriteString(p.w, "die")
p.printMeta(nn.Expr, meta.OpenParenthesisToken)
io.WriteString(p.w, "(")
p.Print(nn.Expr)
p.printMeta(nn.Expr, meta.CloseParenthesisToken)
io.WriteString(p.w, ")")
p.printMeta(nn, meta.NodeEnd)
}
func (p *Printer) printExprEmpty(n node.Node) {
nn := n.(*expr.Empty)
p.printMeta(nn, meta.NodeStart)
@@ -1462,11 +1445,15 @@ func (p *Printer) printExprExit(n node.Node) {
p.printMeta(nn, meta.NodeStart)
p.printMeta(nn, meta.ExitToken)
io.WriteString(p.w, "exit")
p.printMeta(nn.Expr, meta.OpenParenthesisToken)
if nn.Die {
io.WriteString(p.w, "die")
} else {
io.WriteString(p.w, "exit")
}
p.printMeta(nn, meta.OpenParenthesisToken)
io.WriteString(p.w, "(")
p.Print(nn.Expr)
p.printMeta(nn.Expr, meta.CloseParenthesisToken)
p.printMeta(nn, meta.CloseParenthesisToken)
io.WriteString(p.w, ")")
p.printMeta(nn, meta.NodeEnd)

View File

@@ -317,7 +317,7 @@ func TestParseAndPrintYield(t *testing.T) {
}
}
func TestParseAndPrintAltIfExitDie(t *testing.T) {
func TestParseAndPrintAltIf(t *testing.T) {
src := `<?php
if ( 1 ) :
exit ( 1 ) ;
@@ -334,6 +334,21 @@ func TestParseAndPrintAltIfExitDie(t *testing.T) {
}
}
func TestParseAndPrintExitDie(t *testing.T) {
src := `<?php
exit ( ) ;
exit ( 1 );
die ( ) ;
die ( 1 );
`
actual := print(parse(src))
if src != actual {
t.Errorf("\nexpected: %s\ngot: %s\n", src, actual)
}
}
func TestParseAndPrintAltFor(t *testing.T) {
src := `<?php
for ( $a ; $b ; $c ) :

View File

@@ -2102,40 +2102,6 @@ func TestPrinterPrintExprConstFetch(t *testing.T) {
}
}
func TestPrinterPrintDie(t *testing.T) {
o := bytes.NewBufferString("")
p := printer.NewPrinter(o)
p.Print(&expr.Die{
Meta: []meta.Meta{
&meta.WhiteSpace{
Value: " ",
TokenName: meta.ExitToken,
},
},
Expr: &expr.Variable{
Meta: []meta.Meta{
&meta.WhiteSpace{
Value: " ",
TokenName: meta.OpenParenthesisToken,
},
&meta.WhiteSpace{
Value: " ",
TokenName: meta.CloseParenthesisToken,
},
},
VarName: &node.Identifier{Value: "var"},
},
})
expected := ` die ($var )`
actual := o.String()
if expected != actual {
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
}
}
func TestPrinterPrintEmpty(t *testing.T) {
o := bytes.NewBufferString("")
@@ -2228,18 +2194,17 @@ func TestPrinterPrintExit(t *testing.T) {
Value: " ",
TokenName: meta.ExitToken,
},
},
Expr: &expr.Variable{
Meta: []meta.Meta{
&meta.WhiteSpace{
Value: " ",
TokenName: meta.OpenParenthesisToken,
},
&meta.WhiteSpace{
Value: " ",
TokenName: meta.CloseParenthesisToken,
},
&meta.WhiteSpace{
Value: " ",
TokenName: meta.OpenParenthesisToken,
},
&meta.WhiteSpace{
Value: " ",
TokenName: meta.CloseParenthesisToken,
},
},
Die: false,
Expr: &expr.Variable{
VarName: &node.Identifier{Value: "var"},
},
})
@@ -2252,6 +2217,39 @@ func TestPrinterPrintExit(t *testing.T) {
}
}
func TestPrinterPrintDie(t *testing.T) {
o := bytes.NewBufferString("")
p := printer.NewPrinter(o)
p.Print(&expr.Exit{
Die: true,
Meta: []meta.Meta{
&meta.WhiteSpace{
Value: " ",
TokenName: meta.ExitToken,
},
&meta.WhiteSpace{
Value: " ",
TokenName: meta.OpenParenthesisToken,
},
&meta.WhiteSpace{
Value: " ",
TokenName: meta.CloseParenthesisToken,
},
},
Expr: &expr.Variable{
VarName: &node.Identifier{Value: "var"},
},
})
expected := ` die ($var )`
actual := o.String()
if expected != actual {
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
}
}
func TestPrinterPrintFunctionCall(t *testing.T) {
o := bytes.NewBufferString("")