@@ -132,7 +132,7 @@ var binOperatorsPrecedence = [
132
132
[ 'xor' ] ,
133
133
[ 'and' ] ,
134
134
// TODO: assignment / not sure that PHP allows this with expressions
135
- [ 'retif ' ] ,
135
+ [ '? ' ] ,
136
136
[ '??' ] ,
137
137
[ '||' ] ,
138
138
[ '&&' ] ,
@@ -163,16 +163,27 @@ AST.prototype.resolvePrecedence = function(result) {
163
163
var buffer ;
164
164
// handling precendence
165
165
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
+ }
176
187
}
177
188
}
178
189
} else if ( result . kind === 'unary' ) {
0 commit comments