Skip to content

Commit bbdbf59

Browse files
committed
glayzzle#75 fix retif with bin
1 parent 46890e3 commit bbdbf59

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

src/ast.js

+22-11
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ var binOperatorsPrecedence = [
132132
['xor'],
133133
['and'],
134134
// TODO: assignment / not sure that PHP allows this with expressions
135-
['retif'],
135+
['?'],
136136
['??'],
137137
['||'],
138138
['&&'],
@@ -163,16 +163,27 @@ AST.prototype.resolvePrecedence = function(result) {
163163
var buffer;
164164
// handling precendence
165165
if (result.kind === 'bin') {
166-
if (result.right && result.right.kind === 'bin') {
167-
var lLevel = AST.precedence[result.type];
168-
var rLevel = AST.precedence[result.right.type];
169-
if (lLevel && rLevel && rLevel <= lLevel) {
170-
// https://github.com/glayzzle/php-parser/issues/79
171-
// shift precedence
172-
buffer = result.right;
173-
result.right = result.right.left;
174-
buffer.left = this.resolvePrecedence(result);
175-
result = buffer;
166+
if (result.right) {
167+
if (result.right.kind === 'bin') {
168+
var lLevel = AST.precedence[result.type];
169+
var rLevel = AST.precedence[result.right.type];
170+
if (lLevel && rLevel && rLevel <= lLevel) {
171+
// https://github.com/glayzzle/php-parser/issues/79
172+
// shift precedence
173+
buffer = result.right;
174+
result.right = result.right.left;
175+
buffer.left = this.resolvePrecedence(result);
176+
result = buffer;
177+
}
178+
} else if (result.right.kind === 'retif') {
179+
var lLevel = AST.precedence[result.type];
180+
var rLevel = AST.precedence['?'];
181+
if (lLevel && rLevel && rLevel <= lLevel) {
182+
buffer = result.right;
183+
result.right = result.right.test;
184+
buffer.test = this.resolvePrecedence(result);
185+
result = buffer;
186+
}
176187
}
177188
}
178189
} else if (result.kind === 'unary') {

0 commit comments

Comments
 (0)