diff --git a/README.md b/README.md index 716fb02d9..d06b87f68 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ php-parser ========== -Parse PHP code from NodeJS and convert it to AST. This library is a standalone module of a larger project named [Glayzzle](http://glayzzle.com). +This javascript library parses PHP code and convert it to AST. [![npm version](https://badge.fury.io/js/php-parser.svg)](https://www.npmjs.com/package/php-parser) [![Build Status](https://travis-ci.org/glayzzle/php-parser.svg)](https://travis-ci.org/glayzzle/php-parser) @@ -9,50 +9,99 @@ Parse PHP code from NodeJS and convert it to AST. This library is a standalone m [![Gitter](https://img.shields.io/badge/GITTER-join%20chat-green.svg)](https://gitter.im/glayzzle/Lobby) -# Install it +Installation +------------ + +This library is distributed with [npm](https://www.npmjs.com/package/php-parser) : ```sh -$ npm install php-parser --save +npm install php-parser --save ``` -# Use it +Usage +----- ```js +// initialize the php parser factory class +var engine = require('php-parser'); // initialize a new parser instance -var parser = require('php-parser').create(); - -// how to retrieve the AST +var parser = new engine({ + // some options : + parser: { + extractDoc: true + }, + ast: { + withPositions: true + } +}); + +// Retrieve the AST from the specified source var AST = parser.parseEval('echo "Hello World";'); +// AST.kind === 'program'; +// AST.children[0].kind === 'echo'; -// how to list tokens +// Retrieve an array of tokens (same as php function token_get_all) var tokens = parser.tokenGetAll(' You can add here your own project by opening an issue request. # Misc This library is released under BSD-3 license clause. + +If you want to contribute please visit this repository https://github.com/glayzzle/php-parser-dev. diff --git a/RELEASE.md b/RELEASE.md index e64f17b07..fb9d9dcc2 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,6 +1,6 @@ # Releases -## 1.0.0 : (2016-12-29) +## 1.0.0 : (2017-01-03) - All nodes are now converted to objects - Bruteforce tests are in a separate project diff --git a/dist/php-parser.js b/dist/php-parser.js index b7be59dde..44121b807 100644 --- a/dist/php-parser.js +++ b/dist/php-parser.js @@ -1,4 +1,4 @@ -/*! php-parser - BSD3 License - 2016-12-28 */ +/*! php-parser - BSD3 License - 2017-01-03 */ require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { @@ -2169,27 +3131,27 @@ lexer.prototype.unput = function(size) { this.yytext = this.yytext.substring(0, this.yytext.length - size); // re-calculate position this.yylloc.last_line = this.yylloc.first_line; - this.yylloc.last_col = this.yyprevcol = this.yylloc.first_col; + this.yylloc.last_column = this.yyprevcol = this.yylloc.first_column; for(var i = 0; i < this.yytext.length; i++) { var c = this.yytext[i]; if (c === '\r') { c = this.yytext[++i]; - this.yyprevcol = this.yylloc.last_col; + this.yyprevcol = this.yylloc.last_column; this.yylloc.last_line ++; - this.yylloc.last_col = 0; + this.yylloc.last_column = 0; if (c !== '\n') { if (c === '\r') { this.yylloc.last_line ++; } else { - this.yylloc.last_col ++; + this.yylloc.last_column ++; } } } else if (c === '\n') { - this.yyprevcol = this.yylloc.last_col; + this.yyprevcol = this.yylloc.last_column; this.yylloc.last_line ++; - this.yylloc.last_col = 0; + this.yylloc.last_column = 0; } else { - this.yylloc.last_col ++; + this.yylloc.last_column ++; } } this.yylineno = this.yylloc.last_line; @@ -2285,6 +3247,9 @@ lexer.prototype.appendToken = function(value, ahead) { // return next match that has a token lexer.prototype.lex = function() { + this.yylloc.prev_offset = this.offset; + this.yylloc.prev_line = this.yylloc.last_line; + this.yylloc.prev_column = this.yylloc.last_column; var token = this.next() || this.lex(); if (!this.all_tokens) { while( @@ -2307,6 +3272,11 @@ lexer.prototype.lex = function() { return this.tok.T_ECHO; } } + if (!this.yylloc.prev_offset) { + this.yylloc.prev_offset = this.yylloc.first_offset; + this.yylloc.prev_line = this.yylloc.first_line; + this.yylloc.prev_column = this.yylloc.first_column; + } return token; }; @@ -2339,13 +3309,16 @@ lexer.prototype.next = function () { if (!this._input) { this.done = true; } - if (this.done) { - return this.EOF; - } this.yylloc.first_offset = this.offset; this.yylloc.first_line = this.yylloc.last_line; this.yylloc.first_column = this.yylloc.last_column; this.yytext = ''; + if (this.done) { + this.yylloc.prev_offset = this.yylloc.first_offset; + this.yylloc.prev_line = this.yylloc.first_line; + this.yylloc.prev_column = this.yylloc.first_column; + return this.EOF; + } if (this.tokens.length > 0) { token = this.tokens.shift(); if (typeof token[1] === 'object') { @@ -2360,6 +3333,19 @@ lexer.prototype.next = function () { if (this.offset >= this.size && this.tokens.length === 0) { this.done = true; } + if (this.debug) { + var tName = token; + if (typeof tName === 'number') { + tName = this.engine.tokens.values[tName]; + } else { + tName = '"'+tName+'"'; + } + console.log( + tName, + 'from ' + this.yylloc.first_line + ',' + this.yylloc.first_column, + ' - to ' + this.yylloc.last_line + ',' + this.yylloc.last_column + ); + } return token; }; @@ -2382,13 +3368,20 @@ lexer.prototype.next = function () { module.exports = lexer; -},{"./lexer/comments.js":66,"./lexer/initial.js":67,"./lexer/numbers.js":68,"./lexer/property.js":69,"./lexer/scripting.js":70,"./lexer/strings.js":71,"./lexer/tokens.js":72,"./lexer/utils.js":73}],66:[function(require,module,exports){ +},{"./lexer/comments.js":95,"./lexer/initial.js":96,"./lexer/numbers.js":97,"./lexer/property.js":98,"./lexer/scripting.js":99,"./lexer/strings.js":100,"./lexer/tokens.js":101,"./lexer/utils.js":102}],95:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors * @url http://glayzzle.com */ + +"use strict"; + module.exports = { + /** + * Reads a single line comment + * @see + */ T_COMMENT: function() { while(this.offset < this.size) { var ch = this.input(); @@ -2399,7 +3392,7 @@ module.exports = { return this.tok.T_COMMENT; } else if (ch === '%' && this.aspTagMode && this._input[this.offset] === '>') { this.unput(1); - return tthis.tok.T_COMMENT; + return this.tok.T_COMMENT; } } return this.tok.T_COMMENT; @@ -2432,7 +3425,7 @@ module.exports = { } }; -},{}],67:[function(require,module,exports){ +},{}],96:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2492,7 +3485,7 @@ module.exports = { } }; -},{}],68:[function(require,module,exports){ +},{}],97:[function(require,module,exports){ (function (process){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) @@ -2500,14 +3493,16 @@ module.exports = { * @url http://glayzzle.com */ +"use strict"; + /* istanbul ignore else */ if (process.arch == 'x64') { var SIZEOF_LONG = 8; - var MAX_LENGTH_OF_LONG = 20; + var MAX_LENGTH_OF_LONG = 19; var long_min_digits = "9223372036854775808"; } else { var SIZEOF_LONG = 4; - var MAX_LENGTH_OF_LONG = 11; + var MAX_LENGTH_OF_LONG = 10; var long_min_digits = "2147483648"; } @@ -2572,8 +3567,10 @@ module.exports = { return this.tok.T_LNUMBER; } else { if ( - this.yytext.length == MAX_LENGTH_OF_LONG - && this.yytext < long_min_digits + this.yytext.length < MAX_LENGTH_OF_LONG || ( + this.yytext.length == MAX_LENGTH_OF_LONG + && this.yytext < long_min_digits + ) ) { return this.tok.T_LNUMBER; } @@ -2617,7 +3614,7 @@ module.exports = { }; }).call(this,require('_process')) -},{"_process":1}],69:[function(require,module,exports){ +},{"_process":1}],98:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2629,13 +3626,17 @@ module.exports = { if (ch === '-') { ch = this.input(); if (ch === '>') { + // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1296 return this.tok.T_OBJECT_OPERATOR; } this.unput(1); } else if (this.is_LABEL_START()) { + // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1300 this.consume_LABEL(); + this.popState(); return this.tok.T_STRING; } + // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1306 this.popState(); this.unput(1); return false; @@ -2691,7 +3692,7 @@ module.exports = { } }; -},{}],70:[function(require,module,exports){ +},{}],99:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2793,7 +3794,7 @@ module.exports = { } }; -},{}],71:[function(require,module,exports){ +},{}],100:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2930,6 +3931,7 @@ module.exports = { matchST_NOWDOC: function() { /** edge case : empty now doc **/ if (this.isDOC_MATCH()) { + // @fixme : never reached (may be caused by quotes) this.consume(this.heredoc_label.length); this.popState(); return this.tok.T_END_HEREDOC; @@ -3070,9 +4072,9 @@ module.exports = { this.begin('ST_IN_SCRIPTING'); return this.tok.T_CURLY_OPEN; } - } else if (ch === '"') { + } else if (ch === '`') { this.popState(); - return '"'; + return '`'; } // any char @@ -3195,6 +4197,7 @@ module.exports = { this.unput(2); return this.tok.T_ENCAPSED_AND_WHITESPACE; } else { + // @fixme : yytext = '"{$' (this.yytext.length > 3) this.unput(1); return this.tok.T_CURLY_OPEN; } @@ -3207,7 +4210,7 @@ module.exports = { } }; -},{}],72:[function(require,module,exports){ +},{}],101:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3478,7 +4481,7 @@ module.exports = { } }; -},{}],73:[function(require,module,exports){ +},{}],102:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3533,11 +4536,6 @@ module.exports = { var ch = this._input[this.offset - 1]; return tokens.indexOf(ch) !== -1; }, - // check if current char is a newline - is_NEWLINE: function() { - var ch = this._input[this.offset - 1]; - return ch === '\n' || ch === '\r'; - }, // check if current char is a whitespace is_WHITESPACE: function() { var ch = this._input[this.offset - 1]; @@ -3566,7 +4564,7 @@ module.exports = { } }; -},{}],74:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3582,37 +4580,39 @@ function isNumber(n) { /** - * The PHP Parser class - * - * @public @constructor {Parser} - * @property {Integer} EOF - * @property {Lexer} lexer - * @property {Integer|String} token - * @property {Boolean} extractDoc - * @property {Boolean} debug + * The PHP Parser class that build the AST tree from the lexer + * @constructor {Parser} + * @property {Lexer} lexer - current lexer instance + * @property {AST} ast - the AST factory instance + * @property {Integer|String} token - current token + * @property {Boolean} extractDoc - should extract documentation as AST node + * @property {Boolean} suppressErrors - should ignore parsing errors and continue + * @property {Boolean} debug - should output debug informations */ var parser = function(lexer, ast) { this.lexer = lexer; this.ast = ast; this.tok = lexer.tok; this.EOF = lexer.EOF; - // Private vars, do not use directly - this._gracefulProxy = {}; - this._graceful = false; this.token = null; this.prev = null; this.debug = false; this.extractDoc = false; this.suppressErrors = false; - this.lastError = false; - this.startAt = []; this.entries = { + 'VARIABLE': [ + this.tok.T_VARIABLE, + '$', '&', + this.tok.T_NS_SEPARATOR, + this.tok.T_STRING, + this.tok.T_NAMESPACE, + this.tok.T_STATIC + ], 'SCALAR': [ this.tok.T_CONSTANT_ENCAPSED_STRING, this.tok.T_START_HEREDOC, this.tok.T_LNUMBER, this.tok.T_DNUMBER, - this.tok.T_STRING, this.tok.T_ARRAY,'[', this.tok.T_CLASS_C, this.tok.T_TRAIT_C, @@ -3646,13 +4646,6 @@ var parser = function(lexer, ast) { this.tok.T_ABSTRACT, this.tok.T_FINAL ], - 'VARIABLE': [ - this.tok.T_VARIABLE, - '$', '&', - this.tok.T_NS_SEPARATOR, - this.tok.T_STRING, - this.tok.T_STATIC - ], 'EOS': [ ';', this.tok.T_CLOSE_TAG, @@ -3724,8 +4717,9 @@ parser.prototype.getTokenName = function(token) { /** * main entry point : converts a source code to AST */ -parser.prototype.parse = function(code) { +parser.prototype.parse = function(code, filename) { this._errors = []; + this.filename = filename || 'eval'; this.currentNamespace = ['']; this.lexer.setInput(code); this.lexer.comment_tokens = this.extractDoc; @@ -3751,8 +4745,15 @@ parser.prototype.parse = function(code) { * Raise an error */ parser.prototype.raiseError = function(message, msgExpect, expect, token) { + message += ' on line ' + this.lexer.yylloc.first_line; if (!this.suppressErrors) { - throw new Error(message); + var err = new SyntaxError( + message, this.filename, this.lexer.yylloc.first_line + ); + err.lineNumber = this.lexer.yylloc.first_line; + err.fileName = this.filename; + err.columnNumber = this.lexer.yylloc.first_column + throw err; } // Error node : var node = this.ast.prepare('error', this)( @@ -3787,7 +4788,7 @@ parser.prototype.error = function(expect) { } this.token !== this.EOF return this.raiseError( - msg + ' on line ' + this.lexer.yylloc.first_line, + msg, msgExpect, expect, token @@ -3931,16 +4932,6 @@ parser.prototype.is = function(type) { } }; -/** convert an token to ast **/ -parser.prototype.read_token = function() { - var result = this.token; - if (isNumber(result)) { - result = [result, this.text(), this.lexer.yylloc.first_line]; - } - this.next(); - return result; -}; - // extends the parser with syntax files [ require('./parser/array.js'), @@ -3966,7 +4957,7 @@ parser.prototype.read_token = function() { module.exports = parser; -},{"./parser/array.js":75,"./parser/class.js":76,"./parser/comment.js":77,"./parser/expr.js":78,"./parser/function.js":79,"./parser/if.js":80,"./parser/loops.js":81,"./parser/main.js":82,"./parser/namespace.js":83,"./parser/scalar.js":84,"./parser/statement.js":85,"./parser/switch.js":86,"./parser/try.js":87,"./parser/utils.js":88,"./parser/variable.js":89}],75:[function(require,module,exports){ +},{"./parser/array.js":104,"./parser/class.js":105,"./parser/comment.js":106,"./parser/expr.js":107,"./parser/function.js":108,"./parser/if.js":109,"./parser/loops.js":110,"./parser/main.js":111,"./parser/namespace.js":112,"./parser/scalar.js":113,"./parser/statement.js":114,"./parser/switch.js":115,"./parser/try.js":116,"./parser/utils.js":117,"./parser/variable.js":118}],104:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3989,13 +4980,14 @@ module.exports = { var items = []; var result = this.node(ArrayExpr); - this.expect([this.tok.T_ARRAY, '[']); - - if (this.token == this.tok.T_ARRAY) { + if (this.token === this.tok.T_ARRAY) { this.next().expect('('); + expect = ')'; } else { shortForm = true; + expect = ']'; } + if (this.next().token != expect) { while(this.token != this.EOF) { items.push(this.read_array_pair_list()); @@ -4007,7 +4999,7 @@ module.exports = { } else break; } } - this.expect(shortForm ? ']' : ')'); + this.expect(expect); this.next(); return result(shortForm, items); }, @@ -4056,7 +5048,7 @@ module.exports = { } }; -},{}],76:[function(require,module,exports){ +},{}],105:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -4501,7 +5493,7 @@ module.exports = { } }; -},{}],77:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -4548,69 +5540,92 @@ module.exports = { } }; -},{}],78:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors * @url http://glayzzle.com */ +"use strict"; module.exports = { read_expr: function() { + var result = this.node(); var expr = this.read_expr_item(); - switch(this.token) { - // binary operations - case '|': return this.node('bin')('|', expr, this.next().read_expr()); - case '&': return this.node('bin')('&', expr, this.next().read_expr()); - case '^': return ['bin', '^', expr, this.next().read_expr()]; - case '.': return ['bin', '.', expr, this.next().read_expr()]; - case '+': return ['bin', '+', expr, this.next().read_expr()]; - case '-': return ['bin', '-', expr, this.next().read_expr()]; - case '*': return ['bin', '*', expr, this.next().read_expr()]; - case '/': return ['bin', '/', expr, this.next().read_expr()]; - case '%': return ['bin', '%', expr, this.next().read_expr()]; - case this.tok.T_POW: return ['bin', '**', expr, this.next().read_expr()]; - case this.tok.T_SL: return ['bin', '<<', expr, this.next().read_expr()]; - case this.tok.T_SR: return ['bin', '>>', expr, this.next().read_expr()]; - - // boolean operations - case this.tok.T_BOOLEAN_OR: - case this.tok.T_LOGICAL_OR: return ['bool', '|', expr, this.next().read_expr()]; - - case this.tok.T_BOOLEAN_AND: - case this.tok.T_LOGICAL_AND: return ['bool', '&', expr, this.next().read_expr()]; - - case this.tok.T_LOGICAL_XOR: return ['bool', '^', expr, this.next().read_expr()]; - case this.tok.T_IS_IDENTICAL: return ['bool', '=', expr, this.next().read_expr()]; - case this.tok.T_IS_NOT_IDENTICAL: return ['bool', '!=', expr, this.next().read_expr()]; - case this.tok.T_IS_EQUAL: return ['bool', '~', expr, this.next().read_expr()]; - case this.tok.T_IS_NOT_EQUAL: return ['bool', '!~', expr, this.next().read_expr()]; - case '<': return ['bool', '<', expr, this.next().read_expr()]; - case '>': return ['bool', '>', expr, this.next().read_expr()]; - - case this.tok.T_IS_SMALLER_OR_EQUAL: return ['bool', '<=', expr, this.next().read_expr()]; - case this.tok.T_IS_GREATER_OR_EQUAL: return ['bool', '>=', expr, this.next().read_expr()]; - case this.tok.T_SPACESHIP: return ['bool', '<=>', expr, this.next().read_expr()]; - case this.tok.T_INSTANCEOF: return ['bool', '?', expr, this.next().read_expr()]; - - // extra operations : - case this.tok.T_COALESCE: - // $username = $_GET['user'] ?? 'nobody'; - return this.node('coalesce')( - expr, this.next().read_expr() - ); - - case '?': - var trueArg = null; - if (this.next().token !== ':') { - trueArg = this.read_expr(); - } - if (this.expect(':')) { - this.next(); - } - return ['retif', expr, trueArg, this.read_expr()]; + // binary operations + if (this.token === '|') + return result('bin', '|', expr, this.next().read_expr()); + if (this.token === '&') + return result('bin', '&', expr, this.next().read_expr()); + if (this.token === '^') + return result('bin', '^', expr, this.next().read_expr()); + if (this.token === '.') + return result('bin', '.', expr, this.next().read_expr()); + if (this.token === '+') + return result('bin', '+', expr, this.next().read_expr()); + if (this.token === '-') + return result('bin', '-', expr, this.next().read_expr()); + if (this.token === '*') + return result('bin', '*', expr, this.next().read_expr()); + if (this.token === '/') + return result('bin', '/', expr, this.next().read_expr()); + if (this.token === '%') + return result('bin', '%', expr, this.next().read_expr()); + if (this.token === this.tok.T_POW) + return result('bin', '**', expr, this.next().read_expr()); + if (this.token === this.tok.T_SL) + return result('bin', '<<', expr, this.next().read_expr()); + if (this.token === this.tok.T_SR) + return result('bin', '>>', expr, this.next().read_expr()); + // boolean operations + if (this.token === this.tok.T_BOOLEAN_OR) + return result('bool', '|', expr, this.next().read_expr()); + if (this.token === this.tok.T_LOGICAL_OR) + return result('bool', '|', expr, this.next().read_expr()); + if (this.token === this.tok.T_BOOLEAN_AND) + return result('bool', '&', expr, this.next().read_expr()); + if (this.token === this.tok.T_LOGICAL_AND) + return result('bool', '&', expr, this.next().read_expr()); + if (this.token === this.tok.T_LOGICAL_XOR) + return result('bool', '^', expr, this.next().read_expr()); + if (this.token === this.tok.T_IS_IDENTICAL) + return result('bool', '=', expr, this.next().read_expr()); + if (this.token === this.tok.T_IS_NOT_IDENTICAL) + return result('bool', '!=', expr, this.next().read_expr()); + if (this.token === this.tok.T_IS_EQUAL) + return result('bool', '~', expr, this.next().read_expr()); + if (this.token === this.tok.T_IS_NOT_EQUAL) + return result('bool', '!~', expr, this.next().read_expr()); + if (this.token === '<') + return result('bool', '<', expr, this.next().read_expr()); + if (this.token === '>') + return result('bool', '!~', expr, this.next().read_expr()); + if (this.token === this.tok.T_IS_SMALLER_OR_EQUAL) + return result('bool', '<=', expr, this.next().read_expr()); + if (this.token === this.tok.T_IS_GREATER_OR_EQUAL) + return result('bool', '=>', expr, this.next().read_expr()); + if (this.token === this.tok.T_SPACESHIP) + return result('bool', '<=>', expr, this.next().read_expr()); + if (this.token === this.tok.T_INSTANCEOF) + return result('bool', '?', expr, this.next().read_expr()); + + // extra operations : + // $username = $_GET['user'] ?? 'nobody'; + if (this.token === this.tok.T_COALESCE) + return result('coalesce', expr, this.next().read_expr()); + + // extra operations : + // $username = $_GET['user'] ? true : false; + if (this.token === '?') { + var trueArg = null; + if (this.next().token !== ':') { + trueArg = this.read_expr(); + } + this.expect(':') && this.next(); + return result('retif', expr, trueArg, this.read_expr()); } + return expr; } @@ -4622,115 +5637,121 @@ module.exports = { */ ,read_expr_item: function() { - switch(this.token) { - - case '@': - return ['silent', this.next().read_expr()]; - - case '-': - var result = this.node(); + if (this.token === '@') + return this.node('silent')(this.next().read_expr()); + if (this.token === '+') + return this.node('unary')('+', this.next().read_expr()); + if (this.token === '!') + return this.node('unary')('!', this.next().read_expr()); + if (this.token === '~') + return this.node('unary')('~', this.next().read_expr()); + + if (this.token === '-') { + var result = this.node(); + this.next(); + if ( + this.token === this.tok.T_LNUMBER || + this.token === this.tok.T_DNUMBER + ) { + // negative number + result = result('number', '-' + this.text()); this.next(); - if ( - this.token === this.tok.T_LNUMBER || - this.token === this.tok.T_DNUMBER - ) { - // negative number - result = result('number', '-' + this.text()); - this.next(); - return result; - } else { - return result('unary', '-', this.read_expr()); - } - - case '+': - case '!': - case '~': - return this.node('unary')(this.token, this.read_expr()); - - case '(': - var expr = this.next().read_expr(); - if (this.expect(')')) { - this.next(); - } - - // handle dereferencable - if (this.token === this.tok.T_OBJECT_OPERATOR) { - return this.recursive_variable_chain_scan(expr, false); - } else if (this.token === this.tok.T_CURLY_OPEN || this.token === '[') { - return this.read_dereferencable(expr); - } else if (this.token === '(') { - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1118 - return this.node('call')( - expr, this.read_function_argument_list() - ); - } else { - return expr; - } + return result; + } else { + return result('unary', '-', this.read_expr()); + } + } - case '`': - // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1048 - var result = this.node('shell'); - var expr = this.next().read_encapsed_string('`'); - return result(expr); + if (this.token === '(') { + var node = this.node('parenthesis'); + var expr = this.next().read_expr(); + this.expect(')') && this.next(); + expr = node(expr); + // handle dereferencable + if (this.token === this.tok.T_OBJECT_OPERATOR) { + return this.recursive_variable_chain_scan(expr, false); + } else if (this.token === this.tok.T_CURLY_OPEN || this.token === '[') { + return this.read_dereferencable(expr); + } else if (this.token === '(') { + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1118 + return this.node('call')( + expr, this.read_function_argument_list() + ); + } else { + return expr; + } + } - case this.tok.T_LIST: - var result = this.node('list'), assign = null; - var isInner = this.innerList; - if (!isInner) { - assign = this.node('assign'); - } - if (this.next().expect('(')) { - this.next(); - } + if (this.token === '`') { + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1048 + return this.node('shell')( + this.next().read_encapsed_string('`') + ); + } - if (!this.innerList) this.innerList = true; - var assignList = this.read_assignment_list(); + if (this.token === this.tok.T_LIST) { + var result = this.node('list'), assign = null; + var isInner = this.innerList; + if (!isInner) { + assign = this.node('assign'); + } + if (this.next().expect('(')) { + this.next(); + } - // check if contains at least one assignment statement - var hasItem = false; - for(var i = 0; i < assignList.length; i++) { - if (assignList[i] !== null) { - hasItem = true; - break; - } - } - if (!hasItem) { - this.raiseError( - 'Fatal Error : Cannot use empty list on line ' + this.lexer.yylloc.first_line - ); - } - if (this.expect(')')) { - this.next(); + if (!this.innerList) this.innerList = true; + var assignList = this.read_assignment_list(); + + // check if contains at least one assignment statement + var hasItem = false; + for(var i = 0; i < assignList.length; i++) { + if (assignList[i] !== null) { + hasItem = true; + break; } + } + if (!hasItem) { + this.raiseError( + 'Fatal Error : Cannot use empty list on line ' + this.lexer.yylloc.first_line + ); + } + if (this.expect(')')) { + this.next(); + } - if (!isInner) { - this.innerList = false; - if (this.expect('=')) { - return assign( - result(assignList), - this.next().read_expr(), - '=' - ); - } else { - // fallback : list($a, $b); - return result(assignList); - } + if (!isInner) { + this.innerList = false; + if (this.expect('=')) { + return assign( + result(assignList), + this.next().read_expr(), + '=' + ); } else { + // fallback : list($a, $b); return result(assignList); } + } else { + return result(assignList); + } + } - case this.tok.T_CLONE: - return this.node('clone')( - this.next().read_expr() - ); + if (this.token === this.tok.T_CLONE) + return this.node('clone')( + this.next().read_expr() + ); + + switch(this.token) { case this.tok.T_INC: - var name = this.next().read_variable(false, false, false); - return ['set', name, ['bin', '+', name, ['number', 1]]]; + return this.node('pre')( + '+', this.next().read_variable(false, false, false) + ); case this.tok.T_DEC: - var name = this.next().read_variable(false, false, false); - return ['set', name, ['bin', '-', name, ['number', 1]]]; + return this.node('pre')( + '-', this.next().read_variable(false, false, false) + ); case this.tok.T_NEW: return this.next().read_new_expr(); @@ -4793,22 +5814,22 @@ module.exports = { return result(expr); case this.tok.T_INT_CAST: - return ['cast', 'int', this.next().read_expr()]; + return this.node('cast')('int', this.next().read_expr()); case this.tok.T_DOUBLE_CAST: - return ['cast', 'double', this.next().read_expr()]; + return this.node('cast')('double', this.next().read_expr()); case this.tok.T_STRING_CAST: - return ['cast', 'string', this.next().read_expr()]; + return this.node('cast')('string', this.next().read_expr()); case this.tok.T_ARRAY_CAST: - return ['cast', 'array', this.next().read_expr()]; + return this.node('cast')('array', this.next().read_expr()); case this.tok.T_OBJECT_CAST: - return ['cast', 'object', this.next().read_expr()]; + return this.node('cast')('object', this.next().read_expr()); case this.tok.T_BOOL_CAST: - return ['cast', 'boolean', this.next().read_expr()]; + return this.node('cast')('boolean', this.next().read_expr()); case this.tok.T_UNSET_CAST: return this.node('unset')( @@ -4837,20 +5858,23 @@ module.exports = { // T_YIELD (expr (T_DOUBLE_ARROW expr)?)? case this.tok.T_YIELD: - var result = ['yield', null, null]; + var result = this.node('yield'), value = null, key = null; if (this.next().is('EXPR')) { // reads the yield return value - result[1] = this.read_expr(); + value = this.read_expr(); if (this.token === this.tok.T_DOUBLE_ARROW) { // reads the yield returned key - result[2] = this.next().read_expr(); + key = value; + value = this.next().read_expr(); } } - return result; + return result(value, key); // T_YIELD_FROM expr case this.tok.T_YIELD_FROM: - return ['yieldfrom', this.next().read_expr()]; + var result = this.node('yieldfrom'); + var expr = this.next().read_expr(); + return result(expr); case this.tok.T_FUNCTION: // @fixme later - removed static lambda function declarations (colides with static keyword usage) @@ -4861,11 +5885,11 @@ module.exports = { // SCALAR | VARIABLE var expr; if (this.is('VARIABLE')) { + var result = this.node(); expr = this.read_variable(false, false, false); // VARIABLES SPECIFIC OPERATIONS switch(this.token) { case '=': - var result = this.node('assign'); var right; if (this.next().token == '&') { if (this.next().token === this.tok.T_NEW) { @@ -4876,42 +5900,51 @@ module.exports = { } else { right = this.read_expr(); } - return result(expr, right, '='); + return result('assign', expr, right, '='); // operations : case this.tok.T_PLUS_EQUAL: - return ['set', expr, ['bin', '+', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '+='); + case this.tok.T_MINUS_EQUAL: - return ['set', expr, ['bin', '-', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '-='); + case this.tok.T_MUL_EQUAL: - return ['set', expr, ['bin', '*', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '*='); + case this.tok.T_POW_EQUAL: - return ['set', expr, ['bin', '**', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '**='); + case this.tok.T_DIV_EQUAL: - return ['set', expr, ['bin', '/', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '/='); + case this.tok.T_CONCAT_EQUAL: - // NB : convert as string and add - return ['set', expr, ['bin', '.', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '.='); + case this.tok.T_MOD_EQUAL: - return ['set', expr, ['bin', '%', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '%='); + case this.tok.T_AND_EQUAL: - return ['set', expr, ['bin', '&', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '&='); + case this.tok.T_OR_EQUAL: - return ['set', expr, ['bin', '|', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '|='); + case this.tok.T_XOR_EQUAL: - return ['set', expr, ['bin', '^', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '^='); + case this.tok.T_SL_EQUAL: - return ['set', expr, ['bin', '<<', expr, this.next().read_expr()]]; + return result('assign', expr, this.next().read_expr(), '<<='); + case this.tok.T_SR_EQUAL: - return ['set', expr, ['bin', '>>', expr, this.next().read_expr()]]; + return result('assign',expr, this.next().read_expr(), '>>='); + case this.tok.T_INC: - var result = this.node('post'); this.next(); - return result('+', expr); + return result('post', '+', expr); case this.tok.T_DEC: - var result = this.node('post'); this.next(); - return result('+', expr); + return result('post', '-', expr); } } else if (this.is('SCALAR')) { expr = this.read_scalar(); @@ -4929,7 +5962,7 @@ module.exports = { } } } else { - expr = this.error('EXPR'); + this.error('EXPR'); this.next(); } @@ -4946,6 +5979,7 @@ module.exports = { ,read_new_expr: function() { var result = this.node('new'); if (this.token === this.tok.T_CLASS) { + var what = this.node('class'); // Annonymous class declaration var propExtends = null, propImplements = null, body = null; if (this.next().token == this.tok.T_EXTENDS) { @@ -4958,10 +5992,13 @@ module.exports = { body = this.next().read_class_body(); } return result( - false // class name => false : means it's an annonymous class - ,propExtends - ,propImplements - ,body + what( + null + ,propExtends + ,propImplements + ,body + ,[0, 0, 0] + ), [] ); } else { // Already existing class @@ -4980,12 +6017,14 @@ module.exports = { * ``` */ ,read_class_name_reference: function() { - if (this.token === '\\' || this.token === this.tok.T_STRING) { + if ( + this.token === this.tok.T_NS_SEPARATOR || + this.token === this.tok.T_STRING || + this.token === this.tok.T_NAMESPACE + ) { var result = this.read_namespace_name(); if (this.token === this.tok.T_DOUBLE_COLON) { result = this.read_static_getter(result); - } else { - result = ['ns', result]; } return result; } else if (this.is('VARIABLE')) { @@ -5024,7 +6063,7 @@ module.exports = { } }; -},{}],79:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5096,7 +6135,7 @@ module.exports = { this.next(); } var isRef = this.is_reference(); - var name = false, use = [], returnType = false; + var name = false, use = [], returnType = null, nullable = false; if (type !== 1) { if (this.expect(this.tok.T_STRING)) { name = this.text(); @@ -5112,13 +6151,17 @@ module.exports = { if (this.expect(')')) this.next(); } if (this.token === ':') { - returnType = this.next().read_type(); + if (this.next().token === '?') { + nullable = true; + this.next(); + } + returnType = this.read_type(); } if (type === 1) { // closure - return result(params, isRef, use, returnType); + return result(params, isRef, use, returnType, nullable); } - return result(name, params, isRef, returnType); + return result(name, params, isRef, returnType, nullable); } /** * ```ebnf @@ -5171,8 +6214,17 @@ module.exports = { ,read_parameter: function() { var node = this.node('parameter'), name = null, - value = null; - var type = this.read_type(); + value = null, + type = null, + nullable = false; + if (this.token === '?') { + this.next(); + nullable = true; + } + type = this.read_type(); + if (nullable && !type) { + this.raiseError('Expecting a type definition combined with nullable operator'); + } var isRef = this.is_reference(); var isVariadic = this.is_variadic(); if (this.expect(this.tok.T_VARIABLE)) { @@ -5182,25 +6234,33 @@ module.exports = { if (this.token == '=') { value = this.next().read_expr(); } - return node(name, type, value, isRef, isVariadic); + return node(name, type, value, isRef, isVariadic, nullable); } /** + * Reads a list of arguments * ```ebnf * function_argument_list ::= '(' (argument_list (',' argument_list)*)? ')' * ``` */ ,read_function_argument_list: function() { var result = []; - if (this.expect('(')) this.next(); + var wasVariadic = false; + this.expect('(') && this.next(); if (this.token !== ')') { while(this.token != this.EOF) { - result.push(this.read_argument_list()); + var argument = this.read_argument_list(); + result.push(argument); + if (argument.kind === 'variadic') { + wasVariadic = true; + } else if (wasVariadic) { + this.raiseError('Unexpected argument after a variadic argument'); + } if (this.token === ',') { this.next(); } else break; } } - if (this.expect(')')) this.next(); + this.expect(')') && this.next(); return result; } /** @@ -5221,23 +6281,25 @@ module.exports = { * ``` */ ,read_type: function() { + var result = this.node('identifier'); switch(this.token) { case this.tok.T_ARRAY: this.next(); - return ['array']; + return result(['', 'array'], false); + case this.tok.T_NAMESPACE: case this.tok.T_NS_SEPARATOR: case this.tok.T_STRING: return this.read_namespace_name(); case this.tok.T_CALLABLE: this.next(); - return ['callable']; + return result(['', 'callable'], false); default: return null; } } }; -},{}],80:[function(require,module,exports){ +},{}],109:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5337,7 +6399,7 @@ module.exports = { } }; -},{}],81:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5489,7 +6551,7 @@ module.exports = { var assignList = this.read_assignment_list(); if (this.expect(')')) this.next(); return result(assignList); - } else if (this.token === '[') { + } else if (this.token === '[' || this.token === this.tok.T_ARRAY) { return this.read_array(); } else { return this.read_variable(false, false, false); @@ -5497,7 +6559,7 @@ module.exports = { } }; -},{}],82:[function(require,module,exports){ +},{}],111:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5519,33 +6581,33 @@ module.exports = { } }; -},{}],83:[function(require,module,exports){ +},{}],112:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors * @url http://glayzzle.com */ +"use strict"; module.exports = { /** + * Reads a namespace declaration block * ```ebnf * namespace ::= T_NAMESPACE namespace_name? '{' * top_statements * '}' * | T_NAMESPACE namespace_name ';' top_statements * ``` + * @see http://php.net/manual/en/language.namespaces.php + * @return {Namespace} */ read_namespace: function() { - if (this.expect(this.tok.T_NAMESPACE)) this.next(); var result = this.node('namespace'); + this.expect(this.tok.T_NAMESPACE) && this.next(); if (this.token == '{') { this.currentNamespace = ['']; - return result([''], this.read_code_block(true)); + return result([''], this.read_code_block(true), true); } else { - if(this.token === this.tok.T_NAMESPACE) { - this.error(['{', this.tok.T_STRING]); - this.next(); // ignore namespace token - } var name = this.read_namespace_name(); if (this.token == ';') { this.currentNamespace = name; @@ -5554,12 +6616,13 @@ module.exports = { return result(name, body); } else if (this.token == '{') { this.currentNamespace = name; - return result(name, this.read_code_block(true)); + return result(name, this.read_code_block(true), true); } else if (this.token === '(') { // resolve ambuiguity between namespace & function call + name.resolution = this.ast.identifier.RELATIVE_NAME; + name.name = name.name.substring(1); return this.node('call')( - ['ns', name.slice(1)] - , this.read_function_argument_list() + name, this.read_function_argument_list() ); } else { this.error(['{', ';']); @@ -5572,115 +6635,123 @@ module.exports = { } } /** - * reading a namespace name + * Reads a namespace name * ```ebnf * namespace_name ::= T_NS_SEPARATOR? (T_STRING T_NS_SEPARATOR)* T_STRING * ``` + * @see http://php.net/manual/en/language.namespaces.rules.php + * @return {Identifier} */ ,read_namespace_name: function() { - var result = this.node('identifier'); + var result = this.node('identifier'), relative = false; if (this.token === this.tok.T_NAMESPACE) { - if (this.next().expect(this.tok.T_NS_SEPARATOR)) this.next(); + this.next().expect(this.tok.T_NS_SEPARATOR) && this.next(); + relative = true } return result( - this.read_list(this.tok.T_STRING, this.tok.T_NS_SEPARATOR, true) + this.read_list(this.tok.T_STRING, this.tok.T_NS_SEPARATOR, true), + relative ); } /** + * Reads a use statement * ```ebnf - * use_statements ::= - * use_statements ',' use_statement - * | use_statement + * use_statement ::= T_USE + * use_type? use_declarations | + * use_type use_statement '{' use_declarations '}' | + * use_statement '{' use_declarations(=>typed) '}' + * ';' * ``` + * @see http://php.net/manual/en/language.namespaces.importing.php + * @return {UseGroup} */ - ,read_use_statements: function() { - var result = []; - while(this.token !== this.EOF) { - if (this.expect(this.tok.T_USE)) { - this.next().read_list(this.read_use_statement_mixed, ',').forEach(function(item) { - if (Array.isArray(item)) { - result = result.concat(item); - } else { - result.push(item); - } - }); - } - if(this.token !== this.tok.T_USE) break; - } - return result; + ,read_use_statement: function() { + var result = this.node('usegroup'), + type = null, + items = [], + name = null + ; + this.expect(this.tok.T_USE) && this.next(); + type = this.read_use_type(); + items.push(this.read_use_declaration(false)); + if (this.token === ',') { + items = items.concat(this.next().read_use_declarations(false)); + } else if (this.token === '{') { + name = items[0].name; + items = this.next().read_use_declarations(type === null); + this.expect('}') && this.next(); + } + this.expect(';') && this.nextWithComments(); + return result(name, type, items); } /** + * Reads a use declaration * ```ebnf - * inline_use_declaration ::= ... + * use_declaration ::= use_type? namespace_name use_alias * ``` - * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L375 + * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L380 + * @return {UseItem} */ - ,read_inline_use_declaration: function(prefix) { - var result = []; - while(this.token !== this.EOF) { - var node = this.node('use'); - var ns = this.read_use_statement(prefix[3] !== false); - if(this.token === this.tok.T_AS) { - this.next().expect(this.tok.T_STRING); - ns[1] = this.text(); - this.next(); - } - ns[0] = prefix[0].concat(ns[0]); - if (prefix[2] !== false) { - ns[2] = prefix[2]; - } - result.push(node.apply(this, ns)); - if(this.token !== ',') { - break; - } else { - this.next(); - } + ,read_use_declaration: function(typed) { + var result = this.node('useitem'), type = null; + if (typed) type = this.read_use_type(); + var name = this.read_namespace_name(); + var alias = this.read_use_alias(); + return result(name, alias, type); + } + /** + * Reads a list of use declarations + * ```ebnf + * use_declarations ::= use_declaration (',' use_declaration)* + * ``` + * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L380 + * @return {UseItem[]} + */ + ,read_use_declarations: function(typed) { + var result = [this.read_use_declaration(typed)]; + while(this.token === ',') { + result.push(this.next().read_use_declaration(typed)); } return result; } /** + * Reads a use statement * ```ebnf - * use_statement_mixed ::= - * use_statement (T_AS T_STRING | '{' read_inline_use_declaration '}' ) - * (',' read_use_statement)* + * use_alias ::= (T_AS T_STRING)? * ``` + * @return {String|null} */ - ,read_use_statement_mixed: function() { - var result = this.node('use'); - var use = this.read_use_statement(); - if(this.token === this.tok.T_AS) { + ,read_use_alias: function() { + var result = null; + if (this.token === this.tok.T_AS) { if (this.next().expect(this.tok.T_STRING)) { - use[1] = this.text(); + result = this.text(); this.next(); } - } else if (this.token === '{') { - use = this.next().read_inline_use_declaration(use); - if (this.expect('}')) this.next(); - return use; } - return result.apply(this, use); + return result; } /** + * Reads the namespace type declaration * ```ebnf - * use_statement ::= ( - * (T_FUNCTION | T_CONST)? namespace_name - * ) + * use_type ::= (T_FUNCTION | T_CONST)? * ``` + * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L335 + * @return {String|null} Possible values : function, const */ - ,read_use_statement: function(ignoreType) { - var type = false; - if( - !ignoreType && (this.token === this.tok.T_FUNCTION || this.token === this.tok.T_CONST) - ) { - type = this.token === this.tok.T_FUNCTION ? 'function' : 'constant'; - this.next(); - } - var name = this.read_namespace_name(); - return [name, name[name.length - 1], type]; + ,read_use_type: function() { + if (this.token === this.tok.T_FUNCTION) { + this.next(); + return this.ast.useitem.TYPE_FUNCTION; + } else if (this.token === this.tok.T_CONST) { + this.next(); + return this.ast.useitem.TYPE_CONST; + } + return null; } }; -},{}],84:[function(require,module,exports){ +},{}],113:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5732,20 +6803,10 @@ module.exports = { case this.tok.T_CONSTANT_ENCAPSED_STRING: var value = this.node('string'); var text = this.text(); - var isDoubleQuote = false; - var isBinCast = value[0] === 'b' || value[0] === 'B'; - if (isBinCast) { - isDoubleQuote = text[1] === '"'; - text = text.substring(2, text.length - 1); - } else { - isDoubleQuote = text[0] === '"'; - text = text.substring(1, text.length - 1); - } - value = value(isDoubleQuote, this.resolve_special_chars(text)); - if (isBinCast) { - value = ['cast', 'binary', value]; - } + var isDoubleQuote = text[0] === '"'; + text = text.substring(1, text.length - 1); this.next(); + value = value(isDoubleQuote, this.resolve_special_chars(text)); if (this.token === this.tok.T_DOUBLE_COLON) { // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1151 return this.read_static_getter(value); @@ -5754,47 +6815,49 @@ module.exports = { return value; } case this.tok.T_START_HEREDOC: - return this.next().read_encapsed_string( - this.tok.T_END_HEREDOC - ); + if (this.lexer.curCondition === 'ST_NOWDOC') { + var node = this.node('nowdoc'); + var value = this.next().text(); + // strip the last line return char + var lastCh = value[value.length-1]; + if (lastCh === '\n') { + if (value[value.length-2] === '\r') { + // windows style + value = value.substring(0, value.length - 2); + } else { + // linux style + value = value.substring(0, value.length - 1); + } + } else if (lastCh === '\r') { + // mac style + value = value.substring(0, value.length - 1); + } + this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE) && this.next(); + node = node(value, this.lexer.heredoc_label); + this.expect(this.tok.T_END_HEREDOC) && this.next(); + return node; + } else { + return this.next().read_encapsed_string( + this.tok.T_END_HEREDOC + ); + } + case '"': return this.next().read_encapsed_string('"'); + case 'b"': case 'B"': - return ['cast', 'binary', this.next().read_encapsed_string('"')]; + var node = this.node('cast'); + var what = this.next().read_encapsed_string('"'); + return node('binary', what); // NUMERIC - case '-': // long case this.tok.T_LNUMBER: // long case this.tok.T_DNUMBER: // double var result = this.node('number'); var value = this.text(); - if (this.token === '-') { - this.next().expect([this.tok.T_LNUMBER, this.tok.T_DNUMBER]); - value += this.text(); - } - result = result(value); this.next(); - return result; - - // CONSTANTS - case this.tok.T_NAMESPACE: - case this.tok.T_NS_SEPARATOR: - case this.tok.T_STRING: - var value = this.read_namespace_name(); - var result = ['constant', value]; - if ( this.token == this.tok.T_DOUBLE_COLON) { - // class constant MyClass::CONSTANT - if (this.next().expect([this.tok.T_STRING, this.tok.T_CLASS])) { - result[1] = [value, this.text()]; - this.next(); - } - } - // CONSTANT ARRAYS OFFSET : MYCONST[1][0]... - while(this.token === '[') { - result = ['offset', result, this.next().read_expr()]; - if (this.expect(']')) this.next(); - } + result = result(value); return result; // ARRAYS @@ -5814,83 +6877,136 @@ module.exports = { */ ,read_dereferencable: function(expr) { var result; + var node = this.node('offsetlookup'); if (this.token === '[') { - result = ['offset', expr, this.next().read_expr()]; + var offset = this.next().read_expr(); if (this.expect(']')) this.next(); + result = node(expr, offset); } else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { - result = ['offset', expr, this.read_encapsed_string_item()]; + var offset = this.read_encapsed_string_item(); + result = node(expr, offset); } return result; } /** + * Reads and extracts an encapsed item * ```ebnf * encapsed_string_item ::= T_ENCAPSED_AND_WHITESPACE * | T_DOLLAR_OPEN_CURLY_BRACES expr '}' * | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' * | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' - * | variable * | T_CURLY_OPEN variable '}' + * | variable + * | variable '[' expr ']' + * | variable T_OBJECT_OPERATOR T_STRING * ``` + * @return {String|Variable|Expr|Lookup} + * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1219 */ ,read_encapsed_string_item: function() { - var result = null; + var result = this.node(); + + // plain text + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1222 if (this.token === this.tok.T_ENCAPSED_AND_WHITESPACE) { - result = this.node('string')(false, this.text()); + var text = this.text(); this.next(); - } else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { + result = result( + 'string', false, this.resolve_special_chars(text) + ); + } + + // dynamic variable name + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1239 + else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { + var name = null; if (this.next().token === this.tok.T_STRING_VARNAME) { - result = ['var', this.text()]; - if (this.next().token === '[') { - result = ['offset', result, this.next().read_expr()]; - if (this.expect(']')) this.next(); + var varName = this.text().substring(1); + name = this.node('variable'); + this.next(); + name = name(varName, false); + // check if lookup an offset + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1243 + if (this.token === '[') { + var node = this.node('offsetlookup'); + var offset = this.next().read_expr(); + this.expect(']') && this.next(); + name = node(name, offset); } } else { - result = this.read_expr(); + name = this.read_expr(); } - if (this.expect('}')) this.next(); - } else if (this.token === this.tok.T_CURLY_OPEN) { + this.expect('}') && this.next(); + result = result('variable', name, false); + } + + // expression + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1246 + else if (this.token === this.tok.T_CURLY_OPEN) { result = this.next().read_variable(false, false, false); - if (this.expect('}')) this.next(); - } else if (this.token === '[') { - result = ['offset', result, this.next().read_expr()]; - if (this.expect(']')) this.next(); - } else if (this.token === this.tok.T_VARIABLE) { - result = this.read_variable(false, true, false); + this.expect('}') && this.next(); + } + + // plain variable + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1231 + else if (this.token === this.tok.T_VARIABLE) { + result = this.read_simple_variable(false); + + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1233 + if (this.token === '[') { + var node = this.node('offsetlookup'); + var offset = this.next().read_encaps_var_offset(); + this.expect(']') && this.next(); + result = node(result, offset); + } + + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1236 + if (this.token === this.tok.T_OBJECT_OPERATOR) { + var node = this.node('propertylookup'); + var what = this.node('constref'); + this.next().expect(this.tok.T_STRING); + var name = this.text(); + this.next(); + result = node(result, what(name)); + } + + // error / fallback } else { - this.expect([ - this.tok.T_VARIABLE, - this.tok.T_CURLY_OPEN, - this.tok.T_DOLLAR_OPEN_CURLY_BRACES, - this.tok.T_ENCAPSED_AND_WHITESPACE - ]); + this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE); + var value = this.text(); + this.next(); + // consider it as string + result = result('string', false, value); } + return result; } /** * Reads an encapsed string */ ,read_encapsed_string: function(expect) { - if (this.token === expect) { - this.next(); - return null; // empty + var node = this.node('encapsed'), value = [], type = null; + + if (expect === '`') { + type = this.ast.encapsed.TYPE_SHELL; + } else if (expect === '"') { + type = this.ast.encapsed.TYPE_STRING; + } else { + type = this.ast.encapsed.TYPE_HEREDOC; } - var first = this.read_encapsed_string_item(); - if (this.token === expect) { - this.next(); - return first; - } - var result = [ - 'bin', '.' - , first - , this.read_encapsed_string_item() - ]; - while(this.token !== expect) { - result[3] = [ - 'bin', '.', result[3], this.read_encapsed_string_item() - ]; + + // reading encapsed parts + while(this.token !== expect && this.token !== this.EOF) { + value.push(this.read_encapsed_string_item()); } - if (this.expect(expect)) this.next(); - return result; + + this.expect(expect) && this.next(); + node = node(value, type); + + if (expect === this.tok.T_END_HEREDOC) { + node.label = this.lexer.heredoc_label; + } + return node; } /** * Constant token @@ -5903,7 +7019,7 @@ module.exports = { } }; -},{}],85:[function(require,module,exports){ +},{}],114:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5962,9 +7078,7 @@ module.exports = { case this.tok.T_TRAIT: return this.read_trait(); case this.tok.T_USE: - var expr = this.read_use_statements(); - if (this.expect(';')) this.nextWithComments(); - return expr; + return this.read_use_statement(); case this.tok.T_CONST: return this.next().read_const_list(); case this.tok.T_NAMESPACE: @@ -6026,19 +7140,24 @@ module.exports = { /** * Reads a list of constants declaration * ```ebnf - * const_list ::= T_CONST T_STRING '=' expr (',' T_STRING '=' expr)* + * declare_list ::= T_STRING '=' expr (',' T_STRING '=' expr)* * ``` + * @retrurn {Object} */ ,read_declare_list: function() { - return this.read_list(function() { + var result = {}; + while(this.token != this.EOF && this.token !== ')') { this.expect(this.tok.T_STRING); - var name = this.text(); + var name = this.text().toLowerCase(); if (this.next().expect('=')) { - return [name, this.next().read_expr()]; + result[name] = this.next().read_expr(); } else { - return [name, null]; + result[name] = null; } - }, ','); + if (this.token !== ',') break; + this.next(); + } + return result; } /** * reads a simple inner statement @@ -6069,10 +7188,18 @@ module.exports = { case this.tok.T_TRAIT: return this.read_trait(); case this.tok.T_HALT_COMPILER: - if (this.next().expect('(')) this.next(); - if (this.expect(')')) this.next(); - if (this.expect(';')) this.next(); - this.raiseError('__HALT_COMPILER() can only be used from the outermost scope'); + this.raiseError( + '__HALT_COMPILER() can only be used from the outermost scope' + ); + // fallback : returns a node but does not stop the parsing + var node = this.node('halt'); + this.next().expect('(') && this.next(); + this.expect(')') && this.next(); + node = node(this.lexer._input.substring( + this.lexer.offset + )); + this.expect(';') && this.next(); + return node; default: return this.read_statement(); } @@ -6110,20 +7237,24 @@ module.exports = { this.expectEndOfStatement(); return result(expr); + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L429 case this.tok.T_BREAK: - var result = this.node('break'); - this.next().expectEndOfStatement(); - return result(); - case this.tok.T_CONTINUE: - var result = this.node('continue'); - this.next().expectEndOfStatement(); - return result(); + var result = this.node( + this.token === this.tok.T_CONTINUE ? 'continue' : 'break' + ), level = null; + this.next(); // look ahead + if (this.token !== ';' && this.token !== this.tok.T_CLOSE_TAG) { + level = this.read_expr(); + } + this.expectEndOfStatement(); + return result(level); case this.tok.T_GLOBAL: + var result = this.node('global'); var items = this.next().read_list(this.read_simple_variable, ','); this.expectEndOfStatement(); - return ['global', items]; + return result(items); case this.tok.T_STATIC: var current = [this.token, this.lexer.getState()]; @@ -6135,28 +7266,13 @@ module.exports = { this.expect(';') && this.nextWithComments(); return expr; } - var items = this.read_list(function() { - var value = null, name = null; - if (this.expect(this.tok.T_VARIABLE)) { - name = this.text(); - this.next(); - } - if (this.token === '=') { - value = this.next().read_expr(); - } - return [name, value]; - }, ','); + var items = this.read_variable_declarations(); this.expectEndOfStatement(); - return result('declare', items); + return result(items); case this.tok.T_ECHO: var result = this.node('echo'); - var withParanthesis = (this.next().token === '('); - withParanthesis && this.next(); - var args = this.read_list(this.read_expr, ','); - if (withParanthesis) { - this.expect(')') && this.next(); - } + var args = this.next().read_list(this.read_expr, ','); this.expectEndOfStatement(); return result(args); @@ -6174,23 +7290,39 @@ module.exports = { return result(items); case this.tok.T_DECLARE: - var result = this.node('declare'), options, body; + var result = this.node('declare'), + what, + body = [], + mode; this.next().expect('(') && this.next(); - options = this.read_declare_list(); - this.expect(')') && this.nextWithComments(); + what = this.read_declare_list(); + this.expect(')') && this.next(); if (this.token === ':') { - body = []; - this.next(); + this.nextWithComments(); while(this.token != this.EOF && this.token !== this.tok.T_ENDDECLARE) { - body.push(this.read_statement()); + // @todo : check declare_statement from php / not valid + body.push(this.read_top_statement()); } - this.ignoreComments().expect(this.tok.T_ENDDECLARE) && this.next(); + this.expect(this.tok.T_ENDDECLARE) && this.next(); this.expectEndOfStatement(); + mode = this.ast.declare.MODE_SHORT; + } else if (this.token === '{') { + this.nextWithComments(); + while(this.token != this.EOF && this.token !== '}') { + // @todo : check declare_statement from php / not valid + body.push(this.read_top_statement()); + } + this.expect('}') && this.next(); + mode = this.ast.declare.MODE_BLOCK; } else { - body = this.read_statement(); + this.expect(';') && this.next(); + while(this.token != this.EOF && this.token !== this.tok.T_DECLARE) { + // @todo : check declare_statement from php / not valid + body.push(this.read_top_statement()); + } + mode = this.ast.declare.MODE_NONE; } - return result(options, body); - break; + return result(what, body, mode); case this.tok.T_TRY: return this.read_try(); @@ -6252,7 +7384,7 @@ module.exports = { } }; -},{}],86:[function(require,module,exports){ +},{}],115:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6348,7 +7480,7 @@ module.exports = { } }; -},{}],87:[function(require,module,exports){ +},{}],116:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6363,37 +7495,38 @@ module.exports = { * )* * (T_FINALLY '{' inner_statement* '}')? * ``` + * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L448 + * @return {Try} */ read_try: function() { - - // @todo implement the short form of declarations this.expect(this.tok.T_TRY); - var result = this.node('try'); - var code = this.nextWithComments().read_statement(); - var allways = false; - var catches = []; - + var result = this.node('try'), + always = null, + body, + catches = [] + ; + body = this.nextWithComments().read_statement(); this.ignoreComments(); + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L455 while(this.token === this.tok.T_CATCH) { + var item = this.node('catch'), what = [], variable = null; this.next().expect('(') && this.next(); - var exName = this.read_namespace_name(); - var varName = this.read_variable(true, false, false); - this.expect(')') && this.nextWithComments(); - catches.push({ - exception: exName, - as: varName, - body: this.read_statement() - }); + what = this.read_list( + this.read_namespace_name, '|', false + ); + variable = this.read_variable(true, false, false); + this.expect(')'); + catches.push(item(this.next().read_statement(), what, variable)); this.ignoreComments(); } if (this.token === this.tok.T_FINALLY) { - allways = this.nextWithComments().read_statement(); + always = this.nextWithComments().read_statement(); } - return result(code, catches, allways); + return result(body, catches, always); } }; -},{}],88:[function(require,module,exports){ +},{}],117:[function(require,module,exports){ /*! * Defines a list of helper functions for parsing * Copyright (C) 2017 Glayzzle (BSD3 License) @@ -6443,6 +7576,8 @@ module.exports = { } else { if (this.expect(item)) { result.push(this.text()); + } else { + return []; } while (this.next().token != this.EOF) { if (this.token != separator) break; @@ -6475,14 +7610,51 @@ module.exports = { ); } + /** + * Reads a list of variables declarations + * + * ```ebnf + * variable_declaration ::= T_VARIABLE ('=' expr)?* + * variable_declarations ::= variable_declaration (',' variable_declaration)* + * ``` + * + * Sample code : + * ```php + * var_$prop - what = ['bin', '.', what, ['var', this.text()]]; - } else if (tok === '{') { + what = ['bin', '.', what, ['var', name]]; + } else if (this.token === '{') { // fix $obj->var_{$prop} what = ['bin', '.', what, this.next().read_expr()]; this.expect('}') && this.next(); } break; case this.tok.T_VARIABLE: - what = ['var', this.text()]; + what = this.node('variable'); + var name = this.text().substring(1); this.next(); + what = what(name, false); break; case '$': - this.next().expect(['{', this.tok.T_VARIABLE]); if (this.token === '{') { // $obj->${$varname} @@ -6633,12 +7820,15 @@ module.exports = { this.expect('}') && this.next(); break; default: - what = this.error([this.tok.T_STRING, this.tok.T_VARIABLE]); + this.error([this.tok.T_STRING, this.tok.T_VARIABLE]); // graceful mode : set what as error mode & continue + what = this.node('constref'); + var name = this.text(); this.next(); + what = what(name); break; } - result = ['prop', result, what]; + result = node(result, what); break; default: break recursive_scan_loop; @@ -6655,21 +7845,29 @@ module.exports = { var text = this.text(); var isDblQuote = text[0] === '"'; text = text.substring(1, text.length - 1); + this.next(); offset = offset( 'string', isDblQuote, this.resolve_special_chars(text) ); } else if (this.token === this.tok.T_NUM_STRING) { - offset = offset('number', this.text()); + var num = this.text(); + this.next(); + offset = offset('number', num); } else if (this.token === this.tok.T_VARIABLE) { - offset = offset('variable', this.text()); + var name = this.text().substring(1); + this.next(); + offset = offset('variable', name, false); } else { this.expect([ this.tok.T_STRING, this.tok.T_NUM_STRING, this.tok.T_VARIABLE ]); + // fallback : consider as text + var text = this.text(); + this.next(); + offset = offset('string', false, text); } - this.next(); return offset; } /** @@ -6686,17 +7884,20 @@ module.exports = { ,read_reference_variable: function(encapsed, byref) { var result = this.read_simple_variable(byref); while(this.token != this.EOF) { + var node = this.node(); if (this.token == '[') { + var offset = null; if (encapsed) { - result = this.next().read_encaps_var_offset(); + offset = this.next().read_encaps_var_offset(); } else { - var offset = this.next().token === ']' ? null : this.read_dim_offset(); - result = ['offset', result, offset]; + offset = this.next().token === ']' ? null : this.read_dim_offset(); } this.expect(']') && this.next(); + result = node('offsetlookup', result, offset); } else if (this.token == '{' && !encapsed) { - result = ['offset', result, this.next().read_expr()]; + var offset = this.next().read_expr(); this.expect('}') && this.next(); + result = node('offsetlookup', result, offset); } else break; } return result; @@ -6710,35 +7911,40 @@ module.exports = { var result = this.node('variable'); if (this.expect([this.tok.T_VARIABLE, '$']) && this.token === this.tok.T_VARIABLE) { // plain variable name - result = result(this.text(), byref); + var name = this.text().substring(1); this.next(); + result = result(name, byref); } else { if (this.token === '$') this.next(); // dynamic variable name switch(this.token) { case '{': - result = this.next().read_expr(); + var expr = this.next().read_expr(); this.expect('}') && this.next(); + result = result(expr, byref); break; case '$': // $$$var - result = ['lookup', 'var', this.read_simple_variable(false)]; + result = result(this.read_simple_variable(false), byref); break; case this.tok.T_VARIABLE: // $$var - result = ['var', this.text()]; + var name = this.text().substring(1); + var node = this.node('variable'); this.next(); + result = result(node(name, false), byref); break; default: - result = this.error(['{', '$', this.tok.T_VARIABLE]); + this.error(['{', '$', this.tok.T_VARIABLE]); // graceful mode + var name = this.text(); this.next(); + result = result(name, byref); } - result = ['lookup', 'var', result]; } return result; } }; -},{}],90:[function(require,module,exports){ +},{}],119:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -7056,8 +8262,33 @@ function combine(src, to) { } /** + * Initialise a new parser instance with the specified options + * + * Usage : + * ```js + * var parser = require('php-parser'); + * var instance = new parser({ + * parser: { + * extractDoc: true, + * suppressErrors: true + * }, + * ast: { + * withPositions: true + * }, + * lexer: { + * short_tags: true, + * asp_tags: true + * } + * }); + * + * var evalAST = instance.parseEval('some php code'); + * var codeAST = instance.parseCode(' Note that the output tokens are *STRICLY* similar to PHP function `token_get_all` + * @param {String} buffer + * @return {String[]} - Each item can be a string or an array with following informations [token_name, text, line_number] */ engine.prototype.tokenGetAll = function(buffer) { this.lexer.mode_eval = false; @@ -7153,4 +8414,4 @@ engine.prototype.tokenGetAll = function(buffer) { // exports the function module.exports = engine; -},{"./ast":2,"./lexer":65,"./parser":74,"./tokens":90}]},{},[]); +},{"./ast":2,"./lexer":94,"./parser":103,"./tokens":119}]},{},[]); diff --git a/dist/php-parser.min.js b/dist/php-parser.min.js index a774f654e..ad7c8a5d6 100644 --- a/dist/php-parser.min.js +++ b/dist/php-parser.min.js @@ -1,84 +1,93 @@ require=function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g1)for(var c=1;c=this.size,!this.all_tokens&&this.mode_eval?this.begin("ST_IN_SCRIPTING"):this.begin("INITIAL"),this},d.prototype.input=function(a){var b=this._input[this.offset];return b?(this.yytext+=b,this.offset++,"\r"===b&&"\n"===this._input[this.offset]&&(this.yytext+="\n", -this.offset++),"\n"===b||"\r"===b?(this.yylloc.last_line=++this.yylineno,this.yyprevcol=this.yylloc.last_column,this.yylloc.last_column=0):this.yylloc.last_column++,b):""},d.prototype.unput=function(a){if(1===a)this.offset--,"\n"===this._input[this.offset]&&"\r"===this._input[this.offset-1]&&(this.offset--,a++),"\r"!==this._input[this.offset]&&"\n"!==this._input[this.offset]||(this.yylloc.last_line--,this.yylineno--,this.yylloc.last_column=this.yyprevcol),this.yytext=this.yytext.substring(0,this.yytext.length-a);else if(a>0)if(this.offset-=a,a0?this.conditionStack.pop():this.conditionStack[0]; -if(this.curCondition=this.conditionStack[this.conditionStack.length-1],this.stateCb=this["match"+this.curCondition],"function"!=typeof this.stateCb)throw new Error('Undefined condition state "'+this.curCondition+'"');return b},d.prototype.next=function(){var a;return this._input||(this.done=!0),this.done?this.EOF:(this.yylloc.first_offset=this.offset,this.yylloc.first_line=this.yylloc.last_line,this.yylloc.first_column=this.yylloc.last_column,this.yytext="",this.tokens.length>0?(a=this.tokens.shift(),"object"==typeof a[1]?this.setState(a[1]):this.consume(a[1]),a=a[0]):a=this.stateCb.apply(this,[]),this.offset>=this.size&&0===this.tokens.length&&(this.done=!0),a)},[a("./lexer/comments.js"),a("./lexer/initial.js"),a("./lexer/numbers.js"),a("./lexer/property.js"),a("./lexer/scripting.js"),a("./lexer/strings.js"),a("./lexer/tokens.js"),a("./lexer/utils.js")].forEach(function(a){for(var b in a)d.prototype[b]=a[b]}),b.exports=d},{"./lexer/comments.js":66,"./lexer/initial.js":67,"./lexer/numbers.js":68,"./lexer/property.js":69, -"./lexer/scripting.js":70,"./lexer/strings.js":71,"./lexer/tokens.js":72,"./lexer/utils.js":73}],66:[function(a,b,c){b.exports={T_COMMENT:function(){for(;this.offset"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT;if("%"===a&&this.aspTagMode&&">"===this._input[this.offset])return this.unput(1),tthis.tok.T_COMMENT}return this.tok.T_COMMENT},T_DOC_COMMENT:function(){var a=this.input(),b=this.tok.T_COMMENT;if("*"===a){if(a=this.input(),this.is_WHITESPACE()&&(b=this.tok.T_DOC_COMMENT),"/"===a)return b;this.unput(1)}for(;this.offset1&&"INITIAL"===this.conditionStack[this.conditionStack.length-1]?this.popState():this.begin("ST_IN_SCRIPTING"),this},matchINITIAL:function(){for(;this.offset0&&this.tok.T_INLINE_HTML}}},{}],68:[function(a,b,c){(function(a){if("x64"==a.arch)var c=20,d="9223372036854775808";else var c=11,d="2147483648";b.exports={consume_NUM:function(){var a=this.yytext[0],b="."===this.yytext[0];if("0"===a)if(a=this.input(),"x"===a||"X"===a){if(this.input(),this.is_HEX())return this.consume_HNUM();this.unput(2); -}else if("b"===a||"B"===a){if(a=this.input(),"0"===a||"1"===a)return this.consume_BNUM();this.unput(2)}else this.is_NUM()||this.unput(1);for(;this.offset"===a)return this.tok.T_OBJECT_OPERATOR;this.unput(1)}else if(this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_STRING;return this.popState(),this.unput(1),!1},matchST_LOOKING_FOR_VARNAME:function(){var a=this.input();return this.is_LABEL_START()?(this.consume_LABEL(),a=this.input(),this.popState(),"["===a||"}"===a?(this.begin("ST_IN_SCRIPTING"),this.unput(1),this.tok.T_STRING_VARNAME):(this.unput(this.yytext.length),!1)):(this.unput(1),this.popState(),this.begin("ST_IN_SCRIPTING"),!1)},matchST_VAR_OFFSET:function(){var a=this.input();if(this.is_NUM())return this.consume_NUM(),this.tok.T_NUM_STRING;if("]"===a)return this.popState(),"]";if("$"===a){if(this.input(),this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_VARIABLE;throw new Error("Unexpected terminal")}if(this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_STRING; -if(this.is_WHITESPACE()||"\\"===a||"'"===a||"#"===a)return this.tok.T_ENCAPSED_AND_WHITESPACE;if("["===a||"{"===a||"}"===a||'"'===a||"`"===a||this.is_TOKEN())return a;throw new Error("Unexpected terminal")}}},{}],70:[function(a,b,c){b.exports={matchST_IN_SCRIPTING:function(){var a=this.input();switch(a){case" ":case"\t":case"\n":case"\r":case"\r\n":return this.T_WHITESPACE();case"#":return this.T_COMMENT();case"/":return"/"===this._input[this.offset]?this.T_COMMENT():"*"===this._input[this.offset]?(this.input(),this.T_DOC_COMMENT()):this.consume_TOKEN();case"'":return this.T_CONSTANT_ENCAPSED_STRING();case'"':return this.ST_DOUBLE_QUOTES();case"`":return this.begin("ST_BACKQUOTE"),"`";case"?":if(!this.aspTagMode&&this.tryMatch(">")){this.input();var b=this._input[this.offset];return"\n"!==b&&"\r"!==b||this.input(),this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG}return this.consume_TOKEN();case"%":return this.aspTagMode&&">"===this._input[this.offset]?(this.input(),a=this._input[this.offset], -"\n"!==a&&"\r"!==a||this.input(),this.aspTagMode=!1,this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG):this.consume_TOKEN();case"{":return this.begin("ST_IN_SCRIPTING"),"{";case"}":return this.conditionStack.length>2&&this.popState(),"}";default:if("."===a){if(this.input(),this.is_NUM())return this.consume_NUM();this.unput(1)}if(this.is_NUM())return this.consume_NUM();if(this.is_LABEL_START())return this.consume_LABEL().T_STRING();if(this.is_TOKEN())return this.consume_TOKEN()}throw new Error('Bad terminal sequence "'+a+'" at line '+this.yylineno+" (offset "+this.offset+")")},T_WHITESPACE:function(){for(;this.offset2&&this.appendToken(this.tok.T_ENCAPSED_AND_WHITESPACE,this.yytext.length-b),this.unput(this.yytext.length-b),this.begin("ST_DOUBLE_QUOTES"),this.yytext},isDOC_MATCH:function(){if(this._input.substring(this.offset-1,this.offset-1+this.heredoc_label.length)===this.heredoc_label){var a=this._input[this.offset-1+this.heredoc_label.length];if("\n"===a||"\r"===a||";"===a)return!0}return!1},matchST_NOWDOC:function(){if(this.isDOC_MATCH())return this.consume(this.heredoc_label.length),this.popState(),this.tok.T_END_HEREDOC;for(var a=this._input[this.offset-1];this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var b=this.offset,c=this.consume_VARIABLE();return this.yytext.length>this.offset-b+2?(this.appendToken(c,this.offset-b+2),this.unput(this.offset-b+2),this.tok.T_ENCAPSED_AND_WHITESPACE):c}}else if("{"===a){if(a=this.input(),"$"===a)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN)}else a=this.input();return this.tok.T_ENCAPSED_AND_WHITESPACE},consume_VARIABLE:function(){if(this.consume_LABEL(), -ch=this.input(),"["==ch)return this.unput(1),this.begin("ST_VAR_OFFSET"),this.tok.T_VARIABLE;if("-"===ch){if(">"===this.input())return this.input(),this.is_LABEL_START()&&this.begin("ST_LOOKING_FOR_PROPERTY"),this.unput(3),this.tok.T_VARIABLE;this.unput(2)}else this.unput(1);return this.tok.T_VARIABLE},matchST_BACKQUOTE:function(){var a=this.input();if("$"===a){if(a=this.input(),"{"===a)return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var b=this.consume_VARIABLE();return b}}else if("{"===a){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if('"'===a)return this.popState(),'"';for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES; -if(this.is_LABEL_START()){var c=this.offset,d=this.consume_VARIABLE();return this.yytext.length>this.offset-c+2?(this.appendToken(d,this.offset-c+2),this.unput(this.offset-c+2),this.tok.T_ENCAPSED_AND_WHITESPACE):d}this.unput(1)}else if("{"===a){if(a=this.input(),"$"===a)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN);this.unput(1)}}a=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE},matchST_DOUBLE_QUOTES:function(){var a=this.input();if("$"===a){if(a=this.input(),"{"===a)return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var b=this.consume_VARIABLE();return b}}else if("{"===a){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if('"'===a)return this.popState(),'"';for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var c=this.offset,d=this.consume_VARIABLE();return this.yytext.length>this.offset-c+2?(this.appendToken(d,this.offset-c+2),this.unput(this.offset-c+2),this.tok.T_ENCAPSED_AND_WHITESPACE):d}this.unput(1)}else if("{"===a){if(a=this.input(),"$"===a)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN);this.unput(1)}}a=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE}}},{}],72:[function(a,b,c){b.exports={T_STRING:function(){var a=this.yytext.toLowerCase(),b=this.keywords[a];if(!b)if("yield"===a)this.tryMatch(" from")?(this.consume(5),b=this.tok.T_YIELD_FROM):b=this.tok.T_YIELD;else if(b=this.tok.T_STRING, -"b"===a||"B"===a){var c=this.input(1);if('"'===c)return this.ST_DOUBLE_QUOTES();if("'"===c)return this.T_CONSTANT_ENCAPSED_STRING();this.unput(1)}return b},consume_TOKEN:function(){var a=this._input[this.offset-1],b=this.tokenTerminals[a];return b?b.apply(this,[]):this.yytext},tokenTerminals:{$:function(){return this.offset++,this.is_LABEL_START()?(this.offset--,this.consume_LABEL(),this.tok.T_VARIABLE):(this.offset--,"$")},"-":function(){var a=this._input[this.offset];return">"===a?(this.begin("ST_LOOKING_FOR_PROPERTY").input(),this.tok.T_OBJECT_OPERATOR):"-"===a?(this.input(),this.tok.T_DEC):"="===a?(this.input(),this.tok.T_MINUS_EQUAL):"-"},"\\":function(){return this.tok.T_NS_SEPARATOR},"/":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_DIV_EQUAL):"/"},":":function(){return":"===this._input[this.offset]?(this.input(),this.tok.T_DOUBLE_COLON):":"},"(":function(){var a=this.offset;if(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),this.is_LABEL_START()){var b=this.yytext.length; -this.consume_LABEL();var c=this.yytext.substring(b-1).toLowerCase(),d=this.castKeywords[c];if(d&&(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),")"===this._input[this.offset-1]))return d}return this.unput(this.offset-a),"("},"=":function(){var a=this._input[this.offset];return">"===a?(this.input(),this.tok.T_DOUBLE_ARROW):"="===a?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_IDENTICAL):(this.input(),this.tok.T_IS_EQUAL):"="},"+":function(){var a=this._input[this.offset];return"+"===a?(this.input(),this.tok.T_INC):"="===a?(this.input(),this.tok.T_PLUS_EQUAL):"+"},"!":function(){return"="===this._input[this.offset]?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_NOT_IDENTICAL):(this.input(),this.tok.T_IS_NOT_EQUAL):"!"},"?":function(){return"?"===this._input[this.offset]?(this.input(),this.tok.T_COALESCE):"?"},"<":function(){var a=this._input[this.offset];return"<"===a?(a=this._input[this.offset+1],"="===a?(this.consume(2),this.tok.T_SL_EQUAL):"<"===a&&this.is_HEREDOC()?this.tok.T_START_HEREDOC:(this.input(), -this.tok.T_SL)):"="===a?(this.input(),">"===this._input[this.offset]?(this.input(),this.tok.T_SPACESHIP):this.tok.T_IS_SMALLER_OR_EQUAL):">"===a?(this.input(),this.tok.T_IS_NOT_EQUAL):"<"},">":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_IS_GREATER_OR_EQUAL):">"===a?(a=this._input[this.offset+1],"="===a?(this.consume(2),this.tok.T_SR_EQUAL):(this.input(),this.tok.T_SR)):">"},"*":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_MUL_EQUAL):"*"===a?(this.input(),"="===this._input[this.offset]?(this.input(),this.tok.T_POW_EQUAL):this.tok.T_POW):"*"},".":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_CONCAT_EQUAL):"."===a&&"."===this._input[this.offset+1]?(this.consume(2),this.tok.T_ELLIPSIS):"."},"%":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_MOD_EQUAL):"%"},"&":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_AND_EQUAL):"&"===a?(this.input(),this.tok.T_BOOLEAN_AND):"&"; -},"|":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_OR_EQUAL):"|"===a?(this.input(),this.tok.T_BOOLEAN_OR):"|"},"^":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_XOR_EQUAL):"^"}}}},{}],73:[function(a,b,c){var d=";:,.\\[]()|^&+-/*=%!~$<>?@";b.exports={is_NUM:function(){var a=this._input.charCodeAt(this.offset-1);return a>47&&a<58},is_LABEL:function(){var a=this._input.charCodeAt(this.offset-1);return a>96&&a<123||a>64&&a<91||95===a||a>47&&a<58||a>126},is_LABEL_START:function(){var a=this._input.charCodeAt(this.offset-1);return a>96&&a<123||a>64&&a<91||95===a||a>126},consume_LABEL:function(){for(;this.offset47&&a<58||a>64&&a<71||a>96&&a<103}}},{}],74:[function(a,b,c){function d(a){return"."!=a&&","!=a&&!isNaN(parseFloat(a))&&isFinite(a)}var e=function(a,b){this.lexer=a,this.ast=b,this.tok=a.tok,this.EOF=a.EOF,this._gracefulProxy={},this._graceful=!1,this.token=null,this.prev=null,this.debug=!1,this.extractDoc=!1,this.suppressErrors=!1,this.lastError=!1,this.startAt=[],this.entries={SCALAR:[this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_STRING,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C,'"','b"','B"',"-",this.tok.T_NS_SEPARATOR],T_MAGIC_CONST:[this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C], -T_MEMBER_FLAGS:[this.tok.T_PUBLIC,this.tok.T_PRIVATE,this.tok.T_PROTECTED,this.tok.T_STATIC,this.tok.T_ABSTRACT,this.tok.T_FINAL],VARIABLE:[this.tok.T_VARIABLE,"$","&",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_STATIC],EOS:[";",this.tok.T_CLOSE_TAG,this.EOF,this.tok.T_INLINE_HTML],EXPR:["@","-","+","!","~","(","`",this.tok.T_LIST,this.tok.T_CLONE,this.tok.T_INC,this.tok.T_DEC,this.tok.T_NEW,this.tok.T_ISSET,this.tok.T_EMPTY,this.tok.T_INCLUDE,this.tok.T_INCLUDE_ONCE,this.tok.T_REQUIRE,this.tok.T_REQUIRE_ONCE,this.tok.T_EVAL,this.tok.T_INT_CAST,this.tok.T_DOUBLE_CAST,this.tok.T_STRING_CAST,this.tok.T_ARRAY_CAST,this.tok.T_OBJECT_CAST,this.tok.T_BOOL_CAST,this.tok.T_UNSET_CAST,this.tok.T_EXIT,this.tok.T_PRINT,this.tok.T_YIELD,this.tok.T_STATIC,this.tok.T_FUNCTION,this.tok.T_VARIABLE,"$",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_STRING,this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C] -}};e.prototype.getTokenName=function(a){return d(a)?a==this.EOF?"the end of file (EOF)":this.lexer.engine.tokens.values[a]:"'"+a+"'"},e.prototype.parse=function(a){this._errors=[],this.currentNamespace=[""],this.lexer.setInput(a),this.lexer.comment_tokens=this.extractDoc,this.length=this.lexer._input.length,this.innerList=!1;var b=this.ast.prepare("program",this),c=[];for(this.nextWithComments();this.token!=this.EOF;){var d=this.read_start();null!==d&&void 0!==d&&(Array.isArray(d)?c=c.concat(d):c.push(d))}return b(c,this._errors)},e.prototype.raiseError=function(a,b,c,d){if(!this.suppressErrors)throw new Error(a);var e=this.ast.prepare("error",this)(a,d,this.lexer.yylloc.first_line,c);return this._errors.push(e),e},e.prototype.error=function(a){var b="Parse Error : syntax error";if(token=this.getTokenName(this.token),this.token!==this.EOF){if(d(this.token)){var c=this.text();c.length>10&&(c=c.substring(0,7)+"..."),token="'"+c+"' ("+token+")"}b+=", unexpected "+token}var e="";return a&&!Array.isArray(a)&&((d(a)||1===a.length)&&(e=", expecting "+this.getTokenName(a)), -b+=e),this.token!==this.EOF,this.raiseError(b+" on line "+this.lexer.yylloc.first_line,e,a,token)},e.prototype.node=function(a){return this.ast.prepare(a,this)},e.prototype.expectEndOfStatement=function(){if(";"===this.token)this.nextWithComments(),this.token===this.tok.T_CLOSE_TAG&&this.nextWithComments();else if(this.token===this.tok.T_CLOSE_TAG)this.nextWithComments();else if(this.token!==this.tok.T_INLINE_HTML&&this.token!==this.EOF)return this.error(";"),!1;return!0};var f=["parser.next","parser.nextWithComments"];e.prototype.showlog=function(){for(var a,b=(new Error).stack.split("\n"),c=2;c"+this.lexer.yytext+"< @-->"+a),this},e.prototype.expect=function(a){if(Array.isArray(a)){if(a.indexOf(this.token)===-1)return this.error(a),!1}else if(this.token!=a)return this.error(a),!1;return!0},e.prototype.text=function(){ -return this.lexer.yytext},e.prototype.next=function(){return this.debug?(this.showlog(),this.debug=!1,this.nextWithComments().ignoreComments(),this.debug=!0):this.nextWithComments().ignoreComments(),this},e.prototype.ignoreComments=function(){for(this.debug&&this.showlog();this.token===this.tok.T_COMMENT||this.token===this.tok.T_DOC_COMMENT;)this.nextWithComments();return this},e.prototype.nextWithComments=function(){return this.prev=[this.lexer.yylloc.first_line,this.lexer.yylloc.first_column,this.lexer.offset],this.token=this.lexer.lex()||this.EOF,this.debug&&this.showlog(),this},e.prototype.is=function(a){return Array.isArray(a)?a.indexOf(this.token)!==-1:this.entries[a].indexOf(this.token)!=-1},e.prototype.read_token=function(){var a=this.token;return d(a)&&(a=[a,this.text(),this.lexer.yylloc.first_line]),this.next(),a},[a("./parser/array.js"),a("./parser/class.js"),a("./parser/comment.js"),a("./parser/expr.js"),a("./parser/function.js"),a("./parser/if.js"),a("./parser/loops.js"),a("./parser/main.js"),a("./parser/namespace.js"),a("./parser/scalar.js"),a("./parser/statement.js"),a("./parser/switch.js"),a("./parser/try.js"),a("./parser/utils.js"),a("./parser/variable.js")].forEach(function(a){ -for(var b in a)e.prototype[b]=a[b]}),b.exports=e},{"./parser/array.js":75,"./parser/class.js":76,"./parser/comment.js":77,"./parser/expr.js":78,"./parser/function.js":79,"./parser/if.js":80,"./parser/loops.js":81,"./parser/main.js":82,"./parser/namespace.js":83,"./parser/scalar.js":84,"./parser/statement.js":85,"./parser/switch.js":86,"./parser/try.js":87,"./parser/utils.js":88,"./parser/variable.js":89}],75:[function(a,b,c){var d="array",e="entry";b.exports={read_array:function(){var a=null,b=!1,c=[],e=this.node(d);if(this.expect([this.tok.T_ARRAY,"["]),this.token==this.tok.T_ARRAY?this.next().expect("("):b=!0,this.next().token!=a)for(;this.token!=this.EOF&&(c.push(this.read_array_pair_list()),","==this.token)&&(this.next(),this.token!==a););return this.expect(b?"]":")"),this.next(),e(b,c)},read_array_pair_list:function(){var a=this.node(e),b=null,c=null;if("&"===this.token)c=this.next().read_variable(!0,!1,!0);else{var d=this.read_expr();this.token===this.tok.T_DOUBLE_ARROW?(b=d,c="&"===this.next().token?this.next().read_variable(!0,!1,!0):this.read_expr()):c=d; -}return a(b,c)},read_dim_offset:function(){return"]"!=this.token&&this.read_expr()}}},{}],76:[function(a,b,c){b.exports={read_class:function(a){var b=this.node("class");this.expect(this.tok.T_CLASS),this.next().expect(this.tok.T_STRING);var c,d=this.text(),e=null,f=null;return this.next().token==this.tok.T_EXTENDS&&(e=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(f=this.next().read_name_list()),this.expect("{"),c=this.nextWithComments().read_class_body(),b(d,e,f,c,a)},read_class_scope:function(){var a=this.token;return a==this.tok.T_FINAL?(this.next(),[0,0,2]):a==this.tok.T_ABSTRACT?(this.next(),[0,0,1]):[0,0,0]},read_class_body:function(){for(var a=[];this.token!==this.EOF&&"}"!==this.token;)if(this.token!==this.tok.T_COMMENT)if(this.token!==this.tok.T_DOC_COMMENT)if(this.token!==this.tok.T_USE){var b=this.read_member_flags(!1);if(this.token!==this.tok.T_CONST)if(this.token===this.tok.T_VAR&&(this.next().expect(this.tok.T_VARIABLE),b[0]=b[1]=0),this.token===this.tok.T_VARIABLE){var c=this.read_variable_list(b); +2:[function(a,b,c){var d=a("./ast/location"),e=a("./ast/position"),f=function(a,b){this.withPositions=a,this.withSource=b};f.prototype.position=function(a){return new e(a.lexer.yylloc.first_line,a.lexer.yylloc.first_column,a.lexer.yylloc.first_offset)},f.prototype.prepare=function(a,b){var c=null;(this.withPositions||this.withSource)&&(c=this.position(b));var f=this;return function(){var g=null,h=Array.prototype.slice.call(arguments);if(f.withPositions||f.withSource){var i=null;f.withSource&&(i=b.lexer._input.substring(c.offset,b.lexer.yylloc.prev_offset)),g=f.withPositions?new d(i,c,new e(b.lexer.yylloc.prev_line,b.lexer.yylloc.prev_column,b.lexer.yylloc.prev_offset)):new d(i,null,null),h.push(g)}a||(a=h.shift());var j=f[a];if("function"!=typeof j)throw new Error('Undefined node "'+a+'"');var k=Object.create(j.prototype);return j.apply(k,h),k}},[a("./ast/array"),a("./ast/assign"),a("./ast/bin"),a("./ast/block"),a("./ast/bool"),a("./ast/boolean"),a("./ast/break"),a("./ast/call"),a("./ast/case"),a("./ast/cast"),a("./ast/catch"),a("./ast/class"),a("./ast/classconstant"),a("./ast/clone"),a("./ast/closure"),a("./ast/coalesce"),a("./ast/constant"),a("./ast/constref"),a("./ast/continue"),a("./ast/declare"),a("./ast/do"),a("./ast/doc"),a("./ast/echo"),a("./ast/empty"),a("./ast/encapsed"),a("./ast/entry"),a("./ast/error"),a("./ast/eval"),a("./ast/exit"),a("./ast/expression"),a("./ast/for"),a("./ast/foreach"),a("./ast/function"),a("./ast/global"),a("./ast/goto"),a("./ast/halt"),a("./ast/identifier"),a("./ast/if"),a("./ast/include"),a("./ast/inline"),a("./ast/interface"),a("./ast/isset"),a("./ast/label"),a("./ast/list"),a("./ast/literal"),a("./ast/magic"),a("./ast/method"),a("./ast/namespace"),a("./ast/new"),a("./ast/node"),a("./ast/nowdoc"),a("./ast/number"),a("./ast/offsetlookup"),a("./ast/parameter"),a("./ast/parenthesis"),a("./ast/post"),a("./ast/pre"),a("./ast/print"),a("./ast/program"),a("./ast/property"),a("./ast/propertylookup"),a("./ast/retif"),a("./ast/return"),a("./ast/shell"),a("./ast/silent"),a("./ast/static"),a("./ast/staticlookup"),a("./ast/string"),a("./ast/switch"),a("./ast/throw"),a("./ast/trait"),a("./ast/traitalias"),a("./ast/traitprecedence"),a("./ast/traituse"),a("./ast/try"),a("./ast/unary"),a("./ast/unset"),a("./ast/usegroup"),a("./ast/useitem"),a("./ast/variable"),a("./ast/variadic"),a("./ast/while"),a("./ast/yield"),a("./ast/yieldfrom")].forEach(function(a){ +var b=a.prototype.constructor.name.toLowerCase();"_"===b[0]&&(b=b.substring(1)),f.prototype[b]=a}),b.exports=f},{"./ast/array":3,"./ast/assign":4,"./ast/bin":5,"./ast/block":6,"./ast/bool":7,"./ast/boolean":8,"./ast/break":9,"./ast/call":10,"./ast/case":11,"./ast/cast":12,"./ast/catch":13,"./ast/class":14,"./ast/classconstant":15,"./ast/clone":16,"./ast/closure":17,"./ast/coalesce":18,"./ast/constant":19,"./ast/constref":20,"./ast/continue":21,"./ast/declare":23,"./ast/do":24,"./ast/doc":25,"./ast/echo":26,"./ast/empty":27,"./ast/encapsed":28,"./ast/entry":29,"./ast/error":30,"./ast/eval":31,"./ast/exit":32,"./ast/expression":33,"./ast/for":34,"./ast/foreach":35,"./ast/function":36,"./ast/global":37,"./ast/goto":38,"./ast/halt":39,"./ast/identifier":40,"./ast/if":41,"./ast/include":42,"./ast/inline":43,"./ast/interface":44,"./ast/isset":45,"./ast/label":46,"./ast/list":47,"./ast/literal":48,"./ast/location":49,"./ast/magic":51,"./ast/method":52,"./ast/namespace":53,"./ast/new":54,"./ast/node":55,"./ast/nowdoc":56, +"./ast/number":57,"./ast/offsetlookup":58,"./ast/parameter":60,"./ast/parenthesis":61,"./ast/position":62,"./ast/post":63,"./ast/pre":64,"./ast/print":65,"./ast/program":66,"./ast/property":67,"./ast/propertylookup":68,"./ast/retif":69,"./ast/return":70,"./ast/shell":71,"./ast/silent":72,"./ast/static":74,"./ast/staticlookup":75,"./ast/string":76,"./ast/switch":77,"./ast/throw":79,"./ast/trait":80,"./ast/traitalias":81,"./ast/traitprecedence":82,"./ast/traituse":83,"./ast/try":84,"./ast/unary":85,"./ast/unset":86,"./ast/usegroup":87,"./ast/useitem":88,"./ast/variable":89,"./ast/variadic":90,"./ast/while":91,"./ast/yield":92,"./ast/yieldfrom":93}],3:[function(a,b,c){var d=a("./expression"),e="array",f=d.extends(function(a,b,c){d.apply(this,[e,c]),this.items=b,this.shortForm=a});b.exports=f},{"./expression":33}],4:[function(a,b,c){var d=a("./statement"),e="assign",f=d.extends(function(a,b,c,f){d.apply(this,[e,f]),this.operator=c,this.left=a,this.right=b});b.exports=f},{"./statement":73}],5:[function(a,b,c){"use strict"; +var d=a("./operation"),e="bin",f={"+":1,"-":1,".":1,"*":2,"/":2,"%":2},g=d.extends(function(a,b,c,g){if(d.apply(this,[e,g]),c&&"bin"===c.kind){var h=f[a],i=f[c.type];if(h&&i&&i=this.size,!this.all_tokens&&this.mode_eval?this.begin("ST_IN_SCRIPTING"):this.begin("INITIAL"),this},d.prototype.input=function(a){var b=this._input[this.offset];return b?(this.yytext+=b,this.offset++,"\r"===b&&"\n"===this._input[this.offset]&&(this.yytext+="\n",this.offset++),"\n"===b||"\r"===b?(this.yylloc.last_line=++this.yylineno, +this.yyprevcol=this.yylloc.last_column,this.yylloc.last_column=0):this.yylloc.last_column++,b):""},d.prototype.unput=function(a){if(1===a)this.offset--,"\n"===this._input[this.offset]&&"\r"===this._input[this.offset-1]&&(this.offset--,a++),"\r"===this._input[this.offset]||"\n"===this._input[this.offset]?(this.yylloc.last_line--,this.yylineno--,this.yylloc.last_column=this.yyprevcol):this.yylloc.last_column--,this.yytext=this.yytext.substring(0,this.yytext.length-a);else if(a>0)if(this.offset-=a,a0?this.conditionStack.pop():this.conditionStack[0];if(this.curCondition=this.conditionStack[this.conditionStack.length-1],this.stateCb=this["match"+this.curCondition],"function"!=typeof this.stateCb)throw new Error('Undefined condition state "'+this.curCondition+'"');return b},d.prototype.next=function(){var a;if(this._input||(this.done=!0),this.yylloc.first_offset=this.offset,this.yylloc.first_line=this.yylloc.last_line,this.yylloc.first_column=this.yylloc.last_column,this.yytext="",this.done)return this.yylloc.prev_offset=this.yylloc.first_offset,this.yylloc.prev_line=this.yylloc.first_line,this.yylloc.prev_column=this.yylloc.first_column,this.EOF;if(this.tokens.length>0?(a=this.tokens.shift(),"object"==typeof a[1]?this.setState(a[1]):this.consume(a[1]),a=a[0]):a=this.stateCb.apply(this,[]), +this.offset>=this.size&&0===this.tokens.length&&(this.done=!0),this.debug){var b=a;b="number"==typeof b?this.engine.tokens.values[b]:'"'+b+'"',console.log(b,"from "+this.yylloc.first_line+","+this.yylloc.first_column," - to "+this.yylloc.last_line+","+this.yylloc.last_column)}return a},[a("./lexer/comments.js"),a("./lexer/initial.js"),a("./lexer/numbers.js"),a("./lexer/property.js"),a("./lexer/scripting.js"),a("./lexer/strings.js"),a("./lexer/tokens.js"),a("./lexer/utils.js")].forEach(function(a){for(var b in a)d.prototype[b]=a[b]}),b.exports=d},{"./lexer/comments.js":95,"./lexer/initial.js":96,"./lexer/numbers.js":97,"./lexer/property.js":98,"./lexer/scripting.js":99,"./lexer/strings.js":100,"./lexer/tokens.js":101,"./lexer/utils.js":102}],95:[function(a,b,c){"use strict";b.exports={T_COMMENT:function(){for(;this.offset"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT;if("%"===a&&this.aspTagMode&&">"===this._input[this.offset])return this.unput(1), +this.tok.T_COMMENT}return this.tok.T_COMMENT},T_DOC_COMMENT:function(){var a=this.input(),b=this.tok.T_COMMENT;if("*"===a){if(a=this.input(),this.is_WHITESPACE()&&(b=this.tok.T_DOC_COMMENT),"/"===a)return b;this.unput(1)}for(;this.offset1&&"INITIAL"===this.conditionStack[this.conditionStack.length-1]?this.popState():this.begin("ST_IN_SCRIPTING"),this},matchINITIAL:function(){for(;this.offset"===a)return this.tok.T_OBJECT_OPERATOR;this.unput(1)}else if(this.is_LABEL_START())return this.consume_LABEL(),this.popState(),this.tok.T_STRING;return this.popState(),this.unput(1),!1},matchST_LOOKING_FOR_VARNAME:function(){var a=this.input();return this.is_LABEL_START()?(this.consume_LABEL(), +a=this.input(),this.popState(),"["===a||"}"===a?(this.begin("ST_IN_SCRIPTING"),this.unput(1),this.tok.T_STRING_VARNAME):(this.unput(this.yytext.length),!1)):(this.unput(1),this.popState(),this.begin("ST_IN_SCRIPTING"),!1)},matchST_VAR_OFFSET:function(){var a=this.input();if(this.is_NUM())return this.consume_NUM(),this.tok.T_NUM_STRING;if("]"===a)return this.popState(),"]";if("$"===a){if(this.input(),this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_VARIABLE;throw new Error("Unexpected terminal")}if(this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_STRING;if(this.is_WHITESPACE()||"\\"===a||"'"===a||"#"===a)return this.tok.T_ENCAPSED_AND_WHITESPACE;if("["===a||"{"===a||"}"===a||'"'===a||"`"===a||this.is_TOKEN())return a;throw new Error("Unexpected terminal")}}},{}],99:[function(a,b,c){b.exports={matchST_IN_SCRIPTING:function(){var a=this.input();switch(a){case" ":case"\t":case"\n":case"\r":case"\r\n":return this.T_WHITESPACE();case"#":return this.T_COMMENT();case"/":return"/"===this._input[this.offset]?this.T_COMMENT():"*"===this._input[this.offset]?(this.input(), +this.T_DOC_COMMENT()):this.consume_TOKEN();case"'":return this.T_CONSTANT_ENCAPSED_STRING();case'"':return this.ST_DOUBLE_QUOTES();case"`":return this.begin("ST_BACKQUOTE"),"`";case"?":if(!this.aspTagMode&&this.tryMatch(">")){this.input();var b=this._input[this.offset];return"\n"!==b&&"\r"!==b||this.input(),this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG}return this.consume_TOKEN();case"%":return this.aspTagMode&&">"===this._input[this.offset]?(this.input(),a=this._input[this.offset],"\n"!==a&&"\r"!==a||this.input(),this.aspTagMode=!1,this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG):this.consume_TOKEN();case"{":return this.begin("ST_IN_SCRIPTING"),"{";case"}":return this.conditionStack.length>2&&this.popState(),"}";default:if("."===a){if(this.input(),this.is_NUM())return this.consume_NUM();this.unput(1)}if(this.is_NUM())return this.consume_NUM();if(this.is_LABEL_START())return this.consume_LABEL().T_STRING();if(this.is_TOKEN())return this.consume_TOKEN()}throw new Error('Bad terminal sequence "'+a+'" at line '+this.yylineno+" (offset "+this.offset+")"); +},T_WHITESPACE:function(){for(;this.offset2&&this.appendToken(this.tok.T_ENCAPSED_AND_WHITESPACE,this.yytext.length-b),this.unput(this.yytext.length-b),this.begin("ST_DOUBLE_QUOTES"),this.yytext},isDOC_MATCH:function(){if(this._input.substring(this.offset-1,this.offset-1+this.heredoc_label.length)===this.heredoc_label){var a=this._input[this.offset-1+this.heredoc_label.length];if("\n"===a||"\r"===a||";"===a)return!0}return!1},matchST_NOWDOC:function(){if(this.isDOC_MATCH())return this.consume(this.heredoc_label.length), +this.popState(),this.tok.T_END_HEREDOC;for(var a=this._input[this.offset-1];this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES; +if(this.is_LABEL_START()){var b=this.offset,c=this.consume_VARIABLE();return this.yytext.length>this.offset-b+2?(this.appendToken(c,this.offset-b+2),this.unput(this.offset-b+2),this.tok.T_ENCAPSED_AND_WHITESPACE):c}}else if("{"===a){if(a=this.input(),"$"===a)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN)}else a=this.input();return this.tok.T_ENCAPSED_AND_WHITESPACE},consume_VARIABLE:function(){if(this.consume_LABEL(),ch=this.input(),"["==ch)return this.unput(1),this.begin("ST_VAR_OFFSET"),this.tok.T_VARIABLE;if("-"===ch){if(">"===this.input())return this.input(),this.is_LABEL_START()&&this.begin("ST_LOOKING_FOR_PROPERTY"),this.unput(3),this.tok.T_VARIABLE;this.unput(2)}else this.unput(1);return this.tok.T_VARIABLE},matchST_BACKQUOTE:function(){var a=this.input();if("$"===a){if(a=this.input(),"{"===a)return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES; +if(this.is_LABEL_START()){var b=this.consume_VARIABLE();return b}}else if("{"===a){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if("`"===a)return this.popState(),"`";for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var c=this.offset,d=this.consume_VARIABLE();return this.yytext.length>this.offset-c+2?(this.appendToken(d,this.offset-c+2),this.unput(this.offset-c+2),this.tok.T_ENCAPSED_AND_WHITESPACE):d}this.unput(1)}else if("{"===a){if(a=this.input(),"$"===a)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1), +this.tok.T_CURLY_OPEN);this.unput(1)}}a=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE},matchST_DOUBLE_QUOTES:function(){var a=this.input();if("$"===a){if(a=this.input(),"{"===a)return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var b=this.consume_VARIABLE();return b}}else if("{"===a){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if('"'===a)return this.popState(),'"';for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var c=this.offset,d=this.consume_VARIABLE();return this.yytext.length>this.offset-c+2?(this.appendToken(d,this.offset-c+2),this.unput(this.offset-c+2), +this.tok.T_ENCAPSED_AND_WHITESPACE):d}this.unput(1)}else if("{"===a){if(a=this.input(),"$"===a)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN);this.unput(1)}}a=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE}}},{}],101:[function(a,b,c){b.exports={T_STRING:function(){var a=this.yytext.toLowerCase(),b=this.keywords[a];if(!b)if("yield"===a)this.tryMatch(" from")?(this.consume(5),b=this.tok.T_YIELD_FROM):b=this.tok.T_YIELD;else if(b=this.tok.T_STRING,"b"===a||"B"===a){var c=this.input(1);if('"'===c)return this.ST_DOUBLE_QUOTES();if("'"===c)return this.T_CONSTANT_ENCAPSED_STRING();this.unput(1)}return b},consume_TOKEN:function(){var a=this._input[this.offset-1],b=this.tokenTerminals[a];return b?b.apply(this,[]):this.yytext},tokenTerminals:{$:function(){return this.offset++,this.is_LABEL_START()?(this.offset--,this.consume_LABEL(),this.tok.T_VARIABLE):(this.offset--,"$"); +},"-":function(){var a=this._input[this.offset];return">"===a?(this.begin("ST_LOOKING_FOR_PROPERTY").input(),this.tok.T_OBJECT_OPERATOR):"-"===a?(this.input(),this.tok.T_DEC):"="===a?(this.input(),this.tok.T_MINUS_EQUAL):"-"},"\\":function(){return this.tok.T_NS_SEPARATOR},"/":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_DIV_EQUAL):"/"},":":function(){return":"===this._input[this.offset]?(this.input(),this.tok.T_DOUBLE_COLON):":"},"(":function(){var a=this.offset;if(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),this.is_LABEL_START()){var b=this.yytext.length;this.consume_LABEL();var c=this.yytext.substring(b-1).toLowerCase(),d=this.castKeywords[c];if(d&&(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),")"===this._input[this.offset-1]))return d}return this.unput(this.offset-a),"("},"=":function(){var a=this._input[this.offset];return">"===a?(this.input(),this.tok.T_DOUBLE_ARROW):"="===a?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_IDENTICAL):(this.input(), +this.tok.T_IS_EQUAL):"="},"+":function(){var a=this._input[this.offset];return"+"===a?(this.input(),this.tok.T_INC):"="===a?(this.input(),this.tok.T_PLUS_EQUAL):"+"},"!":function(){return"="===this._input[this.offset]?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_NOT_IDENTICAL):(this.input(),this.tok.T_IS_NOT_EQUAL):"!"},"?":function(){return"?"===this._input[this.offset]?(this.input(),this.tok.T_COALESCE):"?"},"<":function(){var a=this._input[this.offset];return"<"===a?(a=this._input[this.offset+1],"="===a?(this.consume(2),this.tok.T_SL_EQUAL):"<"===a&&this.is_HEREDOC()?this.tok.T_START_HEREDOC:(this.input(),this.tok.T_SL)):"="===a?(this.input(),">"===this._input[this.offset]?(this.input(),this.tok.T_SPACESHIP):this.tok.T_IS_SMALLER_OR_EQUAL):">"===a?(this.input(),this.tok.T_IS_NOT_EQUAL):"<"},">":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_IS_GREATER_OR_EQUAL):">"===a?(a=this._input[this.offset+1],"="===a?(this.consume(2),this.tok.T_SR_EQUAL):(this.input(), +this.tok.T_SR)):">"},"*":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_MUL_EQUAL):"*"===a?(this.input(),"="===this._input[this.offset]?(this.input(),this.tok.T_POW_EQUAL):this.tok.T_POW):"*"},".":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_CONCAT_EQUAL):"."===a&&"."===this._input[this.offset+1]?(this.consume(2),this.tok.T_ELLIPSIS):"."},"%":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_MOD_EQUAL):"%"},"&":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_AND_EQUAL):"&"===a?(this.input(),this.tok.T_BOOLEAN_AND):"&"},"|":function(){var a=this._input[this.offset];return"="===a?(this.input(),this.tok.T_OR_EQUAL):"|"===a?(this.input(),this.tok.T_BOOLEAN_OR):"|"},"^":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_XOR_EQUAL):"^"}}}},{}],102:[function(a,b,c){var d=";:,.\\[]()|^&+-/*=%!~$<>?@";b.exports={is_NUM:function(){var a=this._input.charCodeAt(this.offset-1);return a>47&&a<58; +},is_LABEL:function(){var a=this._input.charCodeAt(this.offset-1);return a>96&&a<123||a>64&&a<91||95===a||a>47&&a<58||a>126},is_LABEL_START:function(){var a=this._input.charCodeAt(this.offset-1);return a>96&&a<123||a>64&&a<91||95===a||a>126},consume_LABEL:function(){for(;this.offset47&&a<58||a>64&&a<71||a>96&&a<103}}},{}],103:[function(a,b,c){function d(a){return"."!=a&&","!=a&&!isNaN(parseFloat(a))&&isFinite(a)}var e=function(a,b){this.lexer=a,this.ast=b,this.tok=a.tok,this.EOF=a.EOF, +this.token=null,this.prev=null,this.debug=!1,this.extractDoc=!1,this.suppressErrors=!1,this.entries={VARIABLE:[this.tok.T_VARIABLE,"$","&",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_NAMESPACE,this.tok.T_STATIC],SCALAR:[this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C,'"','b"','B"',"-",this.tok.T_NS_SEPARATOR],T_MAGIC_CONST:[this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C],T_MEMBER_FLAGS:[this.tok.T_PUBLIC,this.tok.T_PRIVATE,this.tok.T_PROTECTED,this.tok.T_STATIC,this.tok.T_ABSTRACT,this.tok.T_FINAL],EOS:[";",this.tok.T_CLOSE_TAG,this.EOF,this.tok.T_INLINE_HTML],EXPR:["@","-","+","!","~","(","`",this.tok.T_LIST,this.tok.T_CLONE,this.tok.T_INC,this.tok.T_DEC,this.tok.T_NEW,this.tok.T_ISSET,this.tok.T_EMPTY,this.tok.T_INCLUDE,this.tok.T_INCLUDE_ONCE,this.tok.T_REQUIRE,this.tok.T_REQUIRE_ONCE,this.tok.T_EVAL,this.tok.T_INT_CAST,this.tok.T_DOUBLE_CAST,this.tok.T_STRING_CAST,this.tok.T_ARRAY_CAST,this.tok.T_OBJECT_CAST,this.tok.T_BOOL_CAST,this.tok.T_UNSET_CAST,this.tok.T_EXIT,this.tok.T_PRINT,this.tok.T_YIELD,this.tok.T_STATIC,this.tok.T_FUNCTION,this.tok.T_VARIABLE,"$",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_STRING,this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C] +}};e.prototype.getTokenName=function(a){return d(a)?a==this.EOF?"the end of file (EOF)":this.lexer.engine.tokens.values[a]:"'"+a+"'"},e.prototype.parse=function(a,b){this._errors=[],this.filename=b||"eval",this.currentNamespace=[""],this.lexer.setInput(a),this.lexer.comment_tokens=this.extractDoc,this.length=this.lexer._input.length,this.innerList=!1;var c=this.ast.prepare("program",this),d=[];for(this.nextWithComments();this.token!=this.EOF;){var e=this.read_start();null!==e&&void 0!==e&&(Array.isArray(e)?d=d.concat(e):d.push(e))}return c(d,this._errors)},e.prototype.raiseError=function(a,b,c,d){if(a+=" on line "+this.lexer.yylloc.first_line,!this.suppressErrors){var e=new SyntaxError(a,this.filename,this.lexer.yylloc.first_line);throw e.lineNumber=this.lexer.yylloc.first_line,e.fileName=this.filename,e.columnNumber=this.lexer.yylloc.first_column,e}var f=this.ast.prepare("error",this)(a,d,this.lexer.yylloc.first_line,c);return this._errors.push(f),f},e.prototype.error=function(a){var b="Parse Error : syntax error"; +if(token=this.getTokenName(this.token),this.token!==this.EOF){if(d(this.token)){var c=this.text();c.length>10&&(c=c.substring(0,7)+"..."),token="'"+c+"' ("+token+")"}b+=", unexpected "+token}var e="";return a&&!Array.isArray(a)&&((d(a)||1===a.length)&&(e=", expecting "+this.getTokenName(a)),b+=e),this.token!==this.EOF,this.raiseError(b,e,a,token)},e.prototype.node=function(a){return this.ast.prepare(a,this)},e.prototype.expectEndOfStatement=function(){if(";"===this.token)this.nextWithComments(),this.token===this.tok.T_CLOSE_TAG&&this.nextWithComments();else if(this.token===this.tok.T_CLOSE_TAG)this.nextWithComments();else if(this.token!==this.tok.T_INLINE_HTML&&this.token!==this.EOF)return this.error(";"),!1;return!0};var f=["parser.next","parser.nextWithComments"];e.prototype.showlog=function(){for(var a,b=(new Error).stack.split("\n"),c=2;c"+this.lexer.yytext+"< @-->"+a), +this},e.prototype.expect=function(a){if(Array.isArray(a)){if(a.indexOf(this.token)===-1)return this.error(a),!1}else if(this.token!=a)return this.error(a),!1;return!0},e.prototype.text=function(){return this.lexer.yytext},e.prototype.next=function(){return this.debug?(this.showlog(),this.debug=!1,this.nextWithComments().ignoreComments(),this.debug=!0):this.nextWithComments().ignoreComments(),this},e.prototype.ignoreComments=function(){for(this.debug&&this.showlog();this.token===this.tok.T_COMMENT||this.token===this.tok.T_DOC_COMMENT;)this.nextWithComments();return this},e.prototype.nextWithComments=function(){return this.prev=[this.lexer.yylloc.first_line,this.lexer.yylloc.first_column,this.lexer.offset],this.token=this.lexer.lex()||this.EOF,this.debug&&this.showlog(),this},e.prototype.is=function(a){return Array.isArray(a)?a.indexOf(this.token)!==-1:this.entries[a].indexOf(this.token)!=-1},[a("./parser/array.js"),a("./parser/class.js"),a("./parser/comment.js"),a("./parser/expr.js"),a("./parser/function.js"),a("./parser/if.js"),a("./parser/loops.js"),a("./parser/main.js"),a("./parser/namespace.js"),a("./parser/scalar.js"),a("./parser/statement.js"),a("./parser/switch.js"),a("./parser/try.js"),a("./parser/utils.js"),a("./parser/variable.js")].forEach(function(a){ +for(var b in a)e.prototype[b]=a[b]}),b.exports=e},{"./parser/array.js":104,"./parser/class.js":105,"./parser/comment.js":106,"./parser/expr.js":107,"./parser/function.js":108,"./parser/if.js":109,"./parser/loops.js":110,"./parser/main.js":111,"./parser/namespace.js":112,"./parser/scalar.js":113,"./parser/statement.js":114,"./parser/switch.js":115,"./parser/try.js":116,"./parser/utils.js":117,"./parser/variable.js":118}],104:[function(a,b,c){var d="array",e="entry";b.exports={read_array:function(){var a=null,b=!1,c=[],e=this.node(d);if(this.token===this.tok.T_ARRAY?(this.next().expect("("),a=")"):(b=!0,a="]"),this.next().token!=a)for(;this.token!=this.EOF&&(c.push(this.read_array_pair_list()),","==this.token)&&(this.next(),this.token!==a););return this.expect(a),this.next(),e(b,c)},read_array_pair_list:function(){var a=this.node(e),b=null,c=null;if("&"===this.token)c=this.next().read_variable(!0,!1,!0);else{var d=this.read_expr();this.token===this.tok.T_DOUBLE_ARROW?(b=d,c="&"===this.next().token?this.next().read_variable(!0,!1,!0):this.read_expr()):c=d; +}return a(b,c)},read_dim_offset:function(){return"]"!=this.token&&this.read_expr()}}},{}],105:[function(a,b,c){b.exports={read_class:function(a){var b=this.node("class");this.expect(this.tok.T_CLASS),this.next().expect(this.tok.T_STRING);var c,d=this.text(),e=null,f=null;return this.next().token==this.tok.T_EXTENDS&&(e=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(f=this.next().read_name_list()),this.expect("{"),c=this.nextWithComments().read_class_body(),b(d,e,f,c,a)},read_class_scope:function(){var a=this.token;return a==this.tok.T_FINAL?(this.next(),[0,0,2]):a==this.tok.T_ABSTRACT?(this.next(),[0,0,1]):[0,0,0]},read_class_body:function(){for(var a=[];this.token!==this.EOF&&"}"!==this.token;)if(this.token!==this.tok.T_COMMENT)if(this.token!==this.tok.T_DOC_COMMENT)if(this.token!==this.tok.T_USE){var b=this.read_member_flags(!1);if(this.token!==this.tok.T_CONST)if(this.token===this.tok.T_VAR&&(this.next().expect(this.tok.T_VARIABLE),b[0]=b[1]=0),this.token===this.tok.T_VARIABLE){var c=this.read_variable_list(b); this.expect(";"),this.nextWithComments(),a=a.concat(c)}else this.token===this.tok.T_FUNCTION?a.push(this.read_function(!1,b)):(this.error([this.tok.T_CONST,this.tok.T_VARIABLE,this.tok.T_FUNCTION]),this.next());else{var d=this.read_constant_list(b);this.expect(";"),this.nextWithComments(),a=a.concat(d)}}else a=a.concat(this.next().read_trait_use_statement());else a.push(this.read_doc_comment());else a.push(this.read_comment());return this.expect("}"),this.nextWithComments(),a},read_variable_list:function(a){return this.read_list(function(){var b=this.node("property");this.expect(this.tok.T_VARIABLE);var c=this.text();return this.next(),";"===this.token||","===this.token?b(c,null,a):"="===this.token?b(c,this.next().read_expr(),a):(this.expect([",",";","="]),b(c,null,a))},",")},read_constant_list:function(a){return this.expect(this.tok.T_CONST)&&this.next(),this.read_list(function(){var b=this.node("classconstant"),c=null,d=null;return this.expect(this.tok.T_STRING)&&(c=this.text(),this.next()),this.expect("=")&&(d=this.next().read_expr()), b(c,d,a)},",")},read_member_flags:function(a){var b=[-1,-1,-1];if(this.is("T_MEMBER_FLAGS")){var c=0,d=0;do{switch(this.token){case this.tok.T_PUBLIC:c=0,d=0;break;case this.tok.T_PROTECTED:c=0,d=1;break;case this.tok.T_PRIVATE:c=0,d=2;break;case this.tok.T_STATIC:c=1,d=1;break;case this.tok.T_ABSTRACT:c=2,d=1;break;case this.tok.T_FINAL:c=2,d=2}a&&(0==c&&2==d?(this.expect([this.tok.T_PUBLIC,this.tok.T_PROTECTED]),d=-1):2==c&&1==d&&(this.error(),d=-1)),b[c]!==-1?this.error():d!==-1&&(b[c]=d)}while(this.next().is("T_MEMBER_FLAGS"))}return b[0]==-1&&(b[0]=0),b[1]==-1&&(b[1]=0),b[2]==-1&&(b[2]=0),b},read_interface:function(){var a=this.node("interface"),b=null,c=null,d=null;return this.expect(this.tok.T_INTERFACE)&&this.next(),this.expect(this.tok.T_STRING)&&(b=this.text(),this.next()),this.token===this.tok.T_EXTENDS&&(d=this.next().read_name_list()),this.expect("{")&&(c=this.next().read_interface_body()),a(b,d,c)},read_interface_body:function(){for(var a=[];this.token!==this.EOF&&"}"!==this.token;)if(this.token!==this.tok.T_COMMENT)if(this.token!==this.tok.T_DOC_COMMENT){ var b=this.read_member_flags(!0);if(this.token==this.tok.T_CONST){var c=this.read_constant_list(b);this.expect(";")&&this.nextWithComments(),a=a.concat(c)}else if(this.token===this.tok.T_FUNCTION){var d=this.read_function_declaration(2,b);d.parseFlags(b),a.push(d),this.expect(";")&&this.nextWithComments()}else this.error([this.tok.T_CONST,this.tok.T_FUNCTION]),this.next()}else a.push(this.read_doc_comment());else a.push(this.read_comment());return this.expect("}")&&this.next(),a},read_trait:function(a){var b=this.node("trait"),c=null,d=null,e=null,f=null;return this.expect(this.tok.T_TRAIT)&&this.next(),this.expect(this.tok.T_STRING)&&(c=this.text()),this.next().token==this.tok.T_EXTENDS&&(d=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(e=this.next().read_name_list()),this.expect("{")&&(f=this.next().read_class_body()),b(c,d,e,f)},read_trait_use_statement:function(){for(var a=this.node("traituse"),b=[this.read_namespace_name()],c=null;","===this.token;)b.push(this.next().read_namespace_name()); -if("{"===this.token){for(c=[];this.next().token!==this.EOF&&"}"!==this.token;)c.push(this.read_trait_use_alias()),this.expect(";");this.expect("}")&&this.nextWithComments()}else this.expect(";")&&this.nextWithComments();return a(b,c)},read_trait_use_alias:function(){var a=this.node(),b=null,c=this.read_namespace_name();if(this.token===this.tok.T_DOUBLE_COLON?this.next().expect(this.tok.T_STRING)&&(b=c,c=this.text(),this.next()):c=c.name,this.token===this.tok.T_INSTEADOF)return a("traitprecedence",b,c,this.next().read_name_list());if(this.token===this.tok.T_AS){var d=!1,e=null;return this.next().is("T_MEMBER_FLAGS")&&(d=this.read_member_flags()),this.token===this.tok.T_STRING?(e=this.text(),this.next()):d===!1&&this.expect(this.tok.T_STRING),a("traitalias",b,c,e,d)}return this.expect([this.tok.T_AS,this.tok.T_INSTEADOF]),a("traitalias",b,c,null,null)}}},{}],77:[function(a,b,c){var d=/^(\s*\*[ \t]*|[ \t]*)(.*)$/gm;b.exports={read_comment:function(){var a=this.node("doc"),b=[];do{var c=this.text();"#"===c[0]?c=c.substring(1):(c=c.substring(2), -"*/"===c.substring(c.length-2)&&(c=c.substring(0,c.length-2))),b.push(c.trim())}while(this.nextWithComments().token===this.tok.T_COMMENT);return a(!1,b)},read_doc_comment:function(){var a=this.node("doc"),b=this.text();b=b.substring(2,b.length-2);var c=[];b=b.split(d);for(var e=2;e>",a,this.next().read_expr()];case this.tok.T_BOOLEAN_OR:case this.tok.T_LOGICAL_OR:return["bool","|",a,this.next().read_expr()];case this.tok.T_BOOLEAN_AND:case this.tok.T_LOGICAL_AND:return["bool","&",a,this.next().read_expr()];case this.tok.T_LOGICAL_XOR:return["bool","^",a,this.next().read_expr()];case this.tok.T_IS_IDENTICAL:return["bool","=",a,this.next().read_expr()];case this.tok.T_IS_NOT_IDENTICAL:return["bool","!=",a,this.next().read_expr()];case this.tok.T_IS_EQUAL:return["bool","~",a,this.next().read_expr()];case this.tok.T_IS_NOT_EQUAL:return["bool","!~",a,this.next().read_expr()];case"<":return["bool","<",a,this.next().read_expr()];case">":return["bool",">",a,this.next().read_expr()];case this.tok.T_IS_SMALLER_OR_EQUAL:return["bool","<=",a,this.next().read_expr()];case this.tok.T_IS_GREATER_OR_EQUAL:return["bool",">=",a,this.next().read_expr()];case this.tok.T_SPACESHIP:return["bool","<=>",a,this.next().read_expr()];case this.tok.T_INSTANCEOF: -return["bool","?",a,this.next().read_expr()];case this.tok.T_COALESCE:return this.node("coalesce")(a,this.next().read_expr());case"?":var b=null;return":"!==this.next().token&&(b=this.read_expr()),this.expect(":")&&this.next(),["retif",a,b,this.read_expr()]}return a},read_expr_item:function(){switch(this.token){case"@":return["silent",this.next().read_expr()];case"-":var a=this.node();return this.next(),this.token===this.tok.T_LNUMBER||this.token===this.tok.T_DNUMBER?(a=a("number","-"+this.text()),this.next(),a):a("unary","-",this.read_expr());case"+":case"!":case"~":return this.node("unary")(this.token,this.read_expr());case"(":var b=this.next().read_expr();return this.expect(")")&&this.next(),this.token===this.tok.T_OBJECT_OPERATOR?this.recursive_variable_chain_scan(b,!1):this.token===this.tok.T_CURLY_OPEN||"["===this.token?this.read_dereferencable(b):"("===this.token?this.node("call")(b,this.read_function_argument_list()):b;case"`":var a=this.node("shell"),b=this.next().read_encapsed_string("`");return a(b); -case this.tok.T_LIST:var a=this.node("list"),c=null,d=this.innerList;d||(c=this.node("assign")),this.next().expect("(")&&this.next(),this.innerList||(this.innerList=!0);for(var e=this.read_assignment_list(),f=!1,g=0;g>",b,this.next().read_expr()]];case this.tok.T_INC:var a=this.node("post");return this.next(),a("+",b);case this.tok.T_DEC:var a=this.node("post");return this.next(),a("+",b)}else if(this.is("SCALAR"))for(b=this.read_scalar();this.token!==this.EOF;)if(this.token===this.tok.T_OBJECT_OPERATOR)b=this.recursive_variable_chain_scan(b,!1);else if(this.token===this.tok.T_CURLY_OPEN||"["===this.token)b=this.read_dereferencable(b);else{ -if("("!==this.token)return b;b=this.node("call")(b,this.read_function_argument_list())}else b=this.error("EXPR"),this.next();return b},read_new_expr:function(){var a=this.node("new");if(this.token===this.tok.T_CLASS){var b=null,c=null,d=null;return this.next().token==this.tok.T_EXTENDS&&(b=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(c=this.next().read_name_list()),this.expect("{")&&(d=this.next().read_class_body()),a(!1,b,c,d)}var e=this.read_class_name_reference(),f=[];return"("===this.token&&(f=this.read_function_argument_list()),a(e,f)},read_class_name_reference:function(){if("\\"===this.token||this.token===this.tok.T_STRING){var a=this.read_namespace_name();return a=this.token===this.tok.T_DOUBLE_COLON?this.read_static_getter(a):["ns",a]}return this.is("VARIABLE")?this.read_variable(!0,!1,!1):void this.expect([this.tok.T_STRING,"VARIABLE"])},read_assignment_list:function(){return this.read_list(this.read_assignment_list_element,",")},read_assignment_list_element:function(){if(","===this.token||")"===this.token)return null; -var a=this.read_expr_item();return this.token===this.tok.T_DOUBLE_ARROW&&(a=["key",a,this.next().read_expr_item()]),a}}},{}],79:[function(a,b,c){b.exports={is_reference:function(){return"&"==this.token&&(this.next(),!0)},is_variadic:function(){return this.token===this.tok.T_ELLIPSIS&&(this.next(),!0)},read_function:function(a,b){var c=this.read_function_declaration(a?1:b?2:0);return b&&1==b[2]?(c.parseFlags(b),this.expect(";")&&this.nextWithComments()):(this.expect("{")&&(c.body=this.read_code_block(!1)),b&&c.parseFlags(b)),c},read_function_declaration:function(a){var b="function";1===a?b="closure":2===a&&(b="method");var c=this.node(b);this.expect(this.tok.T_FUNCTION)&&this.next();var d=this.is_reference(),e=!1,f=[],g=!1;1!==a&&this.expect(this.tok.T_STRING)&&(e=this.text(),this.next()),this.expect("(")&&this.next();var h=this.read_parameter_list();return this.expect(")")&&this.next(),1===a&&this.token===this.tok.T_USE&&(this.next().expect("(")&&this.next(),f=this.read_list(this.read_lexical_var,","),this.expect(")")&&this.next()), -":"===this.token&&(g=this.next().read_type()),1===a?c(h,d,f,g):c(e,h,d,g)},read_lexical_var:function(){var a=[!1,null];return"&"===this.token&&(a[0]=!0,this.next()),this.token===this.tok.T_VARIABLE?(a[1]=this.text(),this.next()):this.expect(["&",this.tok.T_VARIABLE]),a},read_parameter_list:function(){var a=[];if(")"!=this.token)for(;this.token!=this.EOF;){if(a.push(this.read_parameter()),","!=this.token){if(")"==this.token)break;this.error([",",")"]);break}this.next()}return a},read_parameter:function(){var a=this.node("parameter"),b=null,c=null,d=this.read_type(),e=this.is_reference(),f=this.is_variadic();return this.expect(this.tok.T_VARIABLE)&&(b=this.text(),this.next()),"="==this.token&&(c=this.next().read_expr()),a(b,d,c,e,f)},read_function_argument_list:function(){var a=[];if(this.expect("(")&&this.next(),")"!==this.token)for(;this.token!=this.EOF&&(a.push(this.read_argument_list()),","===this.token);)this.next();return this.expect(")")&&this.next(),a},read_argument_list:function(){return this.token===this.tok.T_ELLIPSIS?this.node("variadic")(this.next().read_expr()):this.read_expr(); -},read_type:function(){switch(this.token){case this.tok.T_ARRAY:return this.next(),["array"];case this.tok.T_NS_SEPARATOR:case this.tok.T_STRING:return this.read_namespace_name();case this.tok.T_CALLABLE:return this.next(),["callable"];default:return null}}}},{}],80:[function(a,b,c){b.exports={read_if:function(){var a=this.node("if"),b=null,c=null,d=!1,e=null;if(e=this.read_if_expr(),":"===this.token){d=!0,this.next(),b=this.node("block");for(var f=[];this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;){if(this.ignoreComments(),this.token===this.tok.T_ELSEIF){c=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){c=this.next().read_else_short();break}f.push(this.read_inner_statement())}b=b(null,f),this.ignoreComments().expect(this.tok.T_ENDIF)&&this.next(),this.expectEndOfStatement()}else b=this.read_statement(),this.ignoreComments(),this.token===this.tok.T_ELSEIF?c=this.next().read_if():this.token===this.tok.T_ELSE&&(c=this.next().read_statement());return a(e,b,c,d)},read_if_expr:function(){ -this.expect("(")&&this.next();var a=this.read_expr();return this.expect(")")&&this.next(),a},read_elseif_short:function(){var a=this.node("if"),b=null,c=null,d=null,e=[];for(c=this.read_if_expr(),this.expect(":")&&this.next(),d=this.node("block");this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;){if(this.token===this.tok.T_ELSEIF){b=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){b=this.next().read_else_short();break}e.push(this.read_inner_statement())}return d=d(null,e),a(c,d,b,!0)},read_else_short:function(){this.expect(":")&&this.next();for(var a=this.node("block"),b=[];this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;)b.push(this.read_inner_statement());return a(null,b)}}},{}],81:[function(a,b,c){"use strict";b.exports={read_while:function(){var a=this.node("while"),b=null,c=null,d=!1;return this.expect("(")&&this.next(),b=this.read_expr(),this.expect(")")&&this.next(),":"===this.token?(d=!0,c=this.read_short_form(this.tok.T_ENDWHILE)):c=this.read_statement(),a(b,c,d)},read_do:function(){ -var a=this.node("do"),b=null,c=null;return c=this.read_statement(),this.expect(this.tok.T_WHILE)&&(this.next().expect("(")&&this.next(),b=this.read_expr(),this.expect(")")&&this.next(),this.expect(";")&&this.next()),a(b,c)},read_for:function(){var a=this.node("for"),b=[],c=[],d=[],e=null,f=!1;return this.expect("(")&&this.next(),";"!==this.token?(b=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),";"!==this.token?(c=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),")"!==this.token?(d=this.read_list(this.read_expr,","),this.expect(")")&&this.next()):this.next(),":"===this.token?(f=!0,e=this.read_short_form(this.tok.T_ENDFOR)):e=this.read_statement(),a(b,c,d,e,f)},read_foreach:function(){var a=this.node("foreach"),b=null,c=null,d=null,e=null,f=!1;return this.expect("(")&&this.next(),b=this.read_expr(),this.expect(this.tok.T_AS)&&(this.next(),d=this.read_foreach_variable(),this.token===this.tok.T_DOUBLE_ARROW&&(c=d,d=this.next().read_foreach_variable())),this.expect(")")&&this.next(), -":"===this.token?(f=!0,e=this.read_short_form(this.tok.T_ENDFOREACH)):e=this.read_statement(),a(b,c,d,e,f)},read_foreach_variable:function(){if(this.token===this.tok.T_LIST){var a=this.node("list");this.next().expect("(")&&this.next();var b=this.read_assignment_list();return this.expect(")")&&this.next(),a(b)}return"["===this.token?this.read_array():this.read_variable(!1,!1,!1)}}},{}],82:[function(a,b,c){b.exports={read_start:function(){return this.token==this.tok.T_NAMESPACE?this.read_namespace():this.read_top_statement()}}},{}],83:[function(a,b,c){b.exports={read_namespace:function(){this.expect(this.tok.T_NAMESPACE)&&this.next();var a=this.node("namespace");if("{"==this.token)return this.currentNamespace=[""],a([""],this.read_code_block(!0));this.token===this.tok.T_NAMESPACE&&(this.error(["{",this.tok.T_STRING]),this.next());var b=this.read_namespace_name();if(";"==this.token){this.currentNamespace=b;var c=this.nextWithComments().read_top_statements();return this.expect(this.EOF),a(b,c)}if("{"==this.token)return this.currentNamespace=b, -a(b,this.read_code_block(!0));if("("===this.token)return this.node("call")(["ns",b.slice(1)],this.read_function_argument_list());this.error(["{",";"]),this.currentNamespace=b;var c=this.read_top_statements();return this.expect(this.EOF),a(b,c)},read_namespace_name:function(){var a=this.node("identifier");return this.token===this.tok.T_NAMESPACE&&this.next().expect(this.tok.T_NS_SEPARATOR)&&this.next(),a(this.read_list(this.tok.T_STRING,this.tok.T_NS_SEPARATOR,!0))},read_use_statements:function(){for(var a=[];this.token!==this.EOF&&(this.expect(this.tok.T_USE)&&this.next().read_list(this.read_use_statement_mixed,",").forEach(function(b){Array.isArray(b)?a=a.concat(b):a.push(b)}),this.token===this.tok.T_USE););return a},read_inline_use_declaration:function(a){for(var b=[];this.token!==this.EOF;){var c=this.node("use"),d=this.read_use_statement(a[3]!==!1);if(this.token===this.tok.T_AS&&(this.next().expect(this.tok.T_STRING),d[1]=this.text(),this.next()),d[0]=a[0].concat(d[0]),a[2]!==!1&&(d[2]=a[2]),b.push(c.apply(this,d)), -","!==this.token)break;this.next()}return b},read_use_statement_mixed:function(){var a=this.node("use"),b=this.read_use_statement();if(this.token===this.tok.T_AS)this.next().expect(this.tok.T_STRING)&&(b[1]=this.text(),this.next());else if("{"===this.token)return b=this.next().read_inline_use_declaration(b),this.expect("}")&&this.next(),b;return a.apply(this,b)},read_use_statement:function(a){var b=!1;a||this.token!==this.tok.T_FUNCTION&&this.token!==this.tok.T_CONST||(b=this.token===this.tok.T_FUNCTION?"function":"constant",this.next());var c=this.read_namespace_name();return[c,c[c.length-1],b]}}},{}],84:[function(a,b,c){var d={"\\r":"\r","\\n":"\n","\\t":"\t","\\v":String.fromCharCode(11),"\\e":String.fromCharCode(27),"\\f":String.fromCharCode(12),"\\\\":"\\","\\$":"$",'\\"':'"',"\\'":"'"};b.exports={resolve_special_chars:function(a){return a.replace(/\\[rntvef"'\\\$]/g,function(a){return d[a]})},read_scalar:function(){if(this.is("T_MAGIC_CONST"))return this.get_magic_constant();switch(this.token){case this.tok.T_CONSTANT_ENCAPSED_STRING: -var a=this.node("string"),b=this.text(),c=!1,d="b"===a[0]||"B"===a[0];return d?(c='"'===b[1],b=b.substring(2,b.length-1)):(c='"'===b[0],b=b.substring(1,b.length-1)),a=a(c,this.resolve_special_chars(b)),d&&(a=["cast","binary",a]),this.next(),this.token===this.tok.T_DOUBLE_COLON?this.read_static_getter(a):a;case this.tok.T_START_HEREDOC:return this.next().read_encapsed_string(this.tok.T_END_HEREDOC);case'"':return this.next().read_encapsed_string('"');case'b"':case'B"':return["cast","binary",this.next().read_encapsed_string('"')];case"-":case this.tok.T_LNUMBER:case this.tok.T_DNUMBER:var e=this.node("number"),a=this.text();return"-"===this.token&&(this.next().expect([this.tok.T_LNUMBER,this.tok.T_DNUMBER]),a+=this.text()),e=e(a),this.next(),e;case this.tok.T_NAMESPACE:case this.tok.T_NS_SEPARATOR:case this.tok.T_STRING:var a=this.read_namespace_name(),e=["constant",a];for(this.token==this.tok.T_DOUBLE_COLON&&this.next().expect([this.tok.T_STRING,this.tok.T_CLASS])&&(e[1]=[a,this.text()],this.next());"["===this.token;)e=["offset",e,this.next().read_expr()], -this.expect("]")&&this.next();return e;case this.tok.T_ARRAY:case"[":return this.read_array();default:var f=this.error("SCALAR");return this.next(),f}},read_dereferencable:function(a){var b;return"["===this.token?(b=["offset",a,this.next().read_expr()],this.expect("]")&&this.next()):this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES&&(b=["offset",a,this.read_encapsed_string_item()]),b},read_encapsed_string_item:function(){var a=null;return this.token===this.tok.T_ENCAPSED_AND_WHITESPACE?(a=this.node("string")(!1,this.text()),this.next()):this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES?(this.next().token===this.tok.T_STRING_VARNAME?(a=["var",this.text()],"["===this.next().token&&(a=["offset",a,this.next().read_expr()],this.expect("]")&&this.next())):a=this.read_expr(),this.expect("}")&&this.next()):this.token===this.tok.T_CURLY_OPEN?(a=this.next().read_variable(!1,!1,!1),this.expect("}")&&this.next()):"["===this.token?(a=["offset",a,this.next().read_expr()],this.expect("]")&&this.next()):this.token===this.tok.T_VARIABLE?a=this.read_variable(!1,!0,!1):this.expect([this.tok.T_VARIABLE,this.tok.T_CURLY_OPEN,this.tok.T_DOLLAR_OPEN_CURLY_BRACES,this.tok.T_ENCAPSED_AND_WHITESPACE]), -a},read_encapsed_string:function(a){if(this.token===a)return this.next(),null;var b=this.read_encapsed_string_item();if(this.token===a)return this.next(),b;for(var c=["bin",".",b,this.read_encapsed_string_item()];this.token!==a;)c[3]=["bin",".",c[3],this.read_encapsed_string_item()];return this.expect(a)&&this.next(),c},get_magic_constant:function(){var a=this.node("magic"),b=this.text();return this.next(),a(b)}}},{}],85:[function(a,b,c){b.exports={read_top_statements:function(){for(var a=[];this.token!==this.EOF&&"}"!==this.token;){var b=this.read_top_statement();b&&(Array.isArray(b)?a=a.concat(b):a.push(b))}return a},read_top_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1);case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var a=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(a):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]);case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT: -return this.read_trait();case this.tok.T_USE:var b=this.read_use_statements();return this.expect(";")&&this.nextWithComments(),b;case this.tok.T_CONST:return this.next().read_const_list();case this.tok.T_NAMESPACE:return this.read_namespace();case this.tok.T_HALT_COMPILER:var c=this.node("halt");return this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),this.expect(";"),this.lexer.done=!0,c(this.lexer._input.substring(this.lexer.offset));default:return this.read_statement()}},read_inner_statements:function(){for(var a=[];this.token!=this.EOF&&"}"!==this.token;){var b=this.read_inner_statement();b&&(Array.isArray(b)?a=a.concat(b):a.push(b))}return a},read_const_list:function(){var a=this.read_list(function(){this.expect(this.tok.T_STRING);var a=this.node("constant"),b=this.text();return this.next().expect("=")?a(b,this.next().read_expr()):a(b,null)},",",!1);return this.expectEndOfStatement(),a},read_declare_list:function(){return this.read_list(function(){this.expect(this.tok.T_STRING);var a=this.text(); -return this.next().expect("=")?[a,this.next().read_expr()]:[a,null]},",")},read_inner_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1);case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var a=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(a):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]);case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT:return this.read_trait();case this.tok.T_HALT_COMPILER:this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),this.expect(";")&&this.next(),this.raiseError("__HALT_COMPILER() can only be used from the outermost scope");default:return this.read_statement()}},read_statement:function(){switch(this.token){case"{":return this.read_code_block(!1);case this.tok.T_IF:return this.next().read_if();case this.tok.T_SWITCH:return this.read_switch();case this.tok.T_FOR:return this.next().read_for();case this.tok.T_FOREACH:return this.next().read_foreach(); -case this.tok.T_WHILE:return this.next().read_while();case this.tok.T_DO:return this.next().read_do();case this.tok.T_COMMENT:return this.read_comment();case this.tok.T_DOC_COMMENT:return this.read_doc_comment();case this.tok.T_RETURN:var a=this.node("return"),b=null;return this.next().is("EOS")||(b=this.read_expr()),this.expectEndOfStatement(),a(b);case this.tok.T_BREAK:var a=this.node("break");return this.next().expectEndOfStatement(),a();case this.tok.T_CONTINUE:var a=this.node("continue");return this.next().expectEndOfStatement(),a();case this.tok.T_GLOBAL:var c=this.next().read_list(this.read_simple_variable,",");return this.expectEndOfStatement(),["global",c];case this.tok.T_STATIC:var d=[this.token,this.lexer.getState()],a=this.node("static");if(this.next().token===this.tok.T_DOUBLE_COLON){this.lexer.tokens.push(d);var b=this.next().read_expr();return this.expect(";")&&this.nextWithComments(),b}var c=this.read_list(function(){var a=null,b=null;return this.expect(this.tok.T_VARIABLE)&&(b=this.text(),this.next()), -"="===this.token&&(a=this.next().read_expr()),[b,a]},",");return this.expectEndOfStatement(),a("declare",c);case this.tok.T_ECHO:var a=this.node("echo"),e="("===this.next().token;e&&this.next();var f=this.read_list(this.read_expr,",");return e&&this.expect(")")&&this.next(),this.expectEndOfStatement(),a(f);case this.tok.T_INLINE_HTML:var a=this.node("inline")(this.text());return this.next(),a;case this.tok.T_UNSET:var a=this.node("unset");this.next().expect("(")&&this.next();var c=this.read_list(this.read_variable,",");return this.expect(")")&&this.next(),this.expect(";")&&this.nextWithComments(),a(c);case this.tok.T_DECLARE:var g,h,a=this.node("declare");if(this.next().expect("(")&&this.next(),g=this.read_declare_list(),this.expect(")")&&this.nextWithComments(),":"===this.token){for(h=[],this.next();this.token!=this.EOF&&this.token!==this.tok.T_ENDDECLARE;)h.push(this.read_statement());this.ignoreComments().expect(this.tok.T_ENDDECLARE)&&this.next(),this.expectEndOfStatement()}else h=this.read_statement();return a(g,h); -case this.tok.T_TRY:return this.read_try();case this.tok.T_THROW:var a=this.node("throw"),b=this.next().read_expr();return this.expectEndOfStatement(),a(b);case";":case this.tok.T_CLOSE_TAG:return this.next(),null;case this.tok.T_STRING:var d=[this.token,this.lexer.getState()],i=this.text();if(":"===this.next().token){var a=this.node("label");return this.next(),a(i)}this.lexer.tokens.push(d);var b=this.next().read_expr();return this.expect([";",this.tok.T_CLOSE_TAG])&&this.nextWithComments(),b;case this.tok.T_GOTO:var a=this.node("goto"),i=null;return this.next().expect(this.tok.T_STRING)&&(i=this.text(),this.next().expectEndOfStatement()),a(i);default:var b=this.read_expr();return this.expectEndOfStatement(),b}},read_code_block:function(a){var b=this.node("block");this.expect("{")&&this.nextWithComments();var c=a?this.read_top_statements():this.read_inner_statements();return this.expect("}")&&this.nextWithComments(),b(null,c)}}},{}],86:[function(a,b,c){"use strict";b.exports={read_switch:function(){this.expect(this.tok.T_SWITCH)&&this.next(); -var a,b,c,d=this.node("switch");return this.expect("(")&&this.next(),a=this.read_expr(),this.expect(")")&&this.next(),c=":"===this.token,b=this.read_switch_case_list(),d(a,b,c)},read_switch_case_list:function(){var a=null,b=this.node("block"),c=[];for("{"===this.token?a="}":":"===this.token?a=this.tok.T_ENDSWITCH:this.expect(["{",":"]),";"===this.next().token&&this.next(),this.token===this.tok.T_CLOSE_TAG&&this.next();this.token!==this.EOF&&this.token!==a;)c.push(this.read_case_list(a));return this.expect(a)&&this.next(),a===this.tok.T_ENDSWITCH&&this.expectEndOfStatement(),b(null,c)},read_case_list:function(a){var b=this.node("case"),c=null,d=null,e=[];for(this.token===this.tok.T_CASE?c=this.next().read_expr():this.token===this.tok.T_DEFAULT?this.next():this.expect([this.tok.T_CASE,this.tok.T_DEFAULT]),this.expect([":",";"])&&this.next(),d=this.node("block");this.token!=this.EOF&&this.token!==a&&this.token!==this.tok.T_CASE&&this.token!==this.tok.T_DEFAULT;)e.push(this.read_inner_statement());return b(c,e.length>0?d(null,e):null); -}}},{}],87:[function(a,b,c){b.exports={read_try:function(){this.expect(this.tok.T_TRY);var a=this.node("try"),b=this.nextWithComments().read_statement(),c=!1,d=[];for(this.ignoreComments();this.token===this.tok.T_CATCH;){this.next().expect("(")&&this.next();var e=this.read_namespace_name(),f=this.read_variable(!0,!1,!1);this.expect(")")&&this.nextWithComments(),d.push({exception:e,as:f,body:this.read_statement()}),this.ignoreComments()}return this.token===this.tok.T_FINALLY&&(c=this.nextWithComments().read_statement()),a(b,d,c)}}},{}],88:[function(a,b,c){"use strict";b.exports={read_short_form:function(a){var b=this.node("block"),c=[];for(this.expect(":")&&this.next();this.token!=this.EOF&&this.token!==a;)c.push(this.read_inner_statement());return this.expect(a)&&this.next(),this.expectEndOfStatement(),b(null,c)},read_list:function(a,b,c){var d=[];if(this.token==b&&(c&&d.push(""),this.next()),"function"==typeof a){do if(d.push(a.apply(this,[])),this.token!=b)break;while(this.next().token!=this.EOF)}else for(this.expect(a)&&d.push(this.text());this.next().token!=this.EOF&&this.token==b&&this.next().token==a;)d.push(this.text()); -return d},read_name_list:function(){return this.read_list(this.read_namespace_name,",",!1)}}},{}],89:[function(a,b,c){b.exports={read_variable:function(a,b,c){var d;if(c||"&"!==this.token||(c=!0,this.next()),this.is([this.tok.T_VARIABLE,"$"]))d=this.read_reference_variable(b,c);else if(this.is([this.tok.T_NS_SEPARATOR,this.tok.T_STRING])){d=this.node();var e=this.read_namespace_name();if(this.token!=this.tok.T_DOUBLE_COLON&&"("!=this.token){var f=e.name.toLowerCase();d="true"===f?d("boolean",!0):"false"===f?d("boolean",!1):d("constref",e)}else d=e}else this.token===this.tok.T_STATIC?(this.next(),d=["ns",["static"]]):this.expect("VARIABLE");return this.token===this.tok.T_DOUBLE_COLON&&(d=this.read_static_getter(d,b)),this.recursive_variable_chain_scan(d,a,b)},read_static_getter:function(a,b){var c=null;return this.next().is([this.tok.T_VARIABLE,"$"])?c=this.read_reference_variable(b,!1):this.token===this.tok.T_STRING||this.token===this.tok.T_CLASS?(c=this.text(),this.next()):(c=this.error([this.tok.T_VARIABLE,this.tok.T_STRING]), -this.next()),"ns"!=a[0]&&(a=["lookup","class",a]),["static","get",a,c]},recursive_variable_chain_scan:function(a,b,c){a:for(;this.token!=this.EOF;)switch(this.token){case"(":if(b)return a;a=["call",a,this.read_function_argument_list()];break;case"[":this.next();var d=!1;c?(d=this.read_encaps_var_offset(),this.expect("]")&&this.next()):"]"!==this.token?(d=this.read_expr(),this.expect("]")&&this.next()):this.next(),a=["offset",a,d];break;case this.tok.T_OBJECT_OPERATOR:var e;switch(this.next().token){case this.tok.T_STRING:e=["string",this.text()];var f=this.next().token;f===this.tok.T_VARIABLE?e=["bin",".",e,["var",this.text()]]:"{"===f&&(e=["bin",".",e,this.next().read_expr()],this.expect("}")&&this.next());break;case this.tok.T_VARIABLE:e=["var",this.text()],this.next();break;case"$":this.next().expect(["{",this.tok.T_VARIABLE]),"{"===this.token?(e=this.next().read_expr(),this.expect("}")&&this.next()):e=this.read_expr();break;case"{":e=this.next().read_expr(),this.expect("}")&&this.next();break;default:e=this.error([this.tok.T_STRING,this.tok.T_VARIABLE]), -this.next()}a=["prop",a,e];break;default:break a}return a},read_encaps_var_offset:function(){var a=this.node();if(this.token===this.tok.T_STRING){var b=this.text(),c='"'===b[0];b=b.substring(1,b.length-1),a=a("string",c,this.resolve_special_chars(b))}else this.token===this.tok.T_NUM_STRING?a=a("number",this.text()):this.token===this.tok.T_VARIABLE?a=a("variable",this.text()):this.expect([this.tok.T_STRING,this.tok.T_NUM_STRING,this.tok.T_VARIABLE]);return this.next(),a},read_reference_variable:function(a,b){for(var c=this.read_simple_variable(b);this.token!=this.EOF;)if("["==this.token){if(a)c=this.next().read_encaps_var_offset();else{var d="]"===this.next().token?null:this.read_dim_offset();c=["offset",c,d]}this.expect("]")&&this.next()}else{if("{"!=this.token||a)break;c=["offset",c,this.next().read_expr()],this.expect("}")&&this.next()}return c},read_simple_variable:function(a){var b=this.node("variable");if(this.expect([this.tok.T_VARIABLE,"$"])&&this.token===this.tok.T_VARIABLE)b=b(this.text(),a),this.next();else{ -switch("$"===this.token&&this.next(),this.token){case"{":b=this.next().read_expr(),this.expect("}")&&this.next();break;case"$":b=["lookup","var",this.read_simple_variable(!1)];break;case this.tok.T_VARIABLE:b=["var",this.text()],this.next();break;default:b=this.error(["{","$",this.tok.T_VARIABLE]),this.next()}b=["lookup","var",b]}return b}}},{}],90:[function(a,b,c){b.exports={values:{101:"T_HALT_COMPILER",102:"T_USE",103:"T_ENCAPSED_AND_WHITESPACE",104:"T_OBJECT_OPERATOR",105:"T_STRING",106:"T_DOLLAR_OPEN_CURLY_BRACES",107:"T_STRING_VARNAME",108:"T_CURLY_OPEN",109:"T_NUM_STRING",110:"T_ISSET",111:"T_EMPTY",112:"T_INCLUDE",113:"T_INCLUDE_ONCE",114:"T_EVAL",115:"T_REQUIRE",116:"T_REQUIRE_ONCE",117:"T_NAMESPACE",118:"T_NS_SEPARATOR",119:"T_AS",120:"T_IF",121:"T_ENDIF",122:"T_WHILE",123:"T_DO",124:"T_FOR",125:"T_SWITCH",126:"T_BREAK",127:"T_CONTINUE",128:"T_RETURN",129:"T_GLOBAL",130:"T_STATIC",131:"T_ECHO",132:"T_INLINE_HTML",133:"T_UNSET",134:"T_FOREACH",135:"T_DECLARE",136:"T_TRY",137:"T_THROW",138:"T_GOTO",139:"T_FINALLY", -140:"T_CATCH",141:"T_ENDDECLARE",142:"T_LIST",143:"T_CLONE",144:"T_PLUS_EQUAL",145:"T_MINUS_EQUAL",146:"T_MUL_EQUAL",147:"T_DIV_EQUAL",148:"T_CONCAT_EQUAL",149:"T_MOD_EQUAL",150:"T_AND_EQUAL",151:"T_OR_EQUAL",152:"T_XOR_EQUAL",153:"T_SL_EQUAL",154:"T_SR_EQUAL",155:"T_INC",156:"T_DEC",157:"T_BOOLEAN_OR",158:"T_BOOLEAN_AND",159:"T_LOGICAL_OR",160:"T_LOGICAL_AND",161:"T_LOGICAL_XOR",162:"T_SL",163:"T_SR",164:"T_IS_IDENTICAL",165:"T_IS_NOT_IDENTICAL",166:"T_IS_EQUAL",167:"T_IS_NOT_EQUAL",168:"T_IS_SMALLER_OR_EQUAL",169:"T_IS_GREATER_OR_EQUAL",170:"T_INSTANCEOF",171:"T_INT_CAST",172:"T_DOUBLE_CAST",173:"T_STRING_CAST",174:"T_ARRAY_CAST",175:"T_OBJECT_CAST",176:"T_BOOL_CAST",177:"T_UNSET_CAST",178:"T_EXIT",179:"T_PRINT",180:"T_YIELD",181:"T_YIELD_FROM",182:"T_FUNCTION",183:"T_DOUBLE_ARROW",184:"T_DOUBLE_COLON",185:"T_ARRAY",186:"T_CALLABLE",187:"T_CLASS",188:"T_ABSTRACT",189:"T_TRAIT",190:"T_FINAL",191:"T_EXTENDS",192:"T_INTERFACE",193:"T_IMPLEMENTS",194:"T_VAR",195:"T_PUBLIC",196:"T_PROTECTED",197:"T_PRIVATE",198:"T_CONST", -199:"T_NEW",200:"T_INSTEADOF",201:"T_ELSEIF",202:"T_ELSE",203:"T_ENDSWITCH",204:"T_CASE",205:"T_DEFAULT",206:"T_ENDFOR",207:"T_ENDFOREACH",208:"T_ENDWHILE",209:"T_CONSTANT_ENCAPSED_STRING",210:"T_LNUMBER",211:"T_DNUMBER",212:"T_LINE",213:"T_FILE",214:"T_DIR",215:"T_TRAIT_C",216:"T_METHOD_C",217:"T_FUNC_C",218:"T_NS_C",219:"T_START_HEREDOC",220:"T_END_HEREDOC",221:"T_CLASS_C",222:"T_VARIABLE",223:"T_OPEN_TAG",224:"T_OPEN_TAG_WITH_ECHO",225:"T_CLOSE_TAG",226:"T_WHITESPACE",227:"T_COMMENT",228:"T_DOC_COMMENT",229:"T_ELLIPSIS",230:"T_COALESCE",231:"T_POW",232:"T_POW_EQUAL",233:"T_SPACESHIP"},names:{T_HALT_COMPILER:101,T_USE:102,T_ENCAPSED_AND_WHITESPACE:103,T_OBJECT_OPERATOR:104,T_STRING:105,T_DOLLAR_OPEN_CURLY_BRACES:106,T_STRING_VARNAME:107,T_CURLY_OPEN:108,T_NUM_STRING:109,T_ISSET:110,T_EMPTY:111,T_INCLUDE:112,T_INCLUDE_ONCE:113,T_EVAL:114,T_REQUIRE:115,T_REQUIRE_ONCE:116,T_NAMESPACE:117,T_NS_SEPARATOR:118,T_AS:119,T_IF:120,T_ENDIF:121,T_WHILE:122,T_DO:123,T_FOR:124,T_SWITCH:125,T_BREAK:126,T_CONTINUE:127,T_RETURN:128, -T_GLOBAL:129,T_STATIC:130,T_ECHO:131,T_INLINE_HTML:132,T_UNSET:133,T_FOREACH:134,T_DECLARE:135,T_TRY:136,T_THROW:137,T_GOTO:138,T_FINALLY:139,T_CATCH:140,T_ENDDECLARE:141,T_LIST:142,T_CLONE:143,T_PLUS_EQUAL:144,T_MINUS_EQUAL:145,T_MUL_EQUAL:146,T_DIV_EQUAL:147,T_CONCAT_EQUAL:148,T_MOD_EQUAL:149,T_AND_EQUAL:150,T_OR_EQUAL:151,T_XOR_EQUAL:152,T_SL_EQUAL:153,T_SR_EQUAL:154,T_INC:155,T_DEC:156,T_BOOLEAN_OR:157,T_BOOLEAN_AND:158,T_LOGICAL_OR:159,T_LOGICAL_AND:160,T_LOGICAL_XOR:161,T_SL:162,T_SR:163,T_IS_IDENTICAL:164,T_IS_NOT_IDENTICAL:165,T_IS_EQUAL:166,T_IS_NOT_EQUAL:167,T_IS_SMALLER_OR_EQUAL:168,T_IS_GREATER_OR_EQUAL:169,T_INSTANCEOF:170,T_INT_CAST:171,T_DOUBLE_CAST:172,T_STRING_CAST:173,T_ARRAY_CAST:174,T_OBJECT_CAST:175,T_BOOL_CAST:176,T_UNSET_CAST:177,T_EXIT:178,T_PRINT:179,T_YIELD:180,T_YIELD_FROM:181,T_FUNCTION:182,T_DOUBLE_ARROW:183,T_DOUBLE_COLON:184,T_ARRAY:185,T_CALLABLE:186,T_CLASS:187,T_ABSTRACT:188,T_TRAIT:189,T_FINAL:190,T_EXTENDS:191,T_INTERFACE:192,T_IMPLEMENTS:193,T_VAR:194,T_PUBLIC:195,T_PROTECTED:196, -T_PRIVATE:197,T_CONST:198,T_NEW:199,T_INSTEADOF:200,T_ELSEIF:201,T_ELSE:202,T_ENDSWITCH:203,T_CASE:204,T_DEFAULT:205,T_ENDFOR:206,T_ENDFOREACH:207,T_ENDWHILE:208,T_CONSTANT_ENCAPSED_STRING:209,T_LNUMBER:210,T_DNUMBER:211,T_LINE:212,T_FILE:213,T_DIR:214,T_TRAIT_C:215,T_METHOD_C:216,T_FUNC_C:217,T_NS_C:218,T_START_HEREDOC:219,T_END_HEREDOC:220,T_CLASS_C:221,T_VARIABLE:222,T_OPEN_TAG:223,T_OPEN_TAG_WITH_ECHO:224,T_CLOSE_TAG:225,T_WHITESPACE:226,T_COMMENT:227,T_DOC_COMMENT:228,T_ELLIPSIS:229,T_COALESCE:230,T_POW:231,T_POW_EQUAL:232,T_SPACESHIP:233}}},{}],"php-parser":[function(a,b,c){function d(a,b){for(var c=Object.keys(a),e=c.length;e--;){var f=c[e],g=a[f];null===g?delete b[f]:"function"==typeof g?b[f]=g.bind(b):Array.isArray(g)?b[f]=Array.isArray(b[f])?b[f].concat(g):g:"object"==typeof g?b[f]="object"==typeof b[f]?d(g,b[f]):g:b[f]=g}return b}var e=a("./lexer"),f=a("./parser"),g=a("./tokens"),h=a("./ast"),i=function(a){return"function"==typeof this?new this(a):(this.tokens=g,this.lexer=new e(this),this.ast=new h, -this.parser=new f(this.lexer,this.ast),void(a&&"object"==typeof a&&d(a,this)))};i.create=function(a){return new i(a)},i.parseEval=function(a,b){var c=new i(b);return c.parseEval(a)},i.prototype.parseEval=function(a){return this.lexer.mode_eval=!0,this.lexer.all_tokens=!1,this.parser.parse(a)},i.parseCode=function(a,b){var c=new i(b);return c.parseCode(a)},i.prototype.parseCode=function(a){return this.lexer.mode_eval=!1,this.lexer.all_tokens=!1,this.parser.parse(a)},i.tokenGetAll=function(a,b){var c=new i(b);return c.tokenGetAll(a)},i.prototype.tokenGetAll=function(a){this.lexer.mode_eval=!1,this.lexer.all_tokens=!0;var b=this.lexer.EOF,c=this.tokens.values;this.lexer.setInput(a);for(var d=this.lexer.lex()||b,e=[];d!=b;){var f=this.lexer.yytext;c.hasOwnProperty(d)&&(f=[c[d],f,this.lexer.yylloc.first_line]),e.push(f),d=this.lexer.lex()||b}return e},b.exports=i},{"./ast":2,"./lexer":65,"./parser":74,"./tokens":90}]},{},[]); +if("{"===this.token){for(c=[];this.next().token!==this.EOF&&"}"!==this.token;)c.push(this.read_trait_use_alias()),this.expect(";");this.expect("}")&&this.nextWithComments()}else this.expect(";")&&this.nextWithComments();return a(b,c)},read_trait_use_alias:function(){var a=this.node(),b=null,c=this.read_namespace_name();if(this.token===this.tok.T_DOUBLE_COLON?this.next().expect(this.tok.T_STRING)&&(b=c,c=this.text(),this.next()):c=c.name,this.token===this.tok.T_INSTEADOF)return a("traitprecedence",b,c,this.next().read_name_list());if(this.token===this.tok.T_AS){var d=!1,e=null;return this.next().is("T_MEMBER_FLAGS")&&(d=this.read_member_flags()),this.token===this.tok.T_STRING?(e=this.text(),this.next()):d===!1&&this.expect(this.tok.T_STRING),a("traitalias",b,c,e,d)}return this.expect([this.tok.T_AS,this.tok.T_INSTEADOF]),a("traitalias",b,c,null,null)}}},{}],106:[function(a,b,c){var d=/^(\s*\*[ \t]*|[ \t]*)(.*)$/gm;b.exports={read_comment:function(){var a=this.node("doc"),b=[];do{var c=this.text();"#"===c[0]?c=c.substring(1):(c=c.substring(2), +"*/"===c.substring(c.length-2)&&(c=c.substring(0,c.length-2))),b.push(c.trim())}while(this.nextWithComments().token===this.tok.T_COMMENT);return a(!1,b)},read_doc_comment:function(){var a=this.node("doc"),b=this.text();b=b.substring(2,b.length-2);var c=[];b=b.split(d);for(var e=2;e>",b,this.next().read_expr());if(this.token===this.tok.T_BOOLEAN_OR)return a("bool","|",b,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_OR)return a("bool","|",b,this.next().read_expr());if(this.token===this.tok.T_BOOLEAN_AND)return a("bool","&",b,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_AND)return a("bool","&",b,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_XOR)return a("bool","^",b,this.next().read_expr());if(this.token===this.tok.T_IS_IDENTICAL)return a("bool","=",b,this.next().read_expr());if(this.token===this.tok.T_IS_NOT_IDENTICAL)return a("bool","!=",b,this.next().read_expr());if(this.token===this.tok.T_IS_EQUAL)return a("bool","~",b,this.next().read_expr());if(this.token===this.tok.T_IS_NOT_EQUAL)return a("bool","!~",b,this.next().read_expr());if("<"===this.token)return a("bool","<",b,this.next().read_expr()); +if(">"===this.token)return a("bool","!~",b,this.next().read_expr());if(this.token===this.tok.T_IS_SMALLER_OR_EQUAL)return a("bool","<=",b,this.next().read_expr());if(this.token===this.tok.T_IS_GREATER_OR_EQUAL)return a("bool","=>",b,this.next().read_expr());if(this.token===this.tok.T_SPACESHIP)return a("bool","<=>",b,this.next().read_expr());if(this.token===this.tok.T_INSTANCEOF)return a("bool","?",b,this.next().read_expr());if(this.token===this.tok.T_COALESCE)return a("coalesce",b,this.next().read_expr());if("?"===this.token){var c=null;return":"!==this.next().token&&(c=this.read_expr()),this.expect(":")&&this.next(),a("retif",b,c,this.read_expr())}return b},read_expr_item:function(){if("@"===this.token)return this.node("silent")(this.next().read_expr());if("+"===this.token)return this.node("unary")("+",this.next().read_expr());if("!"===this.token)return this.node("unary")("!",this.next().read_expr());if("~"===this.token)return this.node("unary")("~",this.next().read_expr());if("-"===this.token){var a=this.node(); +return this.next(),this.token===this.tok.T_LNUMBER||this.token===this.tok.T_DNUMBER?(a=a("number","-"+this.text()),this.next(),a):a("unary","-",this.read_expr())}if("("===this.token){var b=this.node("parenthesis"),c=this.next().read_expr();return this.expect(")")&&this.next(),c=b(c),this.token===this.tok.T_OBJECT_OPERATOR?this.recursive_variable_chain_scan(c,!1):this.token===this.tok.T_CURLY_OPEN||"["===this.token?this.read_dereferencable(c):"("===this.token?this.node("call")(c,this.read_function_argument_list()):c}if("`"===this.token)return this.node("shell")(this.next().read_encapsed_string("`"));if(this.token===this.tok.T_LIST){var a=this.node("list"),d=null,e=this.innerList;e||(d=this.node("assign")),this.next().expect("(")&&this.next(),this.innerList||(this.innerList=!0);for(var f=this.read_assignment_list(),g=!1,h=0;h>=");case this.tok.T_INC:return this.next(),a("post","+",c);case this.tok.T_DEC:return this.next(),a("post","-",c)}}else if(this.is("SCALAR"))for(c=this.read_scalar();this.token!==this.EOF;)if(this.token===this.tok.T_OBJECT_OPERATOR)c=this.recursive_variable_chain_scan(c,!1);else if(this.token===this.tok.T_CURLY_OPEN||"["===this.token)c=this.read_dereferencable(c);else{if("("!==this.token)return c;c=this.node("call")(c,this.read_function_argument_list())}else this.error("EXPR"),this.next();return c},read_new_expr:function(){var a=this.node("new");if(this.token===this.tok.T_CLASS){var b=this.node("class"),c=null,d=null,e=null; +return this.next().token==this.tok.T_EXTENDS&&(c=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(d=this.next().read_name_list()),this.expect("{")&&(e=this.next().read_class_body()),a(b(null,c,d,e,[0,0,0]),[])}var f=this.read_class_name_reference(),g=[];return"("===this.token&&(g=this.read_function_argument_list()),a(f,g)},read_class_name_reference:function(){if(this.token===this.tok.T_NS_SEPARATOR||this.token===this.tok.T_STRING||this.token===this.tok.T_NAMESPACE){var a=this.read_namespace_name();return this.token===this.tok.T_DOUBLE_COLON&&(a=this.read_static_getter(a)),a}return this.is("VARIABLE")?this.read_variable(!0,!1,!1):void this.expect([this.tok.T_STRING,"VARIABLE"])},read_assignment_list:function(){return this.read_list(this.read_assignment_list_element,",")},read_assignment_list_element:function(){if(","===this.token||")"===this.token)return null;var a=this.read_expr_item();return this.token===this.tok.T_DOUBLE_ARROW&&(a=["key",a,this.next().read_expr_item()]),a}}},{}],108:[function(a,b,c){ +b.exports={is_reference:function(){return"&"==this.token&&(this.next(),!0)},is_variadic:function(){return this.token===this.tok.T_ELLIPSIS&&(this.next(),!0)},read_function:function(a,b){var c=this.read_function_declaration(a?1:b?2:0);return b&&1==b[2]?(c.parseFlags(b),this.expect(";")&&this.nextWithComments()):(this.expect("{")&&(c.body=this.read_code_block(!1)),b&&c.parseFlags(b)),c},read_function_declaration:function(a){var b="function";1===a?b="closure":2===a&&(b="method");var c=this.node(b);this.expect(this.tok.T_FUNCTION)&&this.next();var d=this.is_reference(),e=!1,f=[],g=null,h=!1;1!==a&&this.expect(this.tok.T_STRING)&&(e=this.text(),this.next()),this.expect("(")&&this.next();var i=this.read_parameter_list();return this.expect(")")&&this.next(),1===a&&this.token===this.tok.T_USE&&(this.next().expect("(")&&this.next(),f=this.read_list(this.read_lexical_var,","),this.expect(")")&&this.next()),":"===this.token&&("?"===this.next().token&&(h=!0,this.next()),g=this.read_type()),1===a?c(i,d,f,g,h):c(e,i,d,g,h)}, +read_lexical_var:function(){var a=[!1,null];return"&"===this.token&&(a[0]=!0,this.next()),this.token===this.tok.T_VARIABLE?(a[1]=this.text(),this.next()):this.expect(["&",this.tok.T_VARIABLE]),a},read_parameter_list:function(){var a=[];if(")"!=this.token)for(;this.token!=this.EOF;){if(a.push(this.read_parameter()),","!=this.token){if(")"==this.token)break;this.error([",",")"]);break}this.next()}return a},read_parameter:function(){var a=this.node("parameter"),b=null,c=null,d=null,e=!1;"?"===this.token&&(this.next(),e=!0),d=this.read_type(),e&&!d&&this.raiseError("Expecting a type definition combined with nullable operator");var f=this.is_reference(),g=this.is_variadic();return this.expect(this.tok.T_VARIABLE)&&(b=this.text(),this.next()),"="==this.token&&(c=this.next().read_expr()),a(b,d,c,f,g,e)},read_function_argument_list:function(){var a=[],b=!1;if(this.expect("(")&&this.next(),")"!==this.token)for(;this.token!=this.EOF;){var c=this.read_argument_list();if(a.push(c),"variadic"===c.kind?b=!0:b&&this.raiseError("Unexpected argument after a variadic argument"), +","!==this.token)break;this.next()}return this.expect(")")&&this.next(),a},read_argument_list:function(){return this.token===this.tok.T_ELLIPSIS?this.node("variadic")(this.next().read_expr()):this.read_expr()},read_type:function(){var a=this.node("identifier");switch(this.token){case this.tok.T_ARRAY:return this.next(),a(["","array"],!1);case this.tok.T_NAMESPACE:case this.tok.T_NS_SEPARATOR:case this.tok.T_STRING:return this.read_namespace_name();case this.tok.T_CALLABLE:return this.next(),a(["","callable"],!1);default:return null}}}},{}],109:[function(a,b,c){b.exports={read_if:function(){var a=this.node("if"),b=null,c=null,d=!1,e=null;if(e=this.read_if_expr(),":"===this.token){d=!0,this.next(),b=this.node("block");for(var f=[];this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;){if(this.ignoreComments(),this.token===this.tok.T_ELSEIF){c=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){c=this.next().read_else_short();break}f.push(this.read_inner_statement())}b=b(null,f),this.ignoreComments().expect(this.tok.T_ENDIF)&&this.next(), +this.expectEndOfStatement()}else b=this.read_statement(),this.ignoreComments(),this.token===this.tok.T_ELSEIF?c=this.next().read_if():this.token===this.tok.T_ELSE&&(c=this.next().read_statement());return a(e,b,c,d)},read_if_expr:function(){this.expect("(")&&this.next();var a=this.read_expr();return this.expect(")")&&this.next(),a},read_elseif_short:function(){var a=this.node("if"),b=null,c=null,d=null,e=[];for(c=this.read_if_expr(),this.expect(":")&&this.next(),d=this.node("block");this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;){if(this.token===this.tok.T_ELSEIF){b=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){b=this.next().read_else_short();break}e.push(this.read_inner_statement())}return d=d(null,e),a(c,d,b,!0)},read_else_short:function(){this.expect(":")&&this.next();for(var a=this.node("block"),b=[];this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;)b.push(this.read_inner_statement());return a(null,b)}}},{}],110:[function(a,b,c){"use strict";b.exports={read_while:function(){ +var a=this.node("while"),b=null,c=null,d=!1;return this.expect("(")&&this.next(),b=this.read_expr(),this.expect(")")&&this.next(),":"===this.token?(d=!0,c=this.read_short_form(this.tok.T_ENDWHILE)):c=this.read_statement(),a(b,c,d)},read_do:function(){var a=this.node("do"),b=null,c=null;return c=this.read_statement(),this.expect(this.tok.T_WHILE)&&(this.next().expect("(")&&this.next(),b=this.read_expr(),this.expect(")")&&this.next(),this.expect(";")&&this.next()),a(b,c)},read_for:function(){var a=this.node("for"),b=[],c=[],d=[],e=null,f=!1;return this.expect("(")&&this.next(),";"!==this.token?(b=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),";"!==this.token?(c=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),")"!==this.token?(d=this.read_list(this.read_expr,","),this.expect(")")&&this.next()):this.next(),":"===this.token?(f=!0,e=this.read_short_form(this.tok.T_ENDFOR)):e=this.read_statement(),a(b,c,d,e,f)},read_foreach:function(){var a=this.node("foreach"),b=null,c=null,d=null,e=null,f=!1; +return this.expect("(")&&this.next(),b=this.read_expr(),this.expect(this.tok.T_AS)&&(this.next(),d=this.read_foreach_variable(),this.token===this.tok.T_DOUBLE_ARROW&&(c=d,d=this.next().read_foreach_variable())),this.expect(")")&&this.next(),":"===this.token?(f=!0,e=this.read_short_form(this.tok.T_ENDFOREACH)):e=this.read_statement(),a(b,c,d,e,f)},read_foreach_variable:function(){if(this.token===this.tok.T_LIST){var a=this.node("list");this.next().expect("(")&&this.next();var b=this.read_assignment_list();return this.expect(")")&&this.next(),a(b)}return"["===this.token||this.token===this.tok.T_ARRAY?this.read_array():this.read_variable(!1,!1,!1)}}},{}],111:[function(a,b,c){b.exports={read_start:function(){return this.token==this.tok.T_NAMESPACE?this.read_namespace():this.read_top_statement()}}},{}],112:[function(a,b,c){"use strict";b.exports={read_namespace:function(){var a=this.node("namespace");if(this.expect(this.tok.T_NAMESPACE)&&this.next(),"{"==this.token)return this.currentNamespace=[""],a([""],this.read_code_block(!0),!0); +var b=this.read_namespace_name();if(";"==this.token){this.currentNamespace=b;var c=this.nextWithComments().read_top_statements();return this.expect(this.EOF),a(b,c)}if("{"==this.token)return this.currentNamespace=b,a(b,this.read_code_block(!0),!0);if("("===this.token)return b.resolution=this.ast.identifier.RELATIVE_NAME,b.name=b.name.substring(1),this.node("call")(b,this.read_function_argument_list());this.error(["{",";"]),this.currentNamespace=b;var c=this.read_top_statements();return this.expect(this.EOF),a(b,c)},read_namespace_name:function(){var a=this.node("identifier"),b=!1;return this.token===this.tok.T_NAMESPACE&&(this.next().expect(this.tok.T_NS_SEPARATOR)&&this.next(),b=!0),a(this.read_list(this.tok.T_STRING,this.tok.T_NS_SEPARATOR,!0),b)},read_use_statement:function(){var a=this.node("usegroup"),b=null,c=[],d=null;return this.expect(this.tok.T_USE)&&this.next(),b=this.read_use_type(),c.push(this.read_use_declaration(!1)),","===this.token?c=c.concat(this.next().read_use_declarations(!1)):"{"===this.token&&(d=c[0].name, +c=this.next().read_use_declarations(null===b),this.expect("}")&&this.next()),this.expect(";")&&this.nextWithComments(),a(d,b,c)},read_use_declaration:function(a){var b=this.node("useitem"),c=null;a&&(c=this.read_use_type());var d=this.read_namespace_name(),e=this.read_use_alias();return b(d,e,c)},read_use_declarations:function(a){for(var b=[this.read_use_declaration(a)];","===this.token;)b.push(this.next().read_use_declaration(a));return b},read_use_alias:function(){var a=null;return this.token===this.tok.T_AS&&this.next().expect(this.tok.T_STRING)&&(a=this.text(),this.next()),a},read_use_type:function(){return this.token===this.tok.T_FUNCTION?(this.next(),this.ast.useitem.TYPE_FUNCTION):this.token===this.tok.T_CONST?(this.next(),this.ast.useitem.TYPE_CONST):null}}},{}],113:[function(a,b,c){var d={"\\r":"\r","\\n":"\n","\\t":"\t","\\v":String.fromCharCode(11),"\\e":String.fromCharCode(27),"\\f":String.fromCharCode(12),"\\\\":"\\","\\$":"$",'\\"':'"',"\\'":"'"};b.exports={resolve_special_chars:function(a){return a.replace(/\\[rntvef"'\\\$]/g,function(a){ +return d[a]})},read_scalar:function(){if(this.is("T_MAGIC_CONST"))return this.get_magic_constant();switch(this.token){case this.tok.T_CONSTANT_ENCAPSED_STRING:var a=this.node("string"),b=this.text(),c='"'===b[0];return b=b.substring(1,b.length-1),this.next(),a=a(c,this.resolve_special_chars(b)),this.token===this.tok.T_DOUBLE_COLON?this.read_static_getter(a):a;case this.tok.T_START_HEREDOC:if("ST_NOWDOC"===this.lexer.curCondition){var d=this.node("nowdoc"),a=this.next().text(),e=a[a.length-1];return"\n"===e?a="\r"===a[a.length-2]?a.substring(0,a.length-2):a.substring(0,a.length-1):"\r"===e&&(a=a.substring(0,a.length-1)),this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE)&&this.next(),d=d(a,this.lexer.heredoc_label),this.expect(this.tok.T_END_HEREDOC)&&this.next(),d}return this.next().read_encapsed_string(this.tok.T_END_HEREDOC);case'"':return this.next().read_encapsed_string('"');case'b"':case'B"':var d=this.node("cast"),f=this.next().read_encapsed_string('"');return d("binary",f);case this.tok.T_LNUMBER:case this.tok.T_DNUMBER: +var g=this.node("number"),a=this.text();return this.next(),g=g(a);case this.tok.T_ARRAY:case"[":return this.read_array();default:var h=this.error("SCALAR");return this.next(),h}},read_dereferencable:function(a){var b,c=this.node("offsetlookup");if("["===this.token){var d=this.next().read_expr();this.expect("]")&&this.next(),b=c(a,d)}else if(this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES){var d=this.read_encapsed_string_item();b=c(a,d)}return b},read_encapsed_string_item:function(){var a=this.node();if(this.token===this.tok.T_ENCAPSED_AND_WHITESPACE){var b=this.text();this.next(),a=a("string",!1,this.resolve_special_chars(b))}else if(this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES){var c=null;if(this.next().token===this.tok.T_STRING_VARNAME){var d=this.text().substring(1);if(c=this.node("variable"),this.next(),c=c(d,!1),"["===this.token){var e=this.node("offsetlookup"),f=this.next().read_expr();this.expect("]")&&this.next(),c=e(c,f)}}else c=this.read_expr();this.expect("}")&&this.next(),a=a("variable",c,!1)}else if(this.token===this.tok.T_CURLY_OPEN)a=this.next().read_variable(!1,!1,!1), +this.expect("}")&&this.next();else if(this.token===this.tok.T_VARIABLE){if(a=this.read_simple_variable(!1),"["===this.token){var e=this.node("offsetlookup"),f=this.next().read_encaps_var_offset();this.expect("]")&&this.next(),a=e(a,f)}if(this.token===this.tok.T_OBJECT_OPERATOR){var e=this.node("propertylookup"),g=this.node("constref");this.next().expect(this.tok.T_STRING);var c=this.text();this.next(),a=e(a,g(c))}}else{this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE);var h=this.text();this.next(),a=a("string",!1,h)}return a},read_encapsed_string:function(a){var b=this.node("encapsed"),c=[],d=null;for(d="`"===a?this.ast.encapsed.TYPE_SHELL:'"'===a?this.ast.encapsed.TYPE_STRING:this.ast.encapsed.TYPE_HEREDOC;this.token!==a&&this.token!==this.EOF;)c.push(this.read_encapsed_string_item());return this.expect(a)&&this.next(),b=b(c,d),a===this.tok.T_END_HEREDOC&&(b.label=this.lexer.heredoc_label),b},get_magic_constant:function(){var a=this.node("magic"),b=this.text();return this.next(),a(b)}}},{}],114:[function(a,b,c){ +b.exports={read_top_statements:function(){for(var a=[];this.token!==this.EOF&&"}"!==this.token;){var b=this.read_top_statement();b&&(Array.isArray(b)?a=a.concat(b):a.push(b))}return a},read_top_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1);case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var a=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(a):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]);case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT:return this.read_trait();case this.tok.T_USE:return this.read_use_statement();case this.tok.T_CONST:return this.next().read_const_list();case this.tok.T_NAMESPACE:return this.read_namespace();case this.tok.T_HALT_COMPILER:var b=this.node("halt");return this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),this.expect(";"),this.lexer.done=!0,b(this.lexer._input.substring(this.lexer.offset));default:return this.read_statement(); +}},read_inner_statements:function(){for(var a=[];this.token!=this.EOF&&"}"!==this.token;){var b=this.read_inner_statement();b&&(Array.isArray(b)?a=a.concat(b):a.push(b))}return a},read_const_list:function(){var a=this.read_list(function(){this.expect(this.tok.T_STRING);var a=this.node("constant"),b=this.text();return this.next().expect("=")?a(b,this.next().read_expr()):a(b,null)},",",!1);return this.expectEndOfStatement(),a},read_declare_list:function(){for(var a={};this.token!=this.EOF&&")"!==this.token;){this.expect(this.tok.T_STRING);var b=this.text().toLowerCase();if(this.next().expect("=")?a[b]=this.next().read_expr():a[b]=null,","!==this.token)break;this.next()}return a},read_inner_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1);case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var a=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(a):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]); +case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT:return this.read_trait();case this.tok.T_HALT_COMPILER:this.raiseError("__HALT_COMPILER() can only be used from the outermost scope");var b=this.node("halt");return this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),b=b(this.lexer._input.substring(this.lexer.offset)),this.expect(";")&&this.next(),b;default:return this.read_statement()}},read_statement:function(){switch(this.token){case"{":return this.read_code_block(!1);case this.tok.T_IF:return this.next().read_if();case this.tok.T_SWITCH:return this.read_switch();case this.tok.T_FOR:return this.next().read_for();case this.tok.T_FOREACH:return this.next().read_foreach();case this.tok.T_WHILE:return this.next().read_while();case this.tok.T_DO:return this.next().read_do();case this.tok.T_COMMENT:return this.read_comment();case this.tok.T_DOC_COMMENT:return this.read_doc_comment();case this.tok.T_RETURN:var a=this.node("return"),b=null;return this.next().is("EOS")||(b=this.read_expr()), +this.expectEndOfStatement(),a(b);case this.tok.T_BREAK:case this.tok.T_CONTINUE:var a=this.node(this.token===this.tok.T_CONTINUE?"continue":"break"),c=null;return this.next(),";"!==this.token&&this.token!==this.tok.T_CLOSE_TAG&&(c=this.read_expr()),this.expectEndOfStatement(),a(c);case this.tok.T_GLOBAL:var a=this.node("global"),d=this.next().read_list(this.read_simple_variable,",");return this.expectEndOfStatement(),a(d);case this.tok.T_STATIC:var e=[this.token,this.lexer.getState()],a=this.node("static");if(this.next().token===this.tok.T_DOUBLE_COLON){this.lexer.tokens.push(e);var b=this.next().read_expr();return this.expect(";")&&this.nextWithComments(),b}var d=this.read_variable_declarations();return this.expectEndOfStatement(),a(d);case this.tok.T_ECHO:var a=this.node("echo"),f=this.next().read_list(this.read_expr,",");return this.expectEndOfStatement(),a(f);case this.tok.T_INLINE_HTML:var a=this.node("inline")(this.text());return this.next(),a;case this.tok.T_UNSET:var a=this.node("unset");this.next().expect("(")&&this.next(); +var d=this.read_list(this.read_variable,",");return this.expect(")")&&this.next(),this.expect(";")&&this.nextWithComments(),a(d);case this.tok.T_DECLARE:var g,h,a=this.node("declare"),i=[];if(this.next().expect("(")&&this.next(),g=this.read_declare_list(),this.expect(")")&&this.next(),":"===this.token){for(this.nextWithComments();this.token!=this.EOF&&this.token!==this.tok.T_ENDDECLARE;)i.push(this.read_top_statement());this.expect(this.tok.T_ENDDECLARE)&&this.next(),this.expectEndOfStatement(),h=this.ast.declare.MODE_SHORT}else if("{"===this.token){for(this.nextWithComments();this.token!=this.EOF&&"}"!==this.token;)i.push(this.read_top_statement());this.expect("}")&&this.next(),h=this.ast.declare.MODE_BLOCK}else{for(this.expect(";")&&this.next();this.token!=this.EOF&&this.token!==this.tok.T_DECLARE;)i.push(this.read_top_statement());h=this.ast.declare.MODE_NONE}return a(g,i,h);case this.tok.T_TRY:return this.read_try();case this.tok.T_THROW:var a=this.node("throw"),b=this.next().read_expr();return this.expectEndOfStatement(), +a(b);case";":case this.tok.T_CLOSE_TAG:return this.next(),null;case this.tok.T_STRING:var e=[this.token,this.lexer.getState()],j=this.text();if(":"===this.next().token){var a=this.node("label");return this.next(),a(j)}this.lexer.tokens.push(e);var b=this.next().read_expr();return this.expect([";",this.tok.T_CLOSE_TAG])&&this.nextWithComments(),b;case this.tok.T_GOTO:var a=this.node("goto"),j=null;return this.next().expect(this.tok.T_STRING)&&(j=this.text(),this.next().expectEndOfStatement()),a(j);default:var b=this.read_expr();return this.expectEndOfStatement(),b}},read_code_block:function(a){var b=this.node("block");this.expect("{")&&this.nextWithComments();var c=a?this.read_top_statements():this.read_inner_statements();return this.expect("}")&&this.nextWithComments(),b(null,c)}}},{}],115:[function(a,b,c){"use strict";b.exports={read_switch:function(){this.expect(this.tok.T_SWITCH)&&this.next();var a,b,c,d=this.node("switch");return this.expect("(")&&this.next(),a=this.read_expr(),this.expect(")")&&this.next(), +c=":"===this.token,b=this.read_switch_case_list(),d(a,b,c)},read_switch_case_list:function(){var a=null,b=this.node("block"),c=[];for("{"===this.token?a="}":":"===this.token?a=this.tok.T_ENDSWITCH:this.expect(["{",":"]),";"===this.next().token&&this.next(),this.token===this.tok.T_CLOSE_TAG&&this.next();this.token!==this.EOF&&this.token!==a;)c.push(this.read_case_list(a));return this.expect(a)&&this.next(),a===this.tok.T_ENDSWITCH&&this.expectEndOfStatement(),b(null,c)},read_case_list:function(a){var b=this.node("case"),c=null,d=null,e=[];for(this.token===this.tok.T_CASE?c=this.next().read_expr():this.token===this.tok.T_DEFAULT?this.next():this.expect([this.tok.T_CASE,this.tok.T_DEFAULT]),this.expect([":",";"])&&this.next(),d=this.node("block");this.token!=this.EOF&&this.token!==a&&this.token!==this.tok.T_CASE&&this.token!==this.tok.T_DEFAULT;)e.push(this.read_inner_statement());return b(c,e.length>0?d(null,e):null)}}},{}],116:[function(a,b,c){b.exports={read_try:function(){this.expect(this.tok.T_TRY);var a,b=this.node("try"),c=null,d=[]; +for(a=this.nextWithComments().read_statement(),this.ignoreComments();this.token===this.tok.T_CATCH;){var e=this.node("catch"),f=[],g=null;this.next().expect("(")&&this.next(),f=this.read_list(this.read_namespace_name,"|",!1),g=this.read_variable(!0,!1,!1),this.expect(")"),d.push(e(this.next().read_statement(),f,g)),this.ignoreComments()}return this.token===this.tok.T_FINALLY&&(c=this.nextWithComments().read_statement()),b(a,d,c)}}},{}],117:[function(a,b,c){"use strict";b.exports={read_short_form:function(a){var b=this.node("block"),c=[];for(this.expect(":")&&this.next();this.token!=this.EOF&&this.token!==a;)c.push(this.read_inner_statement());return this.expect(a)&&this.next(),this.expectEndOfStatement(),b(null,c)},read_list:function(a,b,c){var d=[];if(this.token==b&&(c&&d.push(""),this.next()),"function"==typeof a){do if(d.push(a.apply(this,[])),this.token!=b)break;while(this.next().token!=this.EOF)}else{if(!this.expect(a))return[];for(d.push(this.text());this.next().token!=this.EOF&&this.token==b&&this.next().token==a;)d.push(this.text()); +}return d},read_name_list:function(){return this.read_list(this.read_namespace_name,",",!1)},read_variable_declarations:function(){return this.read_list(function(){var a=this.node("assign"),b=this.node("variable");if(this.expect(this.tok.T_VARIABLE)){var c=this.text().substring(1);this.next(),b=b(c,!1)}else b=b("#ERR",!1);return"="===this.token?a(b,this.next().read_expr()):b},",")}}},{}],118:[function(a,b,c){"use strict";b.exports={read_variable:function(a,b,c){var d;if(c||"&"!==this.token||(c=!0,this.next()),this.is([this.tok.T_VARIABLE,"$"]))d=this.read_reference_variable(b,c);else if(this.is([this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_NAMESPACE])){d=this.node();var e=this.read_namespace_name();if(this.token!=this.tok.T_DOUBLE_COLON&&"("!=this.token){var f=e.name.toLowerCase();d="true"===f?d("boolean",!0):"false"===f?d("boolean",!1):d("constref",e)}else d=e}else this.token===this.tok.T_STATIC?(d=this.node("constref"),this.next(),d=d("static")):this.expect("VARIABLE");return this.token===this.tok.T_DOUBLE_COLON&&(d=this.read_static_getter(d,b)), +this.recursive_variable_chain_scan(d,a,b)},read_static_getter:function(a,b){var c=this.node("staticlookup"),d=null;if(this.next().is([this.tok.T_VARIABLE,"$"]))d=this.read_reference_variable(b,!1);else if(this.token===this.tok.T_STRING||this.token===this.tok.T_CLASS){d=this.node("constref");var e=this.text();this.next(),d=d(e)}else{this.error([this.tok.T_VARIABLE,this.tok.T_STRING]),d=this.node("constref");var e=this.text();this.next(),d=d(e)}return c(a,d)},recursive_variable_chain_scan:function(a,b,c){a:for(;this.token!=this.EOF;)switch(this.token){case"(":if(b)return a;a=this.node("call")(a,this.read_function_argument_list());break;case"[":var d=this.node("offsetlookup");this.next();var e=!1;c?(e=this.read_encaps_var_offset(),this.expect("]")&&this.next()):"]"!==this.token?(e=this.read_expr(),this.expect("]")&&this.next()):this.next(),a=d(a,e);break;case this.tok.T_OBJECT_OPERATOR:var d=this.node("propertylookup"),f=null;switch(this.next().token){case this.tok.T_STRING:f=this.node("constref");var g=this.text(); +this.next(),f=f(g),this.token===this.tok.T_VARIABLE?(g=this.text().substring(1),this.next(),f=["bin",".",f,["var",g]]):"{"===this.token&&(f=["bin",".",f,this.next().read_expr()],this.expect("}")&&this.next());break;case this.tok.T_VARIABLE:f=this.node("variable");var g=this.text().substring(1);this.next(),f=f(g,!1);break;case"$":this.next().expect(["{",this.tok.T_VARIABLE]),"{"===this.token?(f=this.next().read_expr(),this.expect("}")&&this.next()):f=this.read_expr();break;case"{":f=this.next().read_expr(),this.expect("}")&&this.next();break;default:this.error([this.tok.T_STRING,this.tok.T_VARIABLE]),f=this.node("constref");var g=this.text();this.next(),f=f(g)}a=d(a,f);break;default:break a}return a},read_encaps_var_offset:function(){var a=this.node();if(this.token===this.tok.T_STRING){var b=this.text(),c='"'===b[0];b=b.substring(1,b.length-1),this.next(),a=a("string",c,this.resolve_special_chars(b))}else if(this.token===this.tok.T_NUM_STRING){var d=this.text();this.next(),a=a("number",d)}else if(this.token===this.tok.T_VARIABLE){ +var e=this.text().substring(1);this.next(),a=a("variable",e,!1)}else{this.expect([this.tok.T_STRING,this.tok.T_NUM_STRING,this.tok.T_VARIABLE]);var b=this.text();this.next(),a=a("string",!1,b)}return a},read_reference_variable:function(a,b){for(var c=this.read_simple_variable(b);this.token!=this.EOF;){var d=this.node();if("["==this.token){var e=null;e=a?this.next().read_encaps_var_offset():"]"===this.next().token?null:this.read_dim_offset(),this.expect("]")&&this.next(),c=d("offsetlookup",c,e)}else{if("{"!=this.token||a)break;var e=this.next().read_expr();this.expect("}")&&this.next(),c=d("offsetlookup",c,e)}}return c},read_simple_variable:function(a){var b=this.node("variable");if(this.expect([this.tok.T_VARIABLE,"$"])&&this.token===this.tok.T_VARIABLE){var c=this.text().substring(1);this.next(),b=b(c,a)}else switch("$"===this.token&&this.next(),this.token){case"{":var d=this.next().read_expr();this.expect("}")&&this.next(),b=b(d,a);break;case"$":b=b(this.read_simple_variable(!1),a);break;case this.tok.T_VARIABLE: +var c=this.text().substring(1),e=this.node("variable");this.next(),b=b(e(c,!1),a);break;default:this.error(["{","$",this.tok.T_VARIABLE]);var c=this.text();this.next(),b=b(c,a)}return b}}},{}],119:[function(a,b,c){b.exports={values:{101:"T_HALT_COMPILER",102:"T_USE",103:"T_ENCAPSED_AND_WHITESPACE",104:"T_OBJECT_OPERATOR",105:"T_STRING",106:"T_DOLLAR_OPEN_CURLY_BRACES",107:"T_STRING_VARNAME",108:"T_CURLY_OPEN",109:"T_NUM_STRING",110:"T_ISSET",111:"T_EMPTY",112:"T_INCLUDE",113:"T_INCLUDE_ONCE",114:"T_EVAL",115:"T_REQUIRE",116:"T_REQUIRE_ONCE",117:"T_NAMESPACE",118:"T_NS_SEPARATOR",119:"T_AS",120:"T_IF",121:"T_ENDIF",122:"T_WHILE",123:"T_DO",124:"T_FOR",125:"T_SWITCH",126:"T_BREAK",127:"T_CONTINUE",128:"T_RETURN",129:"T_GLOBAL",130:"T_STATIC",131:"T_ECHO",132:"T_INLINE_HTML",133:"T_UNSET",134:"T_FOREACH",135:"T_DECLARE",136:"T_TRY",137:"T_THROW",138:"T_GOTO",139:"T_FINALLY",140:"T_CATCH",141:"T_ENDDECLARE",142:"T_LIST",143:"T_CLONE",144:"T_PLUS_EQUAL",145:"T_MINUS_EQUAL",146:"T_MUL_EQUAL",147:"T_DIV_EQUAL",148:"T_CONCAT_EQUAL", +149:"T_MOD_EQUAL",150:"T_AND_EQUAL",151:"T_OR_EQUAL",152:"T_XOR_EQUAL",153:"T_SL_EQUAL",154:"T_SR_EQUAL",155:"T_INC",156:"T_DEC",157:"T_BOOLEAN_OR",158:"T_BOOLEAN_AND",159:"T_LOGICAL_OR",160:"T_LOGICAL_AND",161:"T_LOGICAL_XOR",162:"T_SL",163:"T_SR",164:"T_IS_IDENTICAL",165:"T_IS_NOT_IDENTICAL",166:"T_IS_EQUAL",167:"T_IS_NOT_EQUAL",168:"T_IS_SMALLER_OR_EQUAL",169:"T_IS_GREATER_OR_EQUAL",170:"T_INSTANCEOF",171:"T_INT_CAST",172:"T_DOUBLE_CAST",173:"T_STRING_CAST",174:"T_ARRAY_CAST",175:"T_OBJECT_CAST",176:"T_BOOL_CAST",177:"T_UNSET_CAST",178:"T_EXIT",179:"T_PRINT",180:"T_YIELD",181:"T_YIELD_FROM",182:"T_FUNCTION",183:"T_DOUBLE_ARROW",184:"T_DOUBLE_COLON",185:"T_ARRAY",186:"T_CALLABLE",187:"T_CLASS",188:"T_ABSTRACT",189:"T_TRAIT",190:"T_FINAL",191:"T_EXTENDS",192:"T_INTERFACE",193:"T_IMPLEMENTS",194:"T_VAR",195:"T_PUBLIC",196:"T_PROTECTED",197:"T_PRIVATE",198:"T_CONST",199:"T_NEW",200:"T_INSTEADOF",201:"T_ELSEIF",202:"T_ELSE",203:"T_ENDSWITCH",204:"T_CASE",205:"T_DEFAULT",206:"T_ENDFOR",207:"T_ENDFOREACH",208:"T_ENDWHILE", +209:"T_CONSTANT_ENCAPSED_STRING",210:"T_LNUMBER",211:"T_DNUMBER",212:"T_LINE",213:"T_FILE",214:"T_DIR",215:"T_TRAIT_C",216:"T_METHOD_C",217:"T_FUNC_C",218:"T_NS_C",219:"T_START_HEREDOC",220:"T_END_HEREDOC",221:"T_CLASS_C",222:"T_VARIABLE",223:"T_OPEN_TAG",224:"T_OPEN_TAG_WITH_ECHO",225:"T_CLOSE_TAG",226:"T_WHITESPACE",227:"T_COMMENT",228:"T_DOC_COMMENT",229:"T_ELLIPSIS",230:"T_COALESCE",231:"T_POW",232:"T_POW_EQUAL",233:"T_SPACESHIP"},names:{T_HALT_COMPILER:101,T_USE:102,T_ENCAPSED_AND_WHITESPACE:103,T_OBJECT_OPERATOR:104,T_STRING:105,T_DOLLAR_OPEN_CURLY_BRACES:106,T_STRING_VARNAME:107,T_CURLY_OPEN:108,T_NUM_STRING:109,T_ISSET:110,T_EMPTY:111,T_INCLUDE:112,T_INCLUDE_ONCE:113,T_EVAL:114,T_REQUIRE:115,T_REQUIRE_ONCE:116,T_NAMESPACE:117,T_NS_SEPARATOR:118,T_AS:119,T_IF:120,T_ENDIF:121,T_WHILE:122,T_DO:123,T_FOR:124,T_SWITCH:125,T_BREAK:126,T_CONTINUE:127,T_RETURN:128,T_GLOBAL:129,T_STATIC:130,T_ECHO:131,T_INLINE_HTML:132,T_UNSET:133,T_FOREACH:134,T_DECLARE:135,T_TRY:136,T_THROW:137,T_GOTO:138,T_FINALLY:139,T_CATCH:140, +T_ENDDECLARE:141,T_LIST:142,T_CLONE:143,T_PLUS_EQUAL:144,T_MINUS_EQUAL:145,T_MUL_EQUAL:146,T_DIV_EQUAL:147,T_CONCAT_EQUAL:148,T_MOD_EQUAL:149,T_AND_EQUAL:150,T_OR_EQUAL:151,T_XOR_EQUAL:152,T_SL_EQUAL:153,T_SR_EQUAL:154,T_INC:155,T_DEC:156,T_BOOLEAN_OR:157,T_BOOLEAN_AND:158,T_LOGICAL_OR:159,T_LOGICAL_AND:160,T_LOGICAL_XOR:161,T_SL:162,T_SR:163,T_IS_IDENTICAL:164,T_IS_NOT_IDENTICAL:165,T_IS_EQUAL:166,T_IS_NOT_EQUAL:167,T_IS_SMALLER_OR_EQUAL:168,T_IS_GREATER_OR_EQUAL:169,T_INSTANCEOF:170,T_INT_CAST:171,T_DOUBLE_CAST:172,T_STRING_CAST:173,T_ARRAY_CAST:174,T_OBJECT_CAST:175,T_BOOL_CAST:176,T_UNSET_CAST:177,T_EXIT:178,T_PRINT:179,T_YIELD:180,T_YIELD_FROM:181,T_FUNCTION:182,T_DOUBLE_ARROW:183,T_DOUBLE_COLON:184,T_ARRAY:185,T_CALLABLE:186,T_CLASS:187,T_ABSTRACT:188,T_TRAIT:189,T_FINAL:190,T_EXTENDS:191,T_INTERFACE:192,T_IMPLEMENTS:193,T_VAR:194,T_PUBLIC:195,T_PROTECTED:196,T_PRIVATE:197,T_CONST:198,T_NEW:199,T_INSTEADOF:200,T_ELSEIF:201,T_ELSE:202,T_ENDSWITCH:203,T_CASE:204,T_DEFAULT:205,T_ENDFOR:206,T_ENDFOREACH:207, +T_ENDWHILE:208,T_CONSTANT_ENCAPSED_STRING:209,T_LNUMBER:210,T_DNUMBER:211,T_LINE:212,T_FILE:213,T_DIR:214,T_TRAIT_C:215,T_METHOD_C:216,T_FUNC_C:217,T_NS_C:218,T_START_HEREDOC:219,T_END_HEREDOC:220,T_CLASS_C:221,T_VARIABLE:222,T_OPEN_TAG:223,T_OPEN_TAG_WITH_ECHO:224,T_CLOSE_TAG:225,T_WHITESPACE:226,T_COMMENT:227,T_DOC_COMMENT:228,T_ELLIPSIS:229,T_COALESCE:230,T_POW:231,T_POW_EQUAL:232,T_SPACESHIP:233}}},{}],"php-parser":[function(a,b,c){function d(a,b){for(var c=Object.keys(a),e=c.length;e--;){var f=c[e],g=a[f];null===g?delete b[f]:"function"==typeof g?b[f]=g.bind(b):Array.isArray(g)?b[f]=Array.isArray(b[f])?b[f].concat(g):g:"object"==typeof g?b[f]="object"==typeof b[f]?d(g,b[f]):g:b[f]=g}return b}var e=a("./lexer"),f=a("./parser"),g=a("./tokens"),h=a("./ast"),i=function(a){return"function"==typeof this?new this(a):(this.tokens=g,this.lexer=new e(this),this.ast=new h,this.parser=new f(this.lexer,this.ast),void(a&&"object"==typeof a&&d(a,this)))};i.create=function(a){return new i(a)},i.parseEval=function(a,b){var c=new i(b); +return c.parseEval(a)},i.prototype.parseEval=function(a){return this.lexer.mode_eval=!0,this.lexer.all_tokens=!1,this.parser.parse(a,"eval")},i.parseCode=function(a,b,c){"object"==typeof b&&(c=b,b="unknown");var d=new i(c);return d.parseCode(a,b)},i.prototype.parseCode=function(a,b){return this.lexer.mode_eval=!1,this.lexer.all_tokens=!1,this.parser.parse(a,b)},i.tokenGetAll=function(a,b){var c=new i(b);return c.tokenGetAll(a)},i.prototype.tokenGetAll=function(a){this.lexer.mode_eval=!1,this.lexer.all_tokens=!0;var b=this.lexer.EOF,c=this.tokens.values;this.lexer.setInput(a);for(var d=this.lexer.lex()||b,e=[];d!=b;){var f=this.lexer.yytext;c.hasOwnProperty(d)&&(f=[c[d],f,this.lexer.yylloc.first_line]),e.push(f),d=this.lexer.lex()||b}return e},b.exports=i},{"./ast":2,"./lexer":94,"./parser":103,"./tokens":119}]},{},[]); //# sourceMappingURL=php-parser.min.js.map \ No newline at end of file diff --git a/dist/php-parser.min.js.map b/dist/php-parser.min.js.map index f77f985e8..c58264710 100644 --- a/dist/php-parser.min.js.map +++ b/dist/php-parser.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["php-parser.js"],"names":["require","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length","1","module","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","this","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","2","Location","Position","AST","withPositions","withSource","prepare","kind","parser","start","lexer","yylloc","first_line","first_column","first_offset","self","location","slice","src","_input","substring","offset","shift","node","result","Object","create","forEach","ctor","constructor","toLowerCase","./ast/array","./ast/assign","./ast/block","./ast/boolean","./ast/break","./ast/case","./ast/class","./ast/classconstant","./ast/clone","./ast/coalesce","./ast/constant","./ast/constref","./ast/continue","./ast/do","./ast/doc","./ast/echo","./ast/empty","./ast/entry","./ast/error","./ast/eval","./ast/exit","./ast/for","./ast/foreach","./ast/function","./ast/goto","./ast/identifier","./ast/if","./ast/include","./ast/inline","./ast/interface","./ast/isset","./ast/label","./ast/list","./ast/literal","./ast/location","./ast/magic","./ast/method","./ast/namespace","./ast/number","./ast/parameter","./ast/position","./ast/post","./ast/print","./ast/program","./ast/property","./ast/return","./ast/shell","./ast/string","./ast/switch","./ast/trait","./ast/traitalias","./ast/traitprecedence","./ast/traituse","./ast/unset","./ast/variable","./ast/while","3","Expr","KIND","extends","shortForm","items","./expression","4","Statement","Assign","left","right","operator","./statement","5","Block","children","6","Literal","Boolean","value","./literal","7","Node","Break","./node","8","Case","test","body","9","Declaration","Class","ext","impl","flags","isAnonymous","implements","parseFlags","./declaration","10","Constant","ClassConstant","./constant","11","Clone","what","12","Coalesce","ifnull","13","14","ConstRef","identifier","15","Continue","16","IS_PUBLIC","IS_PROTECTED","IS_PRIVATE","isAbstract","isFinal","visibility","isStatic","17","Do","18","Doc","isDoc","lines","19","Sys","Echo","./sys","20","Empty","21","Entry","key","22","message","token","line","expected","23","Eval","source","24","Exit","status","25","Expression","26","For","init","increment","27","Foreach","28","fn","byref","type","29","Goto","label","30","Identifier","fqn","isArray","join","31","If","alternate","32","Include","target","33","Inline","34","Interface","35","Isset","36","Label","37","List","38","39","end","40","Magic","41","Method","./function","42","Namespace","withBrackets","./block","./identifier","43","loc","44","_Number","45","Operation","46","Parameter","isRef","isVariadic","variadic","47","column","48","Post","./operation","49","Print","50","Program","errors","51","Property","52","Return","expr","53","Shell","54","55","String","isDoubleQuote","56","Switch","57","58","Trait","59","TraitAlias","trait","method","as","60","TraitPrecedence","instead","61","TraitUse","traits","adaptations","62","Unset","63","Variable","64","While","65","engine","tok","tokens","names","EOF","all_tokens","comment_tokens","mode_eval","asp_tags","short_tags","yyprevcol","keywords","__class__","T_CLASS_C","__trait__","T_TRAIT_C","__function__","T_FUNC_C","__method__","T_METHOD_C","__line__","T_LINE","__file__","T_FILE","__dir__","T_DIR","__namespace__","T_NS_C","exit","T_EXIT","die","function","T_FUNCTION","const","T_CONST","return","T_RETURN","try","T_TRY","catch","T_CATCH","finally","T_FINALLY","throw","T_THROW","if","T_IF","elseif","T_ELSEIF","endif","T_ENDIF","else","T_ELSE","while","T_WHILE","endwhile","T_ENDWHILE","do","T_DO","for","T_FOR","endfor","T_ENDFOR","foreach","T_FOREACH","endforeach","T_ENDFOREACH","declare","T_DECLARE","enddeclare","T_ENDDECLARE","instanceof","T_INSTANCEOF","T_AS","switch","T_SWITCH","endswitch","T_ENDSWITCH","case","T_CASE","default","T_DEFAULT","break","T_BREAK","continue","T_CONTINUE","goto","T_GOTO","echo","T_ECHO","print","T_PRINT","class","T_CLASS","interface","T_INTERFACE","T_TRAIT","T_EXTENDS","T_IMPLEMENTS","new","T_NEW","clone","T_CLONE","var","T_VAR","eval","T_EVAL","include","T_INCLUDE","include_once","T_INCLUDE_ONCE","T_REQUIRE","require_once","T_REQUIRE_ONCE","namespace","T_NAMESPACE","use","T_USE","insteadof","T_INSTEADOF","global","T_GLOBAL","isset","T_ISSET","empty","T_EMPTY","__halt_compiler","T_HALT_COMPILER","static","T_STATIC","abstract","T_ABSTRACT","final","T_FINAL","private","T_PRIVATE","protected","T_PROTECTED","public","T_PUBLIC","unset","T_UNSET","list","T_LIST","T_ARRAY","callable","T_CALLABLE","or","T_LOGICAL_OR","and","T_LOGICAL_AND","xor","T_LOGICAL_XOR","castKeywords","int","T_INT_CAST","integer","real","T_DOUBLE_CAST","double","float","string","T_STRING_CAST","binary","T_ARRAY_CAST","object","T_OBJECT_CAST","bool","T_BOOL_CAST","boolean","T_UNSET_CAST","setInput","input","size","yylineno","yytext","last_line","last_column","conditionStack","done","begin","ch","unput","last_col","first_col","c","tryMatch","text","ahead","tryMatchCaseless","consume","getState","setState","state","appendToken","lex","next","T_WHITESPACE","T_COMMENT","T_DOC_COMMENT","T_OPEN_TAG","T_OPEN_TAG_WITH_ECHO","condition","curCondition","stateCb","popState","pop","k","./lexer/comments.js","./lexer/initial.js","./lexer/numbers.js","./lexer/property.js","./lexer/scripting.js","./lexer/strings.js","./lexer/tokens.js","./lexer/utils.js","66","aspTagMode","tthis","is_WHITESPACE","67","nextINITIAL","matchINITIAL","T_INLINE_HTML","68","arch","MAX_LENGTH_OF_LONG","long_min_digits","consume_NUM","hasPoint","is_HEX","consume_HNUM","consume_BNUM","is_NUM","consume_LNUM","T_DNUMBER","T_LNUMBER","_process","69","matchST_LOOKING_FOR_PROPERTY","T_OBJECT_OPERATOR","is_LABEL_START","consume_LABEL","T_STRING","matchST_LOOKING_FOR_VARNAME","T_STRING_VARNAME","matchST_VAR_OFFSET","T_NUM_STRING","T_VARIABLE","T_ENCAPSED_AND_WHITESPACE","is_TOKEN","70","matchST_IN_SCRIPTING","consume_TOKEN","T_CONSTANT_ENCAPSED_STRING","ST_DOUBLE_QUOTES","nextCH","T_CLOSE_TAG","71","is_HEREDOC","revert","is_TABSPACE","tChar","yyoffset","is_LABEL","yylabel","heredoc_label","T_START_HEREDOC","prefix","isDOC_MATCH","matchST_NOWDOC","T_END_HEREDOC","matchST_HEREDOC","T_DOLLAR_OPEN_CURLY_BRACES","consume_VARIABLE","T_CURLY_OPEN","matchST_BACKQUOTE","matchST_DOUBLE_QUOTES","72","id","T_YIELD_FROM","T_YIELD","tokenTerminals","$","-","nchar","T_DEC","T_MINUS_EQUAL","\\","T_NS_SEPARATOR","/","T_DIV_EQUAL",":","T_DOUBLE_COLON","(","initial","consume_TABSPACE","yylen","castToken","castId","=","T_DOUBLE_ARROW","T_IS_IDENTICAL","T_IS_EQUAL","+","T_INC","T_PLUS_EQUAL","!","T_IS_NOT_IDENTICAL","T_IS_NOT_EQUAL","?","T_COALESCE","<","T_SL_EQUAL","T_SL","T_SPACESHIP","T_IS_SMALLER_OR_EQUAL",">","T_IS_GREATER_OR_EQUAL","T_SR_EQUAL","T_SR","*","T_MUL_EQUAL","T_POW_EQUAL","T_POW",".","T_CONCAT_EQUAL","T_ELLIPSIS","%","T_MOD_EQUAL","&","T_AND_EQUAL","T_BOOLEAN_AND","|","T_OR_EQUAL","T_BOOLEAN_OR","^","T_XOR_EQUAL","73","charCodeAt","indexOf","is_NEWLINE","74","isNumber","isNaN","parseFloat","isFinite","ast","_gracefulProxy","_graceful","prev","debug","extractDoc","suppressErrors","lastError","startAt","entries","SCALAR","T_MAGIC_CONST","T_MEMBER_FLAGS","VARIABLE","EOS","EXPR","getTokenName","values","parse","_errors","currentNamespace","innerList","program","childs","nextWithComments","read_start","undefined","raiseError","msgExpect","expect","error","msg","symbol","expectEndOfStatement","ignoreStack","showlog","stack","split","trim","found","console","log","ignoreComments","is","read_token","./parser/array.js","./parser/class.js","./parser/comment.js","./parser/expr.js","./parser/function.js","./parser/if.js","./parser/loops.js","./parser/main.js","./parser/namespace.js","./parser/scalar.js","./parser/statement.js","./parser/switch.js","./parser/try.js","./parser/utils.js","./parser/variable.js","75","ArrayExpr","ArrayEntry","read_array","read_array_pair_list","read_variable","read_expr","read_dim_offset","76","read_class","flag","propName","propExtends","propImplements","read_namespace_name","read_name_list","read_class_body","read_class_scope","read_member_flags","variables","read_variable_list","read_function","constants","read_constant_list","read_trait_use_statement","read_doc_comment","read_comment","read_list","asInterface","idx","val","read_interface","read_interface_body","read_function_declaration","read_trait","read_trait_use_alias","alias","77","docSplit","78","read_expr_item","trueArg","recursive_variable_chain_scan","read_dereferencable","read_function_argument_list","read_encapsed_string","assign","isInner","assignList","read_assignment_list","hasItem","read_new_expr","arg","read_scalar","read_class_name_reference","read_static_getter","read_assignment_list_element","79","is_reference","is_variadic","closure","read_code_block","nodeName","returnType","params","read_parameter_list","read_lexical_var","read_type","read_parameter","read_argument_list","80","read_if","read_if_expr","read_elseif_short","read_else_short","read_inner_statement","read_statement","81","read_while","read_short_form","read_do","read_for","read_foreach","read_foreach_variable","82","read_namespace","read_top_statement","83","read_top_statements","read_use_statements","read_use_statement_mixed","item","read_inline_use_declaration","ns","read_use_statement","ignoreType","84","specialChar","\\r","\\n","\\t","\\v","fromCharCode","\\e","\\f","\\\\","\\$","\\\"","\\'","resolve_special_chars","replace","seq","get_magic_constant","isBinCast","err","read_encapsed_string_item","first","85","statement","read_const_list","read_inner_statements","read_declare_list","read_switch","read_simple_variable","current","withParanthesis","options","read_try","top","86","read_switch_case_list","read_case_list","stopToken","87","allways","catches","exName","varName","exception","88","separator","preserveFirstSeparator","89","read_only","encapsed","read_reference_variable","literal","from","getter","recursive_scan_loop","read_encaps_var_offset","isDblQuote","90","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","php-parser","combine","to","keys","bind","parseEval","buffer","parseCode","tokenGetAll","entry","hasOwnProperty","./ast","./lexer","./parser","./tokens"],"mappings":"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","file":"php-parser.min.js"} \ No newline at end of file +{"version":3,"sources":["php-parser.js"],"names":["require","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length","1","module","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","this","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","2","Location","Position","AST","withPositions","withSource","position","parser","lexer","yylloc","first_line","first_column","first_offset","prepare","kind","start","self","location","slice","src","_input","substring","offset","prev_offset","prev_line","prev_column","shift","node","result","Object","create","forEach","ctor","constructor","toLowerCase","./ast/array","./ast/assign","./ast/bin","./ast/block","./ast/bool","./ast/boolean","./ast/break","./ast/call","./ast/case","./ast/cast","./ast/catch","./ast/class","./ast/classconstant","./ast/clone","./ast/closure","./ast/coalesce","./ast/constant","./ast/constref","./ast/continue","./ast/declare","./ast/do","./ast/doc","./ast/echo","./ast/empty","./ast/encapsed","./ast/entry","./ast/error","./ast/eval","./ast/exit","./ast/expression","./ast/for","./ast/foreach","./ast/function","./ast/global","./ast/goto","./ast/halt","./ast/identifier","./ast/if","./ast/include","./ast/inline","./ast/interface","./ast/isset","./ast/label","./ast/list","./ast/literal","./ast/location","./ast/magic","./ast/method","./ast/namespace","./ast/new","./ast/node","./ast/nowdoc","./ast/number","./ast/offsetlookup","./ast/parameter","./ast/parenthesis","./ast/position","./ast/post","./ast/pre","./ast/print","./ast/program","./ast/property","./ast/propertylookup","./ast/retif","./ast/return","./ast/shell","./ast/silent","./ast/static","./ast/staticlookup","./ast/string","./ast/switch","./ast/throw","./ast/trait","./ast/traitalias","./ast/traitprecedence","./ast/traituse","./ast/try","./ast/unary","./ast/unset","./ast/usegroup","./ast/useitem","./ast/variable","./ast/variadic","./ast/while","./ast/yield","./ast/yieldfrom","3","Expr","KIND","extends","shortForm","items","./expression","4","Statement","Assign","left","right","operator","./statement","5","Operation","precedence","+","-",".","*","/","%","Bin","type","lLevel","rLevel","buffer","./operation","6","Block","children","7","Bool","8","Literal","Boolean","value","./literal","9","Node","Break","level","./node","10","Call","what","11","Case","test","body","12","Cast","13","Catch","variable","14","Declaration","Class","ext","impl","flags","isAnonymous","implements","parseFlags","./declaration","15","Constant","ClassConstant","./constant","16","Clone","17","Closure","byref","nullable","18","Coalesce","ifnull","19","20","ConstRef","identifier","21","Continue","22","IS_PUBLIC","IS_PROTECTED","IS_PRIVATE","isAbstract","isFinal","visibility","isStatic","23","Declare","mode","MODE_SHORT","MODE_BLOCK","MODE_NONE","./block","24","Do","25","Doc","isDoc","lines","26","Sys","Echo","./sys","27","Empty","28","Encapsed","TYPE_STRING","TYPE_SHELL","TYPE_HEREDOC","29","Entry","key","30","message","token","line","expected","31","Eval","source","32","Exit","status","33","Expression","34","For","init","increment","35","Foreach","36","fn","37","Global","38","Goto","label","39","Halt","after","40","Identifier","isRelative","resolution","RELATIVE_NAME","UNQUALIFIED_NAME","FULL_QUALIFIED_NAME","QUALIFIED_NAME","join","41","If","alternate","42","Include","target","43","Inline","44","Interface","45","Isset","46","Label","47","List","48","49","end","50","Lookup","51","Magic","52","Method","./function","53","Namespace","withBrackets","./identifier","54","New","55","loc","56","Nowdoc","57","_Number","58","OffsetLookup","./lookup","59","60","Parameter","isRef","isVariadic","variadic","61","Parenthesis","inner","62","column","63","Post","64","Pre","65","Print","66","Program","errors","67","Property","68","PropertyLookup","69","RetIf","trueExpr","falseExpr","70","Return","expr","71","Shell","72","Silent","73","74","Static","75","StaticLookup","76","String","isDoubleQuote","77","Switch","78","79","Throw","80","Trait","81","TraitAlias","trait","method","as","82","TraitPrecedence","instead","83","TraitUse","traits","adaptations","84","Try","catches","always","85","Unary","86","Unset","87","UseGroup","88","UseItem","alias","TYPE_CONST","TYPE_FUNCTION","89","Variable","90","Variadic","91","While","92","Yield","93","YieldFrom","94","engine","tok","tokens","names","EOF","debug","all_tokens","comment_tokens","mode_eval","asp_tags","short_tags","yyprevcol","keywords","__class__","T_CLASS_C","__trait__","T_TRAIT_C","__function__","T_FUNC_C","__method__","T_METHOD_C","__line__","T_LINE","__file__","T_FILE","__dir__","T_DIR","__namespace__","T_NS_C","exit","T_EXIT","die","function","T_FUNCTION","const","T_CONST","return","T_RETURN","try","T_TRY","catch","T_CATCH","finally","T_FINALLY","throw","T_THROW","if","T_IF","elseif","T_ELSEIF","endif","T_ENDIF","else","T_ELSE","while","T_WHILE","endwhile","T_ENDWHILE","do","T_DO","for","T_FOR","endfor","T_ENDFOR","foreach","T_FOREACH","endforeach","T_ENDFOREACH","declare","T_DECLARE","enddeclare","T_ENDDECLARE","instanceof","T_INSTANCEOF","T_AS","switch","T_SWITCH","endswitch","T_ENDSWITCH","case","T_CASE","default","T_DEFAULT","break","T_BREAK","continue","T_CONTINUE","goto","T_GOTO","echo","T_ECHO","print","T_PRINT","class","T_CLASS","interface","T_INTERFACE","T_TRAIT","T_EXTENDS","T_IMPLEMENTS","new","T_NEW","clone","T_CLONE","var","T_VAR","eval","T_EVAL","include","T_INCLUDE","include_once","T_INCLUDE_ONCE","T_REQUIRE","require_once","T_REQUIRE_ONCE","namespace","T_NAMESPACE","use","T_USE","insteadof","T_INSTEADOF","global","T_GLOBAL","isset","T_ISSET","empty","T_EMPTY","__halt_compiler","T_HALT_COMPILER","static","T_STATIC","abstract","T_ABSTRACT","final","T_FINAL","private","T_PRIVATE","protected","T_PROTECTED","public","T_PUBLIC","unset","T_UNSET","list","T_LIST","T_ARRAY","callable","T_CALLABLE","or","T_LOGICAL_OR","and","T_LOGICAL_AND","xor","T_LOGICAL_XOR","castKeywords","int","T_INT_CAST","integer","real","T_DOUBLE_CAST","double","float","string","T_STRING_CAST","binary","T_ARRAY_CAST","object","T_OBJECT_CAST","bool","T_BOOL_CAST","boolean","T_UNSET_CAST","setInput","input","size","yylineno","yytext","last_line","last_column","conditionStack","done","begin","ch","unput","c","tryMatch","text","ahead","tryMatchCaseless","consume","getState","setState","state","appendToken","lex","next","T_WHITESPACE","T_COMMENT","T_DOC_COMMENT","T_OPEN_TAG","T_OPEN_TAG_WITH_ECHO","condition","curCondition","stateCb","popState","pop","tName","values","console","log","k","./lexer/comments.js","./lexer/initial.js","./lexer/numbers.js","./lexer/property.js","./lexer/scripting.js","./lexer/strings.js","./lexer/tokens.js","./lexer/utils.js","95","aspTagMode","is_WHITESPACE","96","nextINITIAL","matchINITIAL","T_INLINE_HTML","97","arch","MAX_LENGTH_OF_LONG","long_min_digits","consume_NUM","hasPoint","is_HEX","consume_HNUM","consume_BNUM","is_NUM","consume_LNUM","T_DNUMBER","T_LNUMBER","_process","98","matchST_LOOKING_FOR_PROPERTY","T_OBJECT_OPERATOR","is_LABEL_START","consume_LABEL","T_STRING","matchST_LOOKING_FOR_VARNAME","T_STRING_VARNAME","matchST_VAR_OFFSET","T_NUM_STRING","T_VARIABLE","T_ENCAPSED_AND_WHITESPACE","is_TOKEN","99","matchST_IN_SCRIPTING","consume_TOKEN","T_CONSTANT_ENCAPSED_STRING","ST_DOUBLE_QUOTES","nextCH","T_CLOSE_TAG","100","is_HEREDOC","revert","is_TABSPACE","tChar","yyoffset","is_LABEL","yylabel","heredoc_label","T_START_HEREDOC","prefix","isDOC_MATCH","matchST_NOWDOC","T_END_HEREDOC","matchST_HEREDOC","T_DOLLAR_OPEN_CURLY_BRACES","consume_VARIABLE","T_CURLY_OPEN","matchST_BACKQUOTE","matchST_DOUBLE_QUOTES","101","id","T_YIELD_FROM","T_YIELD","tokenTerminals","$","nchar","T_DEC","T_MINUS_EQUAL","\\","T_NS_SEPARATOR","T_DIV_EQUAL",":","T_DOUBLE_COLON","(","initial","consume_TABSPACE","yylen","castToken","castId","=","T_DOUBLE_ARROW","T_IS_IDENTICAL","T_IS_EQUAL","T_INC","T_PLUS_EQUAL","!","T_IS_NOT_IDENTICAL","T_IS_NOT_EQUAL","?","T_COALESCE","<","T_SL_EQUAL","T_SL","T_SPACESHIP","T_IS_SMALLER_OR_EQUAL",">","T_IS_GREATER_OR_EQUAL","T_SR_EQUAL","T_SR","T_MUL_EQUAL","T_POW_EQUAL","T_POW","T_CONCAT_EQUAL","T_ELLIPSIS","T_MOD_EQUAL","&","T_AND_EQUAL","T_BOOLEAN_AND","|","T_OR_EQUAL","T_BOOLEAN_OR","^","T_XOR_EQUAL","102","charCodeAt","indexOf","103","isNumber","isNaN","parseFloat","isFinite","ast","prev","extractDoc","suppressErrors","entries","VARIABLE","SCALAR","T_MAGIC_CONST","T_MEMBER_FLAGS","EOS","EXPR","getTokenName","parse","filename","_errors","currentNamespace","innerList","program","childs","nextWithComments","read_start","undefined","isArray","raiseError","msgExpect","expect","err","SyntaxError","lineNumber","fileName","columnNumber","error","msg","symbol","expectEndOfStatement","ignoreStack","showlog","stack","split","trim","found","ignoreComments","is","./parser/array.js","./parser/class.js","./parser/comment.js","./parser/expr.js","./parser/function.js","./parser/if.js","./parser/loops.js","./parser/main.js","./parser/namespace.js","./parser/scalar.js","./parser/statement.js","./parser/switch.js","./parser/try.js","./parser/utils.js","./parser/variable.js","104","ArrayExpr","ArrayEntry","read_array","read_array_pair_list","read_variable","read_expr","read_dim_offset","105","read_class","flag","propName","propExtends","propImplements","read_namespace_name","read_name_list","read_class_body","read_class_scope","read_member_flags","variables","read_variable_list","read_function","constants","read_constant_list","read_trait_use_statement","read_doc_comment","read_comment","read_list","asInterface","idx","val","read_interface","read_interface_body","read_function_declaration","read_trait","read_trait_use_alias","106","docSplit","107","read_expr_item","trueArg","recursive_variable_chain_scan","read_dereferencable","read_function_argument_list","read_encapsed_string","assign","isInner","assignList","read_assignment_list","hasItem","read_new_expr","arg","read_scalar","read_class_name_reference","read_static_getter","read_assignment_list_element","108","is_reference","is_variadic","closure","read_code_block","nodeName","returnType","params","read_parameter_list","read_lexical_var","read_type","read_parameter","wasVariadic","argument","read_argument_list","109","read_if","read_if_expr","read_elseif_short","read_else_short","read_inner_statement","read_statement","110","read_while","read_short_form","read_do","read_for","read_foreach","read_foreach_variable","111","read_namespace","read_top_statement","112","read_top_statements","relative","read_use_statement","read_use_type","read_use_declaration","read_use_declarations","typed","read_use_alias","useitem","113","specialChar","\\r","\\n","\\t","\\v","fromCharCode","\\e","\\f","\\\\","\\$","\\\"","\\'","resolve_special_chars","replace","seq","get_magic_constant","lastCh","read_encapsed_string_item","varName","read_simple_variable","read_encaps_var_offset","encapsed","114","statement","read_const_list","read_inner_statements","read_declare_list","read_switch","current","read_variable_declarations","read_try","top","115","read_switch_case_list","read_case_list","stopToken","116","item","117","separator","preserveFirstSeparator","118","read_only","read_reference_variable","literal","recursive_scan_loop","isDblQuote","num","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","php-parser","combine","to","keys","bind","options","parseEval","parseCode","tokenGetAll","entry","hasOwnProperty","./ast","./lexer","./parser","./tokens"],"mappings":"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","file":"php-parser.min.js"} \ No newline at end of file diff --git a/docs/AST.md b/docs/AST.md index 31d9cc893..d7b4bea1d 100644 --- a/docs/AST.md +++ b/docs/AST.md @@ -19,7 +19,10 @@ - [Expression](#expression) - [Array](#array) - [Variable](#variable) + - [Variadic](#variadic) - [ConstRef](#constref) + - [Yield](#yield) + - [YieldFrom](#yieldfrom) - [Lookup](#lookup) - [PropertyLookup](#propertylookup) - [StaticLookup](#staticlookup) @@ -29,6 +32,7 @@ - [Pre](#pre) - [Post](#post) - [Bin](#bin) + - [Parenthesis](#parenthesis) - [Bool](#Bool) - [Unary](#unary) - [Cast](#cast) @@ -39,11 +43,16 @@ - [Inline](#inline) - [Magic](#magic) - [Shell](#shell) + - [Nowdoc](#nowdoc) + - [Encapsed](#encapsed) - [Statement](#statement) - [Eval](#eval) - [Exit](#exit) + - [Halt](#halt) - [Clone](#clone) + - [Declare](#declare) - [Global](#global) + - [Static](#static) - [Include](#include) - [Assign](#assign) - [RetIf](#retif) @@ -57,6 +66,7 @@ - [Silent](#silent) - [Try](#try) - [Catch](#catch) + - [Throw](#throw) - [Call](#call) - [Closure](#closure) - [New](#new) @@ -221,6 +231,10 @@ Defines a boolean value (true/false) A break statement +**Properties** + +- `level` **([Number](#number) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** + # Call **Extends Statement** @@ -365,6 +379,10 @@ A constant reference A continue statement +**Properties** + +- `level` **([Number](#number) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** + # Declaration **Extends Statement** @@ -385,6 +403,59 @@ Generic flags parser Returns **void** +# Declare + +**Extends Block** + +The declare construct is used to set execution directives for a block of code + +**Properties** + +- `what` **[Array](#array)<[Expression](#expression)>** +- `mode` **[String](#string)** + +## MODE_SHORT + +The node is declared as a short tag syntax : + +```php + | [Array](#array)<[Assign](#assign)>)** -Defines inline html output (treated as echo output) +# StaticLookup -**Properties** +**Extends Lookup** -- `isDoubleQuote` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** +Lookup to a static property # Switch @@ -922,6 +1080,16 @@ Defines system based call - `arguments` **[Array](#array)<[Node](#node)>** +# Throw + +**Extends Statement** + +Defines a throw statement + +**Properties** + +- `what` **[Expression](#expression)** + # Trait **Extends Declaration** @@ -1035,6 +1203,16 @@ be any expression in general, an expression can also be a pattern. - `name` **([String](#string) \| [Node](#node))** - `byref` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** +# Variadic + +**Extends Expression** + +Introduce a list of items into the arguments of the call + +**Properties** + +- `what` **([Array](#array) \| [Expression](#expression))** + # While **Extends Statement** @@ -1046,3 +1224,24 @@ Defines a while statement - `test` **[Expression](#expression)** - `body` **[Statement](#statement)** - `shortForm` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** + +# Yield + +**Extends Expression** + +Defines a yield generator statement + +**Properties** + +- `value` **([Expression](#expression) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** +- `key` **([Expression](#expression) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** + +# YieldFrom + +**Extends Expression** + +Defines a yield from generator statement + +**Properties** + +- `value` **[Expression](#expression)** diff --git a/docs/README.md b/docs/README.md index 8c6ec8ff1..f63f080cf 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,11 +2,36 @@ # engine +Initialise a new parser instance with the specified options + +Usage : + +```js +var parser = require('php-parser'); +var instance = new parser({ + parser: { + extractDoc: true, + suppressErrors: true + }, + ast: { + withPositions: true + }, + lexer: { + short_tags: true, + asp_tags: true + } +}); + +var evalAST = instance.parseEval('some php code'); +var codeAST = instance.parseCode(' Note that the output tokens are _STRICLY_ similar to PHP function `token_get_all` **Parameters** -- `buffer` -- `options` - -## tokenGetAll - -split the buffer into tokens - -**Parameters** +- `buffer` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** -- `buffer` -- `options` +Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>** Each item can be a string or an array with following informations [token_name, text, line_number] diff --git a/docs/lexer.md b/docs/lexer.md index 50c7c5905..6b6ef50f8 100644 --- a/docs/lexer.md +++ b/docs/lexer.md @@ -56,6 +56,10 @@ Sets the current lexer state - `state` +# T_COMMENT + +Reads a single line comment + # T_DOC_COMMENT Behaviour : diff --git a/docs/parser.md b/docs/parser.md index f0eee7a18..e1edbd75a 100644 --- a/docs/parser.md +++ b/docs/parser.md @@ -2,7 +2,9 @@ # parser -The PHP Parser class +The PHP Parser class that build the AST tree from the lexer + +Type: Parser **Parameters** @@ -11,11 +13,12 @@ The PHP Parser class **Properties** -- `EOF` **Integer** -- `lexer` **Lexer** -- `token` **(Integer | [String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** -- `extractDoc` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -- `debug` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** +- `lexer` **Lexer** current lexer instance +- `ast` **AST** the AST factory instance +- `token` **(Integer | [String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** current token +- `extractDoc` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** should extract documentation as AST node +- `suppressErrors` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** should ignore parsing errors and continue +- `debug` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** should output debug informations ## getTokenName @@ -32,6 +35,7 @@ main entry point : converts a source code to AST **Parameters** - `code` +- `filename` ## raiseError @@ -111,10 +115,6 @@ Check if token is of specified type - `type` -## read_token - -convert an token to ast \* - # ignoreStack outputs some debug information on current token \* @@ -541,15 +541,21 @@ Handles the dereferencing # read_encapsed_string_item +Reads and extracts an encapsed item + ```ebnf encapsed_string_item ::= T_ENCAPSED_AND_WHITESPACE | T_DOLLAR_OPEN_CURLY_BRACES expr '}' | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' - | variable | T_CURLY_OPEN variable '}' + | variable + | variable '[' expr ']' + | variable T_OBJECT_OPERATOR T_STRING ``` +Returns **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | Variable | Expr | Lookup)** + # read_encapsed_string Reads an encapsed string @@ -599,7 +605,7 @@ Reads a list of constants declaration Reads a list of constants declaration ```ebnf - const_list ::= T_CONST T_STRING '=' expr (',' T_STRING '=' expr)* + declare_list ::= T_STRING '=' expr (',' T_STRING '=' expr)* ``` # read_inner_statement @@ -688,6 +694,24 @@ Sample code : Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<Identifier>** +# read_variable_declarations + +Reads a list of variables declarations + +```ebnf +variable_declaration ::= T_VARIABLE ('=' expr)?* +variable_declarations ::= variable_declaration (',' variable_declaration)* +``` + +Sample code : + +```php + | [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<Assign>)** Returns an array composed by a list of variables, or +assign values + # read_variable Reads a variable diff --git a/package.json b/package.json index 0f932c123..3eedbd2d6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "php-parser", "version": "1.0.0", - "description": "Parse PHP code with NodeJS and convert it to AST", + "description": "Parse PHP 5/7 code and returns its AST", "main": "src/index.js", "scripts": { "test": "node node_modules/mocha/bin/mocha test --stack-size=5000", diff --git a/src/ast.js b/src/ast.js index dacef3f35..01f35dc4a 100644 --- a/src/ast.js +++ b/src/ast.js @@ -25,7 +25,10 @@ var Position = require('./ast/position'); * - [Expression](#expression) * - [Array](#array) * - [Variable](#variable) + * - [Variadic](#variadic) * - [ConstRef](#constref) + * - [Yield](#yield) + * - [YieldFrom](#yieldfrom) * - [Lookup](#lookup) * - [PropertyLookup](#propertylookup) * - [StaticLookup](#staticlookup) @@ -35,6 +38,7 @@ var Position = require('./ast/position'); * - [Pre](#pre) * - [Post](#post) * - [Bin](#bin) + * - [Parenthesis](#parenthesis) * - [Bool](#Bool) * - [Unary](#unary) * - [Cast](#cast) @@ -45,11 +49,16 @@ var Position = require('./ast/position'); * - [Inline](#inline) * - [Magic](#magic) * - [Shell](#shell) + * - [Nowdoc](#nowdoc) + * - [Encapsed](#encapsed) * - [Statement](#statement) * - [Eval](#eval) * - [Exit](#exit) + * - [Halt](#halt) * - [Clone](#clone) + * - [Declare](#declare) * - [Global](#global) + * - [Static](#static) * - [Include](#include) * - [Assign](#assign) * - [RetIf](#retif) @@ -63,6 +72,7 @@ var Position = require('./ast/position'); * - [Silent](#silent) * - [Try](#try) * - [Catch](#catch) + * - [Throw](#throw) * - [Call](#call) * - [Closure](#closure) * - [New](#new) @@ -189,19 +199,23 @@ AST.prototype.prepare = function(kind, parser) { require('./ast/constant'), require('./ast/constref'), require('./ast/continue'), + require('./ast/declare'), require('./ast/do'), require('./ast/doc'), require('./ast/echo'), require('./ast/empty'), + require('./ast/encapsed'), require('./ast/entry'), require('./ast/error'), require('./ast/eval'), require('./ast/exit'), + require('./ast/expression'), require('./ast/for'), require('./ast/foreach'), require('./ast/function'), require('./ast/global'), require('./ast/goto'), + require('./ast/halt'), require('./ast/identifier'), require('./ast/if'), require('./ast/include'), @@ -215,9 +229,12 @@ AST.prototype.prepare = function(kind, parser) { require('./ast/method'), require('./ast/namespace'), require('./ast/new'), + require('./ast/node'), + require('./ast/nowdoc'), require('./ast/number'), require('./ast/offsetlookup'), require('./ast/parameter'), + require('./ast/parenthesis'), require('./ast/post'), require('./ast/pre'), require('./ast/print'), @@ -228,9 +245,11 @@ AST.prototype.prepare = function(kind, parser) { require('./ast/return'), require('./ast/shell'), require('./ast/silent'), + require('./ast/static'), require('./ast/staticlookup'), require('./ast/string'), require('./ast/switch'), + require('./ast/throw'), require('./ast/trait'), require('./ast/traitalias'), require('./ast/traitprecedence'), @@ -241,7 +260,10 @@ AST.prototype.prepare = function(kind, parser) { require('./ast/usegroup'), require('./ast/useitem'), require('./ast/variable'), - require('./ast/while') + require('./ast/variadic'), + require('./ast/while'), + require('./ast/yield'), + require('./ast/yieldfrom') ].forEach(function (ctor) { var kind = ctor.prototype.constructor.name.toLowerCase(); if (kind[0] === '_') kind = kind.substring(1); diff --git a/src/ast/bin.js b/src/ast/bin.js index 0ff83bfcf..96a97b0bb 100644 --- a/src/ast/bin.js +++ b/src/ast/bin.js @@ -8,6 +8,16 @@ var Operation = require('./operation'); var KIND = 'bin'; +// define nodes shifting +var precedence = { + '+': 1, + '-': 1, + '.': 1, + '*': 2, + '/': 2, + '%': 2 +}; + /** * Binary operations * @constructor Bin @@ -18,6 +28,20 @@ var KIND = 'bin'; */ var Bin = Operation.extends(function Bin(type, left, right, location) { Operation.apply(this, [KIND, location]); + if (right && right.kind === 'bin') { + var lLevel = precedence[type]; + var rLevel = precedence[right.type]; + if (lLevel && rLevel && rLevel < lLevel) { + // shift precedence + var buffer = right.right; + right.right = right.left; + right.left = left; + left = buffer; + buffer = right.type; + right.type = type; + type = buffer; + } + } this.type = type; this.left = left; this.right = right; diff --git a/src/ast/break.js b/src/ast/break.js index 47a4dd5ba..9efd19a5d 100644 --- a/src/ast/break.js +++ b/src/ast/break.js @@ -11,9 +11,11 @@ var KIND = 'break'; * A break statement * @constructor Break * @extends {Node} + * @property {Number|Null} level */ -var Break = Node.extends(function Break(location) { +var Break = Node.extends(function Break(level, location) { Node.apply(this, [KIND, location]); + this.level = level; }); module.exports = Break; diff --git a/src/ast/continue.js b/src/ast/continue.js index f2be946e5..65f2e9bff 100644 --- a/src/ast/continue.js +++ b/src/ast/continue.js @@ -11,9 +11,11 @@ var KIND = 'continue'; * A continue statement * @constructor Continue * @extends {Node} + * @property {Number|Null} level */ -var Continue = Node.extends(function Continue(location) { +var Continue = Node.extends(function Continue(level, location) { Node.apply(this, [KIND, location]); + this.level = level; }); module.exports = Continue; diff --git a/src/ast/declare.js b/src/ast/declare.js new file mode 100644 index 000000000..0b974c6f2 --- /dev/null +++ b/src/ast/declare.js @@ -0,0 +1,64 @@ +/*! + * Copyright (C) 2017 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ + +var Block = require('./block'); +var KIND = 'declare'; + +/** + * The declare construct is used to set execution directives for a block of code + * @constructor Declare + * @extends {Block} + * @property {Expression[]} what + * @property {String} mode + * @see http://php.net/manual/en/control-structures.declare.php + */ +var Declare = Block.extends(function Declare(what, body, mode, location) { + Block.apply(this, [KIND, body, location]); + this.what = what; + this.mode = mode; +}); + + +/** + * The node is declared as a short tag syntax : + * ```php + * Note that the output tokens are *STRICLY* similar to PHP function `token_get_all` + * @param {String} buffer + * @return {String[]} - Each item can be a string or an array with following informations [token_name, text, line_number] */ engine.prototype.tokenGetAll = function(buffer) { this.lexer.mode_eval = false; diff --git a/src/lexer/property.js b/src/lexer/property.js index a17b2c04c..55b75c8b6 100644 --- a/src/lexer/property.js +++ b/src/lexer/property.js @@ -9,13 +9,17 @@ module.exports = { if (ch === '-') { ch = this.input(); if (ch === '>') { + // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1296 return this.tok.T_OBJECT_OPERATOR; } this.unput(1); } else if (this.is_LABEL_START()) { + // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1300 this.consume_LABEL(); + this.popState(); return this.tok.T_STRING; } + // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1306 this.popState(); this.unput(1); return false; diff --git a/src/lexer/utils.js b/src/lexer/utils.js index eed1517b3..5d311a1d1 100644 --- a/src/lexer/utils.js +++ b/src/lexer/utils.js @@ -52,11 +52,6 @@ module.exports = { var ch = this._input[this.offset - 1]; return tokens.indexOf(ch) !== -1; }, - // check if current char is a newline - is_NEWLINE: function() { - var ch = this._input[this.offset - 1]; - return ch === '\n' || ch === '\r'; - }, // check if current char is a whitespace is_WHITESPACE: function() { var ch = this._input[this.offset - 1]; diff --git a/src/parser.js b/src/parser.js index ca54eb02b..a4af965c9 100644 --- a/src/parser.js +++ b/src/parser.js @@ -13,37 +13,39 @@ function isNumber(n) { /** - * The PHP Parser class - * - * @public @constructor {Parser} - * @property {Integer} EOF - * @property {Lexer} lexer - * @property {Integer|String} token - * @property {Boolean} extractDoc - * @property {Boolean} debug + * The PHP Parser class that build the AST tree from the lexer + * @constructor {Parser} + * @property {Lexer} lexer - current lexer instance + * @property {AST} ast - the AST factory instance + * @property {Integer|String} token - current token + * @property {Boolean} extractDoc - should extract documentation as AST node + * @property {Boolean} suppressErrors - should ignore parsing errors and continue + * @property {Boolean} debug - should output debug informations */ var parser = function(lexer, ast) { this.lexer = lexer; this.ast = ast; this.tok = lexer.tok; this.EOF = lexer.EOF; - // Private vars, do not use directly - this._gracefulProxy = {}; - this._graceful = false; this.token = null; this.prev = null; this.debug = false; this.extractDoc = false; this.suppressErrors = false; - this.lastError = false; - this.startAt = []; this.entries = { + 'VARIABLE': [ + this.tok.T_VARIABLE, + '$', '&', + this.tok.T_NS_SEPARATOR, + this.tok.T_STRING, + this.tok.T_NAMESPACE, + this.tok.T_STATIC + ], 'SCALAR': [ this.tok.T_CONSTANT_ENCAPSED_STRING, this.tok.T_START_HEREDOC, this.tok.T_LNUMBER, this.tok.T_DNUMBER, - this.tok.T_STRING, this.tok.T_ARRAY,'[', this.tok.T_CLASS_C, this.tok.T_TRAIT_C, @@ -53,7 +55,6 @@ var parser = function(lexer, ast) { this.tok.T_FILE, this.tok.T_DIR, this.tok.T_NS_C, - this.tok.T_NAMESPACE, '"', 'b"', 'B"', @@ -78,13 +79,6 @@ var parser = function(lexer, ast) { this.tok.T_ABSTRACT, this.tok.T_FINAL ], - 'VARIABLE': [ - this.tok.T_VARIABLE, - '$', '&', - this.tok.T_NS_SEPARATOR, - this.tok.T_STRING, - this.tok.T_STATIC - ], 'EOS': [ ';', this.tok.T_CLOSE_TAG, @@ -156,8 +150,9 @@ parser.prototype.getTokenName = function(token) { /** * main entry point : converts a source code to AST */ -parser.prototype.parse = function(code) { +parser.prototype.parse = function(code, filename) { this._errors = []; + this.filename = filename || 'eval'; this.currentNamespace = ['']; this.lexer.setInput(code); this.lexer.comment_tokens = this.extractDoc; @@ -185,7 +180,13 @@ parser.prototype.parse = function(code) { parser.prototype.raiseError = function(message, msgExpect, expect, token) { message += ' on line ' + this.lexer.yylloc.first_line; if (!this.suppressErrors) { - throw new Error(message); + var err = new SyntaxError( + message, this.filename, this.lexer.yylloc.first_line + ); + err.lineNumber = this.lexer.yylloc.first_line; + err.fileName = this.filename; + err.columnNumber = this.lexer.yylloc.first_column + throw err; } // Error node : var node = this.ast.prepare('error', this)( @@ -364,16 +365,6 @@ parser.prototype.is = function(type) { } }; -/** convert an token to ast **/ -parser.prototype.read_token = function() { - var result = this.token; - if (isNumber(result)) { - result = [result, this.text(), this.lexer.yylloc.first_line]; - } - this.next(); - return result; -}; - // extends the parser with syntax files [ require('./parser/array.js'), diff --git a/src/parser/array.js b/src/parser/array.js index 5f7de6293..f1bbd4344 100644 --- a/src/parser/array.js +++ b/src/parser/array.js @@ -20,13 +20,14 @@ module.exports = { var items = []; var result = this.node(ArrayExpr); - this.expect([this.tok.T_ARRAY, '[']); - - if (this.token == this.tok.T_ARRAY) { + if (this.token === this.tok.T_ARRAY) { this.next().expect('('); + expect = ')'; } else { shortForm = true; + expect = ']'; } + if (this.next().token != expect) { while(this.token != this.EOF) { items.push(this.read_array_pair_list()); @@ -38,7 +39,7 @@ module.exports = { } else break; } } - this.expect(shortForm ? ']' : ')'); + this.expect(expect); this.next(); return result(shortForm, items); }, diff --git a/src/parser/expr.js b/src/parser/expr.js index 9be20b6af..ad333d705 100644 --- a/src/parser/expr.js +++ b/src/parser/expr.js @@ -120,8 +120,10 @@ module.exports = { } if (this.token === '(') { + var node = this.node('parenthesis'); var expr = this.next().read_expr(); this.expect(')') && this.next(); + expr = node(expr); // handle dereferencable if (this.token === this.tok.T_OBJECT_OPERATOR) { return this.recursive_variable_chain_scan(expr, false); @@ -313,20 +315,23 @@ module.exports = { // T_YIELD (expr (T_DOUBLE_ARROW expr)?)? case this.tok.T_YIELD: - var result = ['yield', null, null]; + var result = this.node('yield'), value = null, key = null; if (this.next().is('EXPR')) { // reads the yield return value - result[1] = this.read_expr(); + value = this.read_expr(); if (this.token === this.tok.T_DOUBLE_ARROW) { // reads the yield returned key - result[2] = this.next().read_expr(); + key = value; + value = this.next().read_expr(); } } - return result; + return result(value, key); // T_YIELD_FROM expr case this.tok.T_YIELD_FROM: - return ['yieldfrom', this.next().read_expr()]; + var result = this.node('yieldfrom'); + var expr = this.next().read_expr(); + return result(expr); case this.tok.T_FUNCTION: // @fixme later - removed static lambda function declarations (colides with static keyword usage) @@ -469,7 +474,11 @@ module.exports = { * ``` */ ,read_class_name_reference: function() { - if (this.token === '\\' || this.token === this.tok.T_STRING) { + if ( + this.token === this.tok.T_NS_SEPARATOR || + this.token === this.tok.T_STRING || + this.token === this.tok.T_NAMESPACE + ) { var result = this.read_namespace_name(); if (this.token === this.tok.T_DOUBLE_COLON) { result = this.read_static_getter(result); diff --git a/src/parser/function.js b/src/parser/function.js index 1e6bc44e2..113b83c61 100644 --- a/src/parser/function.js +++ b/src/parser/function.js @@ -178,10 +178,17 @@ module.exports = { */ ,read_function_argument_list: function() { var result = []; + var wasVariadic = false; this.expect('(') && this.next(); if (this.token !== ')') { while(this.token != this.EOF) { - result.push(this.read_argument_list()); + var argument = this.read_argument_list(); + result.push(argument); + if (argument.kind === 'variadic') { + wasVariadic = true; + } else if (wasVariadic) { + this.raiseError('Unexpected argument after a variadic argument'); + } if (this.token === ',') { this.next(); } else break; diff --git a/src/parser/loops.js b/src/parser/loops.js index 288444c90..6e9662db9 100644 --- a/src/parser/loops.js +++ b/src/parser/loops.js @@ -149,7 +149,7 @@ module.exports = { var assignList = this.read_assignment_list(); if (this.expect(')')) this.next(); return result(assignList); - } else if (this.token === '[') { + } else if (this.token === '[' || this.token === this.tok.T_ARRAY) { return this.read_array(); } else { return this.read_variable(false, false, false); diff --git a/src/parser/scalar.js b/src/parser/scalar.js index 400883bb5..d3f729132 100644 --- a/src/parser/scalar.js +++ b/src/parser/scalar.js @@ -49,20 +49,10 @@ module.exports = { case this.tok.T_CONSTANT_ENCAPSED_STRING: var value = this.node('string'); var text = this.text(); - var isDoubleQuote = false; - var isBinCast = value[0] === 'b' || value[0] === 'B'; - if (isBinCast) { - isDoubleQuote = text[1] === '"'; - text = text.substring(2, text.length - 1); - } else { - isDoubleQuote = text[0] === '"'; - text = text.substring(1, text.length - 1); - } + var isDoubleQuote = text[0] === '"'; + text = text.substring(1, text.length - 1); this.next(); value = value(isDoubleQuote, this.resolve_special_chars(text)); - if (isBinCast) { - value = ['cast', 'binary', value]; - } if (this.token === this.tok.T_DOUBLE_COLON) { // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1151 return this.read_static_getter(value); @@ -71,49 +61,49 @@ module.exports = { return value; } case this.tok.T_START_HEREDOC: - return this.next().read_encapsed_string( - this.tok.T_END_HEREDOC - ); + if (this.lexer.curCondition === 'ST_NOWDOC') { + var node = this.node('nowdoc'); + var value = this.next().text(); + // strip the last line return char + var lastCh = value[value.length-1]; + if (lastCh === '\n') { + if (value[value.length-2] === '\r') { + // windows style + value = value.substring(0, value.length - 2); + } else { + // linux style + value = value.substring(0, value.length - 1); + } + } else if (lastCh === '\r') { + // mac style + value = value.substring(0, value.length - 1); + } + this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE) && this.next(); + node = node(value, this.lexer.heredoc_label); + this.expect(this.tok.T_END_HEREDOC) && this.next(); + return node; + } else { + return this.next().read_encapsed_string( + this.tok.T_END_HEREDOC + ); + } + case '"': return this.next().read_encapsed_string('"'); + case 'b"': case 'B"': - return ['cast', 'binary', this.next().read_encapsed_string('"')]; + var node = this.node('cast'); + var what = this.next().read_encapsed_string('"'); + return node('binary', what); // NUMERIC - case '-': // long case this.tok.T_LNUMBER: // long case this.tok.T_DNUMBER: // double var result = this.node('number'); var value = this.text(); - if (this.token === '-') { - this.next().expect([this.tok.T_LNUMBER, this.tok.T_DNUMBER]); - value += this.text(); - } - result = result(value); this.next(); - return result; - - // CONSTANTS - case this.tok.T_NAMESPACE: - case this.tok.T_NS_SEPARATOR: - case this.tok.T_STRING: - var value = this.read_namespace_name(); - var result = ['constant', value]; - if ( this.token == this.tok.T_DOUBLE_COLON) { - // class constant MyClass::CONSTANT - if (this.next().expect([this.tok.T_STRING, this.tok.T_CLASS])) { - result[1] = [value, this.text()]; - this.next(); - } - } - // CONSTANT ARRAYS OFFSET : MYCONST[1][0]... - while(this.token === '[') { - var node = this.node('offsetlookup'); - var offset = this.next().read_expr(); - if (this.expect(']')) this.next(); - result = node(result, offset); - } + result = result(value); return result; // ARRAYS @@ -145,78 +135,124 @@ module.exports = { return result; } /** + * Reads and extracts an encapsed item * ```ebnf * encapsed_string_item ::= T_ENCAPSED_AND_WHITESPACE * | T_DOLLAR_OPEN_CURLY_BRACES expr '}' * | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' * | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' - * | variable * | T_CURLY_OPEN variable '}' + * | variable + * | variable '[' expr ']' + * | variable T_OBJECT_OPERATOR T_STRING * ``` + * @return {String|Variable|Expr|Lookup} + * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1219 */ ,read_encapsed_string_item: function() { - var result = null; + var result = this.node(); + + // plain text + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1222 if (this.token === this.tok.T_ENCAPSED_AND_WHITESPACE) { - result = this.node('string')(false, this.text()); + var text = this.text(); this.next(); - } else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { + result = result( + 'string', false, this.resolve_special_chars(text) + ); + } + + // dynamic variable name + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1239 + else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { + var name = null; if (this.next().token === this.tok.T_STRING_VARNAME) { - result = ['var', this.text()]; - if (this.next().token === '[') { + var varName = this.text().substring(1); + name = this.node('variable'); + this.next(); + name = name(varName, false); + // check if lookup an offset + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1243 + if (this.token === '[') { var node = this.node('offsetlookup'); var offset = this.next().read_expr(); - if (this.expect(']')) this.next(); - result = node(result, offset); + this.expect(']') && this.next(); + name = node(name, offset); } } else { - result = this.read_expr(); + name = this.read_expr(); } - if (this.expect('}')) this.next(); - } else if (this.token === this.tok.T_CURLY_OPEN) { + this.expect('}') && this.next(); + result = result('variable', name, false); + } + + // expression + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1246 + else if (this.token === this.tok.T_CURLY_OPEN) { result = this.next().read_variable(false, false, false); - if (this.expect('}')) this.next(); - } else if (this.token === '[') { - var node = this.node('offsetlookup'); - var offset = this.next().read_expr(); - if (this.expect(']')) this.next(); - result = node(result, offset); - } else if (this.token === this.tok.T_VARIABLE) { - result = this.read_variable(false, true, false); + this.expect('}') && this.next(); + } + + // plain variable + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1231 + else if (this.token === this.tok.T_VARIABLE) { + result = this.read_simple_variable(false); + + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1233 + if (this.token === '[') { + var node = this.node('offsetlookup'); + var offset = this.next().read_encaps_var_offset(); + this.expect(']') && this.next(); + result = node(result, offset); + } + + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1236 + if (this.token === this.tok.T_OBJECT_OPERATOR) { + var node = this.node('propertylookup'); + var what = this.node('constref'); + this.next().expect(this.tok.T_STRING); + var name = this.text(); + this.next(); + result = node(result, what(name)); + } + + // error / fallback } else { - this.expect([ - this.tok.T_VARIABLE, - this.tok.T_CURLY_OPEN, - this.tok.T_DOLLAR_OPEN_CURLY_BRACES, - this.tok.T_ENCAPSED_AND_WHITESPACE - ]); + this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE); + var value = this.text(); + this.next(); + // consider it as string + result = result('string', false, value); } + return result; } /** * Reads an encapsed string */ ,read_encapsed_string: function(expect) { - if (this.token === expect) { - this.next(); - return null; // empty - } - var first = this.read_encapsed_string_item(); - if (this.token === expect) { - this.next(); - return first; + var node = this.node('encapsed'), value = [], type = null; + + if (expect === '`') { + type = this.ast.encapsed.TYPE_SHELL; + } else if (expect === '"') { + type = this.ast.encapsed.TYPE_STRING; + } else { + type = this.ast.encapsed.TYPE_HEREDOC; } - var result = [ - 'bin', '.' - , first - , this.read_encapsed_string_item() - ]; + + // reading encapsed parts while(this.token !== expect && this.token !== this.EOF) { - result[3] = [ - 'bin', '.', result[3], this.read_encapsed_string_item() - ]; + value.push(this.read_encapsed_string_item()); } - if (this.expect(expect)) this.next(); - return result; + + this.expect(expect) && this.next(); + node = node(value, type); + + if (expect === this.tok.T_END_HEREDOC) { + node.label = this.lexer.heredoc_label; + } + return node; } /** * Constant token diff --git a/src/parser/statement.js b/src/parser/statement.js index e1d0a93a3..51702098b 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -118,19 +118,24 @@ module.exports = { /** * Reads a list of constants declaration * ```ebnf - * const_list ::= T_CONST T_STRING '=' expr (',' T_STRING '=' expr)* + * declare_list ::= T_STRING '=' expr (',' T_STRING '=' expr)* * ``` + * @retrurn {Object} */ ,read_declare_list: function() { - return this.read_list(function() { + var result = {}; + while(this.token != this.EOF && this.token !== ')') { this.expect(this.tok.T_STRING); - var name = this.text(); + var name = this.text().toLowerCase(); if (this.next().expect('=')) { - return [name, this.next().read_expr()]; + result[name] = this.next().read_expr(); } else { - return [name, null]; + result[name] = null; } - }, ','); + if (this.token !== ',') break; + this.next(); + } + return result; } /** * reads a simple inner statement @@ -161,10 +166,18 @@ module.exports = { case this.tok.T_TRAIT: return this.read_trait(); case this.tok.T_HALT_COMPILER: - if (this.next().expect('(')) this.next(); - if (this.expect(')')) this.next(); - if (this.expect(';')) this.next(); - this.raiseError('__HALT_COMPILER() can only be used from the outermost scope'); + this.raiseError( + '__HALT_COMPILER() can only be used from the outermost scope' + ); + // fallback : returns a node but does not stop the parsing + var node = this.node('halt'); + this.next().expect('(') && this.next(); + this.expect(')') && this.next(); + node = node(this.lexer._input.substring( + this.lexer.offset + )); + this.expect(';') && this.next(); + return node; default: return this.read_statement(); } @@ -202,15 +215,18 @@ module.exports = { this.expectEndOfStatement(); return result(expr); + // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L429 case this.tok.T_BREAK: - var result = this.node('break'); - this.next().expectEndOfStatement(); - return result(); - case this.tok.T_CONTINUE: - var result = this.node('continue'); - this.next().expectEndOfStatement(); - return result(); + var result = this.node( + this.token === this.tok.T_CONTINUE ? 'continue' : 'break' + ), level = null; + this.next(); // look ahead + if (this.token !== ';' && this.token !== this.tok.T_CLOSE_TAG) { + level = this.read_expr(); + } + this.expectEndOfStatement(); + return result(level); case this.tok.T_GLOBAL: var result = this.node('global'); @@ -228,28 +244,13 @@ module.exports = { this.expect(';') && this.nextWithComments(); return expr; } - var items = this.read_list(function() { - var value = null, name = null; - if (this.expect(this.tok.T_VARIABLE)) { - name = this.text(); - this.next(); - } - if (this.token === '=') { - value = this.next().read_expr(); - } - return [name, value]; - }, ','); + var items = this.read_variable_declarations(); this.expectEndOfStatement(); - return result('declare', items); + return result(items); case this.tok.T_ECHO: var result = this.node('echo'); - var withParanthesis = (this.next().token === '('); - withParanthesis && this.next(); - var args = this.read_list(this.read_expr, ','); - if (withParanthesis) { - this.expect(')') && this.next(); - } + var args = this.next().read_list(this.read_expr, ','); this.expectEndOfStatement(); return result(args); @@ -267,23 +268,39 @@ module.exports = { return result(items); case this.tok.T_DECLARE: - var result = this.node('declare'), options, body; + var result = this.node('declare'), + what, + body = [], + mode; this.next().expect('(') && this.next(); - options = this.read_declare_list(); - this.expect(')') && this.nextWithComments(); + what = this.read_declare_list(); + this.expect(')') && this.next(); if (this.token === ':') { - body = []; - this.next(); + this.nextWithComments(); while(this.token != this.EOF && this.token !== this.tok.T_ENDDECLARE) { - body.push(this.read_statement()); + // @todo : check declare_statement from php / not valid + body.push(this.read_top_statement()); } - this.ignoreComments().expect(this.tok.T_ENDDECLARE) && this.next(); + this.expect(this.tok.T_ENDDECLARE) && this.next(); this.expectEndOfStatement(); + mode = this.ast.declare.MODE_SHORT; + } else if (this.token === '{') { + this.nextWithComments(); + while(this.token != this.EOF && this.token !== '}') { + // @todo : check declare_statement from php / not valid + body.push(this.read_top_statement()); + } + this.expect('}') && this.next(); + mode = this.ast.declare.MODE_BLOCK; } else { - body = this.read_statement(); + this.expect(';') && this.next(); + while(this.token != this.EOF && this.token !== this.tok.T_DECLARE) { + // @todo : check declare_statement from php / not valid + body.push(this.read_top_statement()); + } + mode = this.ast.declare.MODE_NONE; } - return result(options, body); - break; + return result(what, body, mode); case this.tok.T_TRY: return this.read_try(); diff --git a/src/parser/utils.js b/src/parser/utils.js index bbde78c6c..97434c04c 100644 --- a/src/parser/utils.js +++ b/src/parser/utils.js @@ -81,4 +81,40 @@ module.exports = { ); } + /** + * Reads a list of variables declarations + * + * ```ebnf + * variable_declaration ::= T_VARIABLE ('=' expr)?* + * variable_declarations ::= variable_declaration (',' variable_declaration)* + * ``` + * + * Sample code : + * ```php + * bar()[1]]->foo()' + ].join('\r'), { + parser: { + debug: true + } + }); + console.log(ast); + }); + describe('of strings', function () { // Get result from parser var ast = parser.parseEval('array("item1", "item2", "item3")'); @@ -164,6 +177,11 @@ describe('Array without keys', function() { }); describe('mixed tests / coverage', function() { + it('test empty array', function() { + var ast = parser.parseEval('$a = []; $b = array();'); + ast.children[0].right.items.length.should.be.exactly(0); + ast.children[1].right.items.length.should.be.exactly(0); + }); it('test short form / keys', function() { var ast = parser.parseEval('[0 => &$foo, $bar => "foobar"];'); ast.children[0].items.length.should.be.exactly(2); diff --git a/test/astTests.js b/test/astTests.js index aec942779..dbea8f1f7 100644 --- a/test/astTests.js +++ b/test/astTests.js @@ -9,6 +9,27 @@ describe('Test AST structure', function() { ast.children.length.should.be.exactly(0); }); + + it('test syntax error', function() { + var err = null; + (function(){ + try { + var ast = parser.parseCode([ + ' !'); ast.children[0].kind.should.be.exactly('inline'); @@ -35,7 +56,7 @@ describe('Test AST structure', function() { }); it('test echo, isset, unset, empty', function() { var ast = parser.parseEval([ - 'echo(true, $var)', + 'echo ($expr) ? "ok" : "ko";', 'print "some text"', 'isset($foo, $bar)', 'unset($var)', diff --git a/test/exprTests.js b/test/exprTests.js index 56cb2e200..76eac675e 100644 --- a/test/exprTests.js +++ b/test/exprTests.js @@ -93,6 +93,26 @@ describe('Test expressions', function() { ast.children[0].expr.kind.should.be.exactly('call'); }); + it('test generators', function() { + var ast = parser.parseEval([ + 'function gen() {', + ' yield 0; // key 0', + ' yield from foo(); // keys 0-2', + ' yield 1 => $a; // key 1', + '}' + ].join('\n')); + var expr = ast.children[0].body.children; + expr[0].kind.should.be.exactly('yield'); + expr[0].value.kind.should.be.exactly('number'); + + expr[1].kind.should.be.exactly('yieldfrom'); + expr[1].value.kind.should.be.exactly('call'); + + expr[2].kind.should.be.exactly('yield'); + expr[2].key.kind.should.be.exactly('number'); + expr[2].value.kind.should.be.exactly('variable'); + }); + it('test unary', function() { var ast = parser.parseEval([ '+$var;', @@ -142,7 +162,7 @@ describe('Test expressions', function() { it('test exit', function() { var ast = parser.parseEval([ 'exit(1);', - 'exit();', + 'die();', 'exit;' ].join('\n')); ast.children[0].kind.should.be.exactly('exit'); @@ -184,20 +204,64 @@ describe('Test expressions', function() { it('test new', function() { var ast = parser.parseEval([ - '$a = new foo();', + '$a = new \\foo();', + '$a = new namespace\\foo::class();', '$a = new $foo();', '$a = new class extends foo implements bar { };', ].join('\n'), { - ast: { debug: false } + parser: { debug: false } }); ast.children[0].right.kind.should.be.exactly('new'); ast.children[0].right.what.kind.should.be.exactly('identifier'); - ast.children[1].right.kind.should.be.exactly('new'); - ast.children[1].right.what.kind.should.be.exactly('variable'); - ast.children[2].right.kind.should.be.exactly('new'); - ast.children[2].right.what.kind.should.be.exactly('class'); + ast.children[2].right.what.kind.should.be.exactly('variable'); + + ast.children[3].right.kind.should.be.exactly('new'); + ast.children[3].right.what.kind.should.be.exactly('class'); + }); + + it('test nested expressions precedence', function() { + var ast = parser.parseEval([ + '$a = 5 * 2 + 1;', // same as (1 + (5 * 2)) + '$b = 5 * (2 + 1);', + '$c = 1 + 2 / 3 + 4;', // same as (1 + (4 + (2 / 3))) + ].join('\n'), { + parser: { debug: false } + }); + var aExpr = ast.children[0].right; + aExpr.kind.should.be.exactly('bin'); + aExpr.left.value.should.be.exactly('1'); + aExpr.type.should.be.exactly('+'); + + aExpr.right.left.value.should.be.exactly('5'); + aExpr.right.type.should.be.exactly('*'); + aExpr.right.right.value.should.be.exactly('2'); + + var bExpr = ast.children[1].right; + bExpr.kind.should.be.exactly('bin'); + bExpr.left.value.should.be.exactly('5'); + bExpr.type.should.be.exactly('*'); + + bExpr.right.kind.should.be.exactly('parenthesis'); + bExpr.right.inner.left.value.should.be.exactly('2'); + bExpr.right.inner.type.should.be.exactly('+'); + bExpr.right.inner.right.value.should.be.exactly('1'); + + var cExpr = ast.children[2].right; + cExpr.kind.should.be.exactly('bin'); + cExpr.left.value.should.be.exactly('1'); + cExpr.type.should.be.exactly('+'); + + cExpr.right.kind.should.be.exactly('bin'); + cExpr.right.left.value.should.be.exactly('4'); + cExpr.right.type.should.be.exactly('+'); + + cExpr.right.right.kind.should.be.exactly('bin'); + cExpr.right.right.left.value.should.be.exactly('2'); + cExpr.right.right.type.should.be.exactly('/'); + cExpr.right.right.right.value.should.be.exactly('3'); + }); }); diff --git a/test/functionTests.js b/test/functionTests.js index 68ec77fae..3555b1e43 100644 --- a/test/functionTests.js +++ b/test/functionTests.js @@ -6,9 +6,25 @@ describe('Function tests', function() { 'function &foo($a = 1, callable $b, ?array &...$params) : ?boolean {}', '$a = function &($b) use($c) : array {', ' return true;', - '};' + '};', + '$b = foo(...[1, null, 1, 2, 3]);' ].join('\n')); + + it('test variadic error', function () { + var astErr = parser.parseEval([ + '$b = foo(...[1, 2, 3], $a);' + ].join('\n'), { + parser: { + suppressErrors: true + } + }); + var msg = 'Unexpected argument after a variadic argument on line 1'; + astErr.errors.length.should.be.exactly(1); + astErr.errors[0].line.should.be.exactly(1); + astErr.errors[0].message.should.be.exactly(msg); + }); + it('test description', function () { // Get result from parser ast.children[0].kind.should.be.exactly('function'); diff --git a/test/lexerTests.js b/test/lexerTests.js index 40bfe22e5..29e76898f 100644 --- a/test/lexerTests.js +++ b/test/lexerTests.js @@ -50,16 +50,35 @@ describe('Test lexer', function() { lexer: { short_tags: true, asp_tags: true, - debug: true + debug: false }, parser: { extractDoc: true, - debug: true + debug: false } }); // @fixme ast.children[0].kind.should.be.exactly('doc'); - console.log(ast.children); + // console.log(ast.children); }); }); + it('test tokens', function() { + var tokens = parser.tokenGetAll('test;', + '$b = (new test())->foo();', + '$c = (foo())[5];', + '$d = (function($a) { return $a * 2; })(5);', + ].join('\n'), { + parser: { + debug: true + } + }); + + }); +}); diff --git a/test/statementTests.js b/test/statementTests.js index d5c3bd3ac..a0218f06a 100644 --- a/test/statementTests.js +++ b/test/statementTests.js @@ -16,6 +16,7 @@ describe('Test statements', function() { ast.children[2].kind.should.be.exactly('goto'); ast.children[2].label.should.be.exactly('start'); }); + it('test global', function() { var ast = parser.parseEval([ 'function foo() {', @@ -32,28 +33,180 @@ describe('Test statements', function() { expr.items[1].name.should.be.exactly('b'); }); + it('test halt statement', function() { + var ast = parser.parseEval([ + '$a = 1;', + '__halt_compiler();', + '$b = 1;' + ].join('\n'), { + parser: { debug: false } + }); + ast.children.length.should.be.exactly(2); + ast.children[0].kind.should.be.exactly('assign'); + ast.children[1].kind.should.be.exactly('halt'); + ast.children[1].after.should.be.exactly('\n$b = 1;'); + + // test the inner error + (function() { + var ast = parser.parseEval([ + 'if (true) {', + ' __halt_compiler();', + '}' + ].join('\n')); + }).should.throw(/line\s2/); + + // test the fallback + ast = parser.parseEval([ + 'if (true) {', + ' __halt_compiler();', + '}', + '$b = 1;' + ].join('\n'), { + parser: { suppressErrors: true } + }); + + ast.children.length.should.be.exactly(2); + ast.errors.length.should.be.exactly(1); + ast.children[0].kind.should.be.exactly('if'); + ast.children[0].body.children[0].kind.should.be.exactly('halt'); + ast.children[0].body.children[0].after.should.be.exactly('\n}\n$b = 1;'); + ast.children[1].kind.should.be.exactly('assign'); + + }); + + it('test static', function() { + var ast = parser.parseEval([ + 'function foo() {', + ' static $a, $b = 5;', + '}', + 'static $sVar1 = 11;' + ].join('\n'), { + parser: { debug: false } + }); + + // test function multi statements + var expr = ast.children[0].body.children[0]; + expr.kind.should.be.exactly('static'); + expr.items.length.should.be.exactly(2); + expr.items[0].kind.should.be.exactly('variable'); + expr.items[1].kind.should.be.exactly('assign'); + + // test single statement + ast.children[1].kind.should.be.exactly('static'); + ast.children[1].items.length.should.be.exactly(1); + ast.children[1].items[0].kind.should.be.exactly('assign'); + ast.children[1].items[0].left.kind.should.be.exactly('variable'); + ast.children[1].items[0].left.name.should.be.exactly('sVar1'); + ast.children[1].items[0].right.kind.should.be.exactly('number'); + ast.children[1].items[0].right.value.should.be.exactly('11'); + + }); + + it('test declare', function() { + var ast = parser.parseEval([ + 'declare(ticks=1);', + '$a = 1;', + 'declare(ticks=2,encoding="ISO-8859-1");', + '$b = 1;', + 'declare(ticks=1) {', + ' $c = 2;', + '}', + 'declare(encoding="UTF-8"):', + ' $d = 3;', + 'enddeclare;', + '$e = 4;' // <- single statement + ].join('\n'), { + parser: { debug: false } + }); + ast.children.length.should.be.exactly(5); + + ast.children[0].kind.should.be.exactly('declare'); + ast.children[0].mode.should.be.exactly('none'); + ast.children[0].children.length.should.be.exactly(1); + ast.children[0].children[0].left.name.should.be.exactly('a'); + ast.children[0].what.ticks.kind.should.be.exactly('number'); + ast.children[0].what.ticks.value.should.be.exactly('1'); + + ast.children[1].kind.should.be.exactly('declare'); + ast.children[1].mode.should.be.exactly('none'); + ast.children[1].children.length.should.be.exactly(1); + ast.children[1].children[0].left.name.should.be.exactly('b'); + ast.children[1].what.ticks.kind.should.be.exactly('number'); + ast.children[1].what.ticks.value.should.be.exactly('2'); + ast.children[1].what.encoding.kind.should.be.exactly('string'); + ast.children[1].what.encoding.value.should.be.exactly('ISO-8859-1'); + + ast.children[2].kind.should.be.exactly('declare'); + ast.children[2].mode.should.be.exactly('block'); + ast.children[2].children.length.should.be.exactly(1); + ast.children[2].children[0].left.name.should.be.exactly('c'); + ast.children[2].what.ticks.kind.should.be.exactly('number'); + ast.children[2].what.ticks.value.should.be.exactly('1'); + + ast.children[3].kind.should.be.exactly('declare'); + ast.children[3].mode.should.be.exactly('short'); + ast.children[3].children.length.should.be.exactly(1); + ast.children[3].children[0].left.name.should.be.exactly('d'); + ast.children[3].what.encoding.kind.should.be.exactly('string'); + ast.children[3].what.encoding.value.should.be.exactly('UTF-8'); + + ast.children[4].kind.should.be.exactly('assign'); + }); + it('test try', function() { var ast = parser.parseEval([ 'try {', ' foo();', '} catch(FooError|BarError $err) {', ' var_dump($err);', + ' throw $err;', '} finally {', ' clean();', '}' ].join('\n'), { parser: { debug: false } }); - ast.children[0].kind.should.be.exactly('try'); - ast.children[0].body.kind.should.be.exactly('block'); - ast.children[0].body.children[0].kind.should.be.exactly('call'); - ast.children[0].body.children[0].what.name.should.be.exactly('foo'); - ast.children[0].catches[0].kind.should.be.exactly('catch'); - ast.children[0].catches[0].what.length.should.be.exactly(2); - ast.children[0].catches[0].what[0].name.should.be.exactly('FooError'); - ast.children[0].catches[0].what[1].name.should.be.exactly('BarError'); - ast.children[0].catches[0].variable.kind.should.be.exactly('variable'); - ast.children[0].catches[0].variable.name.should.be.exactly('err'); - ast.children[0].always.kind.should.be.exactly('block'); + + var expr = ast.children[0]; + expr.kind.should.be.exactly('try'); + expr.body.kind.should.be.exactly('block'); + expr.body.children[0].kind.should.be.exactly('call'); + expr.body.children[0].what.name.should.be.exactly('foo'); + expr.catches.length.should.be.exactly(1); + + // test catch + var catchExpr = expr.catches[0]; + catchExpr.kind.should.be.exactly('catch'); + catchExpr.what.length.should.be.exactly(2); + catchExpr.what[0].name.should.be.exactly('FooError'); + catchExpr.what[1].name.should.be.exactly('BarError'); + catchExpr.variable.kind.should.be.exactly('variable'); + catchExpr.variable.name.should.be.exactly('err'); + + // test the throw statement + catchExpr.body.kind.should.be.exactly('block'); + catchExpr.body.children.length.should.be.exactly(2); + catchExpr.body.children[1].kind.should.be.exactly('throw'); + catchExpr.body.children[1].what.kind.should.be.exactly('variable'); + catchExpr.body.children[1].what.name.should.be.exactly('err'); + + // always block + expr.always.kind.should.be.exactly('block'); + }); + + it('test inner statements', function() { + var ast = parser.parseEval([ + 'if (true) {', + ' function foo() {}', + ' abstract class foo {}', + ' final class foo {}', + ' class foo {}', + ' trait foo {}', + ' interface foo {}', + '}' + ].join('\n'), { + parser: { debug: false } + }); + // @todo : do assert }); }); diff --git a/test/stringTests.js b/test/stringTests.js index 276eff977..dfde29305 100644 --- a/test/stringTests.js +++ b/test/stringTests.js @@ -22,8 +22,24 @@ describe('Test strings', function() { it('...', function() { var ast = parser.parseEval('echo "~\'.{{$expectedLength}}\'\\$~s";'); }); - it('...', function() { - var ast = parser.parseEval('echo "Hello \\"$obj->name\\" !";'); + it('test encapsed variable', function() { + var ast = parser.parseEval([ + 'echo "Hello $obj->name !";', + 'echo "Hello $obj->foo->bar !";', + 'echo "Hello $obj[1]->foo !";' + ].join('\n')); + + ast.children[0].arguments[0].kind.should.be.exactly('encapsed'); + ast.children[0].arguments[0].value[0].value.should.be.exactly('Hello '); + ast.children[0].arguments[0].value[2].value.should.be.exactly(' !'); + + ast.children[1].arguments[0].kind.should.be.exactly('encapsed'); + ast.children[1].arguments[0].value[0].value.should.be.exactly('Hello '); + ast.children[1].arguments[0].value[2].value.should.be.exactly('->bar !'); + + ast.children[2].arguments[0].kind.should.be.exactly('encapsed'); + ast.children[2].arguments[0].value[0].value.should.be.exactly('Hello '); + ast.children[2].arguments[0].value[2].value.should.be.exactly('->foo !'); }); it('...', function() { var ast = parser.parseEval('echo "Hello {".$obj->name."} !";'); @@ -81,25 +97,42 @@ describe('Test strings', function() { it('...', function() { var ast = parser.parseEval('return "Class.create(\'$package$className\',{";'); }); - it('heredoc ...', function() { + it('test encapsed elements', function() { var ast = parser.parseEval([ '$code = <<<\t EOFX', - '', - '/*{$this->docStar}', - ' * Constructor.', - ' */', - 'public function __construct()', - '${$targetDirs}', - '$test', + '{$this->docStar}', + '${$foo}', + '${targetDirs[1]}', + '$test[1]', + '$test->foo', 'EOFX;' - ].join('\r\n')); - }); - it('heredoc ...', function() { + ].join('\r'), { + parser: { + debug: false + } + }); + var expr = ast.children[0].right.value; + expr[0].kind.should.be.exactly('propertylookup'); + expr[2].kind.should.be.exactly('variable'); + expr[4].kind.should.be.exactly('variable'); + expr[6].kind.should.be.exactly('offsetlookup'); + expr[8].kind.should.be.exactly('propertylookup'); + // @todo : improve assertions + }); + it('test nowdoc label and contents', function() { var ast = parser.parseEval([ '$code .= <<<\'EOF\'', ' }', 'EOF;' - ].join('\r\n')); + ].join('\r\n'), { + parser: { + debug: false + } + }); + var expr = ast.children[0].right; + expr.kind.should.be.exactly('nowdoc'); + expr.label.should.be.exactly('EOF'); + expr.value.should.be.exactly(' }'); }); it('heredoc ...', function() { var ast = parser.parseEval([ @@ -119,28 +152,46 @@ describe('Test strings', function() { 'NDOC', ';', ].join('\r\n')); + ast.children[0].arguments[0].kind.should.be.exactly('encapsed'); + ast.children[0].arguments[0].label.should.be.exactly('HDOC'); + ast.children[0].arguments[0].value.length.should.be.exactly(0); + + ast.children[1].arguments[0].kind.should.be.exactly('nowdoc'); + ast.children[1].arguments[0].label.should.be.exactly('NDOC'); + ast.children[1].arguments[0].value.should.be.exactly(''); }); it('test heredoc end of doc', function() { var ast = parser.parseEval([ '$a = <<addFallbackCatalogue(\\$catalogue%s);' + 'SOMETHING' ].join('\r'), { parser: { suppressErrors: true } }); + ast.errors.length.should.be.exactly(1); + ast.errors[0].line.should.be.exactly(2); + ast.errors[0].message.indexOf('T_END_HEREDOC').should.be.greaterThan(-1); + ast.children[0].right.kind.should.be.exactly('encapsed'); + ast.children[0].right.type.should.be.exactly('heredoc'); + ast.children[0].right.label.should.be.exactly('EOF2'); + ast.children[0].right.value[0].value.should.be.exactly('SOMETHING'); }); it('test nowdoc end of doc', function() { var ast = parser.parseEval([ '$a = <<<\'EOF2\'', - '\\$catalogue%s = new MessageCatalogue(\'%s\', %s);', - '\\$catalogue%s->addFallbackCatalogue(\\$catalogue%s);' + 'FOO' ].join('\r'), { parser: { suppressErrors: true } }); + ast.errors.length.should.be.exactly(1); + ast.errors[0].line.should.be.exactly(2); + ast.errors[0].message.indexOf('T_END_HEREDOC').should.be.greaterThan(-1); + ast.children[0].right.kind.should.be.exactly('nowdoc'); + ast.children[0].right.label.should.be.exactly('EOF2'); + ast.children[0].right.value.should.be.exactly('FOO'); }); it('test backquotes', function() { var ast = parser.parseEval([ @@ -157,6 +208,15 @@ describe('Test strings', function() { '$a = `-$`;', '$a = `$`;', ].join('\r')); + ast.children[0].right.kind.should.be.exactly('shell'); + ast.children[0].right.value.kind.should.be.exactly('encapsed'); + ast.children[0].right.value.type.should.be.exactly('shell'); + ast.children[0].right.value.value.length.should.be.exactly(2); + ast.children[0].right.value.value[0].kind.should.be.exactly('string'); + ast.children[0].right.value.value[0].value.should.be.exactly('ls '); + ast.children[0].right.value.value[1].kind.should.be.exactly('variable'); + ast.children[0].right.value.value[1].name.should.be.exactly('cwd'); + // @todo test the rest of childs }); }); diff --git a/test/switchTests.js b/test/switchTests.js index c3a5de583..4b5bd5cf0 100644 --- a/test/switchTests.js +++ b/test/switchTests.js @@ -7,7 +7,7 @@ describe('Test SWITCH statements', function() { ' case 1:', ' case $var:', ' $foo = false;', - ' break;', + ' break 10;', ' case FOO:', ' $foo = true;', ' break;',