All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.c224886a075dcbcf9433ec9416f08206.js.map Maven / Gradle / Ivy

There is a newer version: 6.1.4
Show newest version
{"version":3,"sources":["webpack://graylog-web-interface/c224886a075dcbcf9433ec9416f08206.js"],"sourcesContent":["\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = /** @class */ (function () {\n    function Range(startRow, startColumn, endRow, endColumn) {\n        this.start = {\n            row: startRow,\n            column: startColumn\n        };\n        this.end = {\n            row: endRow,\n            column: endColumn\n        };\n    }\n    Range.prototype.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    Range.prototype.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    Range.prototype.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    Range.prototype.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    Range.prototype.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    Range.prototype.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    Range.prototype.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    Range.prototype.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    Range.prototype.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    Range.prototype.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    Range.prototype.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    Range.prototype.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    Range.prototype.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    Range.prototype.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    Range.prototype.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    Range.prototype.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    Range.prototype.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    Range.prototype.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    Range.prototype.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    Range.prototype.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n    return Range;\n}());\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n    function Anchor(doc, row, column) {\n        this.$onChange = this.onChange.bind(this);\n        this.attach(doc);\n        if (typeof column == \"undefined\")\n            this.setPosition(row.row, row.column);\n        else\n            this.setPosition(row, column);\n    }\n    Anchor.prototype.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    Anchor.prototype.getDocument = function () {\n        return this.document;\n    };\n    Anchor.prototype.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    Anchor.prototype.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    Anchor.prototype.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    Anchor.prototype.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    Anchor.prototype.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n    return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n    var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n    return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n    var deltaIsInsert = delta.action == \"insert\";\n    var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n    var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n    var deltaStart = delta.start;\n    var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n    if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n        return {\n            row: point.row,\n            column: point.column\n        };\n    }\n    if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n        return {\n            row: point.row + deltaRowShift,\n            column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n        };\n    }\n    return {\n        row: deltaStart.row,\n        column: deltaStart.column\n    };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n    function Document(textOrLines) {\n        this.$lines = [\"\"];\n        if (textOrLines.length === 0) {\n            this.$lines = [\"\"];\n        }\n        else if (Array.isArray(textOrLines)) {\n            this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n        }\n        else {\n            this.insert({ row: 0, column: 0 }, textOrLines);\n        }\n    }\n    Document.prototype.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    Document.prototype.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    Document.prototype.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    Document.prototype.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    Document.prototype.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    Document.prototype.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    Document.prototype.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    Document.prototype.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    Document.prototype.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    Document.prototype.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    Document.prototype.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    Document.prototype.getLength = function () {\n        return this.$lines.length;\n    };\n    Document.prototype.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    Document.prototype.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    Document.prototype.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    Document.prototype.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    Document.prototype.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    Document.prototype.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    Document.prototype.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    Document.prototype.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    Document.prototype.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    Document.prototype.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    Document.prototype.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    Document.prototype.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    Document.prototype.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    Document.prototype.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    Document.prototype.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    Document.prototype.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    Document.prototype.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    Document.prototype.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    Document.prototype.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    Document.prototype.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    Document.prototype.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    Document.prototype.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    Document.prototype.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    Document.prototype.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n    Document.prototype.$split = function (text) {\n        return text.split(/\\r\\n|\\r|\\n/);\n    };\n    return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/deep_copy\",[], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/lua/luaparse\",[], function(require, exports, module) {\n\n(function (root, name, factory) {\n   factory(exports)\n}(this, 'luaparse', function (exports) {\n  'use strict';\n\n  exports.version = \"0.3.1\";\n\n  var input, options, length, features, encodingMode;\n  var defaultOptions = exports.defaultOptions = {\n      wait: false\n    , comments: true\n    , scope: false\n    , locations: false\n    , ranges: false\n    , onCreateNode: null\n    , onCreateScope: null\n    , onDestroyScope: null\n    , onLocalDeclaration: null\n    , luaVersion: '5.3'\n    , encodingMode: 'none'\n  };\n\n  function encodeUTF8(codepoint, highMask) {\n    highMask = highMask || 0;\n\n    if (codepoint < 0x80) {\n      return String.fromCharCode(codepoint);\n    } else if (codepoint < 0x800) {\n      return String.fromCharCode(\n        highMask | 0xc0 |  (codepoint >>  6)        ,\n        highMask | 0x80 | ( codepoint        & 0x3f)\n      );\n    } else if (codepoint < 0x10000) {\n      return String.fromCharCode(\n        highMask | 0xe0 |  (codepoint >> 12)        ,\n        highMask | 0x80 | ((codepoint >>  6) & 0x3f),\n        highMask | 0x80 | ( codepoint        & 0x3f)\n      );\n    } else /* istanbul ignore else */ if (codepoint < 0x110000) {\n      return String.fromCharCode(\n        highMask | 0xf0 |  (codepoint >> 18)        ,\n        highMask | 0x80 | ((codepoint >> 12) & 0x3f),\n        highMask | 0x80 | ((codepoint >>  6) & 0x3f),\n        highMask | 0x80 | ( codepoint        & 0x3f)\n      );\n    } else {\n      return null;\n    }\n  }\n\n  function toHex(num, digits) {\n    var result = num.toString(16);\n    while (result.length < digits)\n      result = '0' + result;\n    return result;\n  }\n\n  function checkChars(rx) {\n    return function (s) {\n      var m = rx.exec(s);\n      if (!m)\n        return s;\n      raise(null, errors.invalidCodeUnit, toHex(m[0].charCodeAt(0), 4).toUpperCase());\n    };\n  }\n\n  var encodingModes = {\n    'pseudo-latin1': {\n      fixup: checkChars(/[^\\x00-\\xff]/),\n      encodeByte: function (value) {\n        if (value === null)\n          return '';\n        return String.fromCharCode(value);\n      },\n      encodeUTF8: function (codepoint) {\n        return encodeUTF8(codepoint);\n      },\n    },\n    'x-user-defined': {\n      fixup: checkChars(/[^\\x00-\\x7f\\uf780-\\uf7ff]/),\n      encodeByte: function (value) {\n        if (value === null)\n          return '';\n        if (value >= 0x80)\n          return String.fromCharCode(value | 0xf700);\n        return String.fromCharCode(value);\n      },\n      encodeUTF8: function (codepoint) {\n        return encodeUTF8(codepoint, 0xf700);\n      }\n    },\n    'none': {\n      discardStrings: true,\n      fixup: function (s) {\n        return s;\n      },\n      encodeByte: function (value) {\n        return '';\n      },\n      encodeUTF8: function (codepoint) {\n        return '';\n      }\n    }\n  };\n\n  var EOF = 1, StringLiteral = 2, Keyword = 4, Identifier = 8\n    , NumericLiteral = 16, Punctuator = 32, BooleanLiteral = 64\n    , NilLiteral = 128, VarargLiteral = 256;\n\n  exports.tokenTypes = { EOF: EOF, StringLiteral: StringLiteral\n    , Keyword: Keyword, Identifier: Identifier, NumericLiteral: NumericLiteral\n    , Punctuator: Punctuator, BooleanLiteral: BooleanLiteral\n    , NilLiteral: NilLiteral, VarargLiteral: VarargLiteral\n  };\n\n  var errors = exports.errors = {\n      unexpected: 'unexpected %1 \\'%2\\' near \\'%3\\''\n    , unexpectedEOF: 'unexpected symbol near \\'\\''\n    , expected: '\\'%1\\' expected near \\'%2\\''\n    , expectedToken: '%1 expected near \\'%2\\''\n    , unfinishedString: 'unfinished string near \\'%1\\''\n    , malformedNumber: 'malformed number near \\'%1\\''\n    , decimalEscapeTooLarge: 'decimal escape too large near \\'%1\\''\n    , invalidEscape: 'invalid escape sequence near \\'%1\\''\n    , hexadecimalDigitExpected: 'hexadecimal digit expected near \\'%1\\''\n    , braceExpected: 'missing \\'%1\\' near \\'%2\\''\n    , tooLargeCodepoint: 'UTF-8 value too large near \\'%1\\''\n    , unfinishedLongString: 'unfinished long string (starting at line %1) near \\'%2\\''\n    , unfinishedLongComment: 'unfinished long comment (starting at line %1) near \\'%2\\''\n    , ambiguousSyntax: 'ambiguous syntax (function call x new statement) near \\'%1\\''\n    , noLoopToBreak: 'no loop to break near \\'%1\\''\n    , labelAlreadyDefined: 'label \\'%1\\' already defined on line %2'\n    , labelNotVisible: 'no visible label \\'%1\\' for '\n    , gotoJumpInLocalScope: ' jumps into the scope of local \\'%2\\''\n    , cannotUseVararg: 'cannot use \\'...\\' outside a vararg function near \\'%1\\''\n    , invalidCodeUnit: 'code unit U+%1 is not allowed in the current encoding mode'\n  };\n\n  var ast = exports.ast = {\n      labelStatement: function(label) {\n      return {\n          type: 'LabelStatement'\n        , label: label\n      };\n    }\n\n    , breakStatement: function() {\n      return {\n          type: 'BreakStatement'\n      };\n    }\n\n    , gotoStatement: function(label) {\n      return {\n          type: 'GotoStatement'\n        , label: label\n      };\n    }\n\n    , returnStatement: function(args) {\n      return {\n          type: 'ReturnStatement'\n        , 'arguments': args\n      };\n    }\n\n    , ifStatement: function(clauses) {\n      return {\n          type: 'IfStatement'\n        , clauses: clauses\n      };\n    }\n    , ifClause: function(condition, body) {\n      return {\n          type: 'IfClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseifClause: function(condition, body) {\n      return {\n          type: 'ElseifClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseClause: function(body) {\n      return {\n          type: 'ElseClause'\n        , body: body\n      };\n    }\n\n    , whileStatement: function(condition, body) {\n      return {\n          type: 'WhileStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , doStatement: function(body) {\n      return {\n          type: 'DoStatement'\n        , body: body\n      };\n    }\n\n    , repeatStatement: function(condition, body) {\n      return {\n          type: 'RepeatStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , localStatement: function(variables, init) {\n      return {\n          type: 'LocalStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , assignmentStatement: function(variables, init) {\n      return {\n          type: 'AssignmentStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , callStatement: function(expression) {\n      return {\n          type: 'CallStatement'\n        , expression: expression\n      };\n    }\n\n    , functionStatement: function(identifier, parameters, isLocal, body) {\n      return {\n          type: 'FunctionDeclaration'\n        , identifier: identifier\n        , isLocal: isLocal\n        , parameters: parameters\n        , body: body\n      };\n    }\n\n    , forNumericStatement: function(variable, start, end, step, body) {\n      return {\n          type: 'ForNumericStatement'\n        , variable: variable\n        , start: start\n        , end: end\n        , step: step\n        , body: body\n      };\n    }\n\n    , forGenericStatement: function(variables, iterators, body) {\n      return {\n          type: 'ForGenericStatement'\n        , variables: variables\n        , iterators: iterators\n        , body: body\n      };\n    }\n\n    , chunk: function(body) {\n      return {\n          type: 'Chunk'\n        , body: body\n      };\n    }\n\n    , identifier: function(name) {\n      return {\n          type: 'Identifier'\n        , name: name\n      };\n    }\n\n    , literal: function(type, value, raw) {\n      type = (type === StringLiteral) ? 'StringLiteral'\n        : (type === NumericLiteral) ? 'NumericLiteral'\n        : (type === BooleanLiteral) ? 'BooleanLiteral'\n        : (type === NilLiteral) ? 'NilLiteral'\n        : 'VarargLiteral';\n\n      return {\n          type: type\n        , value: value\n        , raw: raw\n      };\n    }\n\n    , tableKey: function(key, value) {\n      return {\n          type: 'TableKey'\n        , key: key\n        , value: value\n      };\n    }\n    , tableKeyString: function(key, value) {\n      return {\n          type: 'TableKeyString'\n        , key: key\n        , value: value\n      };\n    }\n    , tableValue: function(value) {\n      return {\n          type: 'TableValue'\n        , value: value\n      };\n    }\n\n\n    , tableConstructorExpression: function(fields) {\n      return {\n          type: 'TableConstructorExpression'\n        , fields: fields\n      };\n    }\n    , binaryExpression: function(operator, left, right) {\n      var type = ('and' === operator || 'or' === operator) ?\n        'LogicalExpression' :\n        'BinaryExpression';\n\n      return {\n          type: type\n        , operator: operator\n        , left: left\n        , right: right\n      };\n    }\n    , unaryExpression: function(operator, argument) {\n      return {\n          type: 'UnaryExpression'\n        , operator: operator\n        , argument: argument\n      };\n    }\n    , memberExpression: function(base, indexer, identifier) {\n      return {\n          type: 'MemberExpression'\n        , indexer: indexer\n        , identifier: identifier\n        , base: base\n      };\n    }\n\n    , indexExpression: function(base, index) {\n      return {\n          type: 'IndexExpression'\n        , base: base\n        , index: index\n      };\n    }\n\n    , callExpression: function(base, args) {\n      return {\n          type: 'CallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , tableCallExpression: function(base, args) {\n      return {\n          type: 'TableCallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , stringCallExpression: function(base, argument) {\n      return {\n          type: 'StringCallExpression'\n        , base: base\n        , argument: argument\n      };\n    }\n\n    , comment: function(value, raw) {\n      return {\n          type: 'Comment'\n        , value: value\n        , raw: raw\n      };\n    }\n  };\n\n  function finishNode(node) {\n    if (trackLocations) {\n      var location = locations.pop();\n      location.complete();\n      location.bless(node);\n    }\n    if (options.onCreateNode) options.onCreateNode(node);\n    return node;\n  }\n\n  var slice = Array.prototype.slice\n    , toString = Object.prototype.toString\n    ;\n\n  var indexOf = /* istanbul ignore next */ function (array, element) {\n    for (var i = 0, length = array.length; i < length; ++i) {\n      if (array[i] === element) return i;\n    }\n    return -1;\n  };\n  if (Array.prototype.indexOf)\n    indexOf = function (array, element) {\n      return array.indexOf(element);\n    };\n\n  function indexOfObject(array, property, element) {\n    for (var i = 0, length = array.length; i < length; ++i) {\n      if (array[i][property] === element) return i;\n    }\n    return -1;\n  }\n\n  function sprintf(format) {\n    var args = slice.call(arguments, 1);\n    format = format.replace(/%(\\d)/g, function (match, index) {\n      return '' + args[index - 1] || /* istanbul ignore next */ '';\n    });\n    return format;\n  }\n\n  var assign = /* istanbul ignore next */ function (dest) {\n    var args = slice.call(arguments, 1)\n      , src, prop;\n\n    for (var i = 0, length = args.length; i < length; ++i) {\n      src = args[i];\n      for (prop in src)\n        if (Object.prototype.hasOwnProperty.call(src, prop)) {\n          dest[prop] = src[prop];\n        }\n    }\n\n    return dest;\n  };\n  if (Object.assign)\n    assign = Object.assign;\n\n  exports.SyntaxError = SyntaxError;\n\n  function fixupError(e) {\n    if (!Object.create)\n      return e;\n    return Object.create(e, {\n      'line': { 'writable': true, value: e.line },\n      'index': { 'writable': true, value: e.index },\n      'column': { 'writable': true, value: e.column }\n    });\n  }\n\n  function raise(token) {\n    var message = sprintf.apply(null, slice.call(arguments, 1))\n      , error, col;\n\n    if (token === null || typeof token.line === 'undefined') {\n      col = index - lineStart + 1;\n      error = fixupError(new SyntaxError(sprintf('[%1:%2] %3', line, col, message)));\n      error.index = index;\n      error.line = line;\n      error.column = col;\n    } else {\n      col = token.range[0] - token.lineStart;\n      error = fixupError(new SyntaxError(sprintf('[%1:%2] %3', token.line, col, message)));\n      error.line = token.line;\n      error.index = token.range[0];\n      error.column = col;\n    }\n    throw error;\n  }\n\n  function tokenValue(token) {\n    var raw = input.slice(token.range[0], token.range[1]);\n    if (raw)\n      return raw;\n    return token.value;\n  }\n\n  function raiseUnexpectedToken(type, token) {\n    raise(token, errors.expectedToken, type, tokenValue(token));\n  }\n\n  function unexpected(found) {\n    var near = tokenValue(lookahead);\n    if ('undefined' !== typeof found.type) {\n      var type;\n      switch (found.type) {\n        case StringLiteral:   type = 'string';      break;\n        case Keyword:         type = 'keyword';     break;\n        case Identifier:      type = 'identifier';  break;\n        case NumericLiteral:  type = 'number';      break;\n        case Punctuator:      type = 'symbol';      break;\n        case BooleanLiteral:  type = 'boolean';     break;\n        case NilLiteral:\n          return raise(found, errors.unexpected, 'symbol', 'nil', near);\n        case EOF:\n          return raise(found, errors.unexpectedEOF);\n      }\n      return raise(found, errors.unexpected, type, tokenValue(found), near);\n    }\n    return raise(found, errors.unexpected, 'symbol', found, near);\n  }\n\n  var index\n    , token\n    , previousToken\n    , lookahead\n    , comments\n    , tokenStart\n    , line\n    , lineStart;\n\n  exports.lex = lex;\n\n  function lex() {\n    skipWhiteSpace();\n    while (45 === input.charCodeAt(index) &&\n           45 === input.charCodeAt(index + 1)) {\n      scanComment();\n      skipWhiteSpace();\n    }\n    if (index >= length) return {\n        type : EOF\n      , value: ''\n      , line: line\n      , lineStart: lineStart\n      , range: [index, index]\n    };\n\n    var charCode = input.charCodeAt(index)\n      , next = input.charCodeAt(index + 1);\n    tokenStart = index;\n    if (isIdentifierStart(charCode)) return scanIdentifierOrKeyword();\n\n    switch (charCode) {\n      case 39: case 34: // '\"\n        return scanStringLiteral();\n\n      case 48: case 49: case 50: case 51: case 52: case 53:\n      case 54: case 55: case 56: case 57: // 0-9\n        return scanNumericLiteral();\n\n      case 46: // .\n        if (isDecDigit(next)) return scanNumericLiteral();\n        if (46 === next) {\n          if (46 === input.charCodeAt(index + 2)) return scanVarargLiteral();\n          return scanPunctuator('..');\n        }\n        return scanPunctuator('.');\n\n      case 61: // =\n        if (61 === next) return scanPunctuator('==');\n        return scanPunctuator('=');\n\n      case 62: // >\n        if (features.bitwiseOperators)\n          if (62 === next) return scanPunctuator('>>');\n        if (61 === next) return scanPunctuator('>=');\n        return scanPunctuator('>');\n\n      case 60: // <\n        if (features.bitwiseOperators)\n          if (60 === next) return scanPunctuator('<<');\n        if (61 === next) return scanPunctuator('<=');\n        return scanPunctuator('<');\n\n      case 126: // ~\n        if (61 === next) return scanPunctuator('~=');\n        if (!features.bitwiseOperators)\n          break;\n        return scanPunctuator('~');\n\n      case 58: // :\n        if (features.labels)\n          if (58 === next) return scanPunctuator('::');\n        return scanPunctuator(':');\n\n      case 91: // [\n        if (91 === next || 61 === next) return scanLongStringLiteral();\n        return scanPunctuator('[');\n\n      case 47: // /\n        if (features.integerDivision)\n          if (47 === next) return scanPunctuator('//');\n        return scanPunctuator('/');\n\n      case 38: case 124: // & |\n        if (!features.bitwiseOperators)\n          break;\n      case 42: case 94: case 37: case 44: case 123: case 125:\n      case 93: case 40: case 41: case 59: case 35: case 45:\n      case 43: // * ^ % , { } ] ( ) ; # - +\n        return scanPunctuator(input.charAt(index));\n    }\n\n    return unexpected(input.charAt(index));\n  }\n\n  function consumeEOL() {\n    var charCode = input.charCodeAt(index)\n      , peekCharCode = input.charCodeAt(index + 1);\n\n    if (isLineTerminator(charCode)) {\n      if (10 === charCode && 13 === peekCharCode) ++index;\n      if (13 === charCode && 10 === peekCharCode) ++index;\n      ++line;\n      lineStart = ++index;\n\n      return true;\n    }\n    return false;\n  }\n\n  function skipWhiteSpace() {\n    while (index < length) {\n      var charCode = input.charCodeAt(index);\n      if (isWhiteSpace(charCode)) {\n        ++index;\n      } else if (!consumeEOL()) {\n        break;\n      }\n    }\n  }\n\n  function scanIdentifierOrKeyword() {\n    var value, type;\n    while (isIdentifierPart(input.charCodeAt(++index)));\n    value = encodingMode.fixup(input.slice(tokenStart, index));\n    if (isKeyword(value)) {\n      type = Keyword;\n    } else if ('true' === value || 'false' === value) {\n      type = BooleanLiteral;\n      value = ('true' === value);\n    } else if ('nil' === value) {\n      type = NilLiteral;\n      value = null;\n    } else {\n      type = Identifier;\n    }\n\n    return {\n        type: type\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanPunctuator(value) {\n    index += value.length;\n    return {\n        type: Punctuator\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanVarargLiteral() {\n    index += 3;\n    return {\n        type: VarargLiteral\n      , value: '...'\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanStringLiteral() {\n    var delimiter = input.charCodeAt(index++)\n      , beginLine = line\n      , beginLineStart = lineStart\n      , stringStart = index\n      , string = encodingMode.discardStrings ? null : ''\n      , charCode;\n\n    for (;;) {\n      charCode = input.charCodeAt(index++);\n      if (delimiter === charCode) break;\n      if (index > length || isLineTerminator(charCode)) {\n        string += input.slice(stringStart, index - 1);\n        raise(null, errors.unfinishedString, input.slice(tokenStart, index - 1));\n      }\n      if (92 === charCode) { // backslash\n        if (!encodingMode.discardStrings) {\n          var beforeEscape = input.slice(stringStart, index - 1);\n          string += encodingMode.fixup(beforeEscape);\n        }\n        var escapeValue = readEscapeSequence();\n        if (!encodingMode.discardStrings)\n          string += escapeValue;\n        stringStart = index;\n      }\n    }\n    if (!encodingMode.discardStrings) {\n      string += encodingMode.encodeByte(null);\n      string += encodingMode.fixup(input.slice(stringStart, index - 1));\n    }\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: beginLine\n      , lineStart: beginLineStart\n      , lastLine: line\n      , lastLineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanLongStringLiteral() {\n    var beginLine = line\n      , beginLineStart = lineStart\n      , string = readLongString(false);\n    if (false === string) raise(token, errors.expected, '[', tokenValue(token));\n\n    return {\n        type: StringLiteral\n      , value: encodingMode.discardStrings ? null : encodingMode.fixup(string)\n      , line: beginLine\n      , lineStart: beginLineStart\n      , lastLine: line\n      , lastLineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanNumericLiteral() {\n    var character = input.charAt(index)\n      , next = input.charAt(index + 1);\n\n    var literal = ('0' === character && 'xX'.indexOf(next || null) >= 0) ?\n      readHexLiteral() : readDecLiteral();\n\n    var foundImaginaryUnit = readImaginaryUnitSuffix()\n      , foundInt64Suffix = readInt64Suffix();\n\n    if (foundInt64Suffix && (foundImaginaryUnit || literal.hasFractionPart)) {\n      raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n    }\n\n    return {\n        type: NumericLiteral\n      , value: literal.value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function readImaginaryUnitSuffix() {\n    if (!features.imaginaryNumbers) return;\n    if ('iI'.indexOf(input.charAt(index) || null) >= 0) {\n      ++index;\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  function readInt64Suffix() {\n    if (!features.integerSuffixes) return;\n\n    if ('uU'.indexOf(input.charAt(index) || null) >= 0) {\n      ++index;\n      if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n        ++index;\n        if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n          ++index;\n          return 'ULL';\n        } else {\n          raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n        }\n      } else {\n        raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n      }\n    } else if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n        ++index;\n        if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n          ++index;\n          return 'LL';\n        } else {\n          raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n        }\n    }\n  }\n\n  function readHexLiteral() {\n    var fraction = 0 // defaults to 0 as it gets summed\n      , binaryExponent = 1 // defaults to 1 as it gets multiplied\n      , binarySign = 1 // positive\n      , digit, fractionStart, exponentStart, digitStart;\n\n    digitStart = index += 2; // Skip 0x part\n    if (!isHexDigit(input.charCodeAt(index)))\n      raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n\n    while (isHexDigit(input.charCodeAt(index))) ++index;\n    digit = parseInt(input.slice(digitStart, index), 16);\n    var foundFraction = false;\n    if ('.' === input.charAt(index)) {\n      foundFraction = true;\n      fractionStart = ++index;\n\n      while (isHexDigit(input.charCodeAt(index))) ++index;\n      fraction = input.slice(fractionStart, index);\n      fraction = (fractionStart === index) ? 0\n        : parseInt(fraction, 16) / Math.pow(16, index - fractionStart);\n    }\n    var foundBinaryExponent = false;\n    if ('pP'.indexOf(input.charAt(index) || null) >= 0) {\n      foundBinaryExponent = true;\n      ++index;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0)\n        binarySign = ('+' === input.charAt(index++)) ? 1 : -1;\n\n      exponentStart = index;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) ++index;\n      binaryExponent = input.slice(exponentStart, index);\n      binaryExponent = Math.pow(2, binaryExponent * binarySign);\n    }\n\n    return {\n      value: (digit + fraction) * binaryExponent,\n      hasFractionPart: foundFraction || foundBinaryExponent\n    };\n  }\n\n  function readDecLiteral() {\n    while (isDecDigit(input.charCodeAt(index))) ++index;\n    var foundFraction = false;\n    if ('.' === input.charAt(index)) {\n      foundFraction = true;\n      ++index;\n      while (isDecDigit(input.charCodeAt(index))) ++index;\n    }\n    var foundExponent = false;\n    if ('eE'.indexOf(input.charAt(index) || null) >= 0) {\n      foundExponent = true;\n      ++index;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0) ++index;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) ++index;\n    }\n\n    return {\n      value: parseFloat(input.slice(tokenStart, index)),\n      hasFractionPart: foundFraction || foundExponent\n    };\n  }\n\n  function readUnicodeEscapeSequence() {\n    var sequenceStart = index++;\n\n    if (input.charAt(index++) !== '{')\n      raise(null, errors.braceExpected, '{', '\\\\' + input.slice(sequenceStart, index));\n    if (!isHexDigit(input.charCodeAt(index)))\n      raise(null, errors.hexadecimalDigitExpected, '\\\\' + input.slice(sequenceStart, index));\n\n    while (input.charCodeAt(index) === 0x30) ++index;\n    var escStart = index;\n\n    while (isHexDigit(input.charCodeAt(index))) {\n      ++index;\n      if (index - escStart > 6)\n        raise(null, errors.tooLargeCodepoint, '\\\\' + input.slice(sequenceStart, index));\n    }\n\n    var b = input.charAt(index++);\n    if (b !== '}') {\n      if ((b === '\"') || (b === \"'\"))\n        raise(null, errors.braceExpected, '}', '\\\\' + input.slice(sequenceStart, index--));\n      else\n        raise(null, errors.hexadecimalDigitExpected, '\\\\' + input.slice(sequenceStart, index));\n    }\n\n    var codepoint = parseInt(input.slice(escStart, index - 1) || '0', 16);\n    var frag = '\\\\' + input.slice(sequenceStart, index);\n\n    if (codepoint > 0x10ffff) {\n      raise(null, errors.tooLargeCodepoint, frag);\n    }\n\n    return encodingMode.encodeUTF8(codepoint, frag);\n  }\n  function readEscapeSequence() {\n    var sequenceStart = index;\n    switch (input.charAt(index)) {\n      case 'a': ++index; return '\\x07';\n      case 'n': ++index; return '\\n';\n      case 'r': ++index; return '\\r';\n      case 't': ++index; return '\\t';\n      case 'v': ++index; return '\\x0b';\n      case 'b': ++index; return '\\b';\n      case 'f': ++index; return '\\f';\n      case '\\r':\n      case '\\n':\n        consumeEOL();\n        return '\\n';\n\n      case '0': case '1': case '2': case '3': case '4':\n      case '5': case '6': case '7': case '8': case '9':\n        while (isDecDigit(input.charCodeAt(index)) && index - sequenceStart < 3) ++index;\n\n        var frag = input.slice(sequenceStart, index);\n        var ddd = parseInt(frag, 10);\n        if (ddd > 255) {\n          raise(null, errors.decimalEscapeTooLarge, '\\\\' + ddd);\n        }\n        return encodingMode.encodeByte(ddd, '\\\\' + frag);\n\n      case 'z':\n        if (features.skipWhitespaceEscape) {\n          ++index;\n          skipWhiteSpace();\n          return '';\n        }\n        break;\n\n      case 'x':\n        if (features.hexEscapes) {\n          if (isHexDigit(input.charCodeAt(index + 1)) &&\n              isHexDigit(input.charCodeAt(index + 2))) {\n            index += 3;\n            return encodingMode.encodeByte(parseInt(input.slice(sequenceStart + 1, index), 16), '\\\\' + input.slice(sequenceStart, index));\n          }\n          raise(null, errors.hexadecimalDigitExpected, '\\\\' + input.slice(sequenceStart, index + 2));\n        }\n        break;\n\n      case 'u':\n        if (features.unicodeEscapes)\n          return readUnicodeEscapeSequence();\n        break;\n\n      case '\\\\': case '\"': case \"'\":\n        return input.charAt(index++);\n    }\n\n    if (features.strictEscapes)\n      raise(null, errors.invalidEscape, '\\\\' + input.slice(sequenceStart, index + 1));\n    return input.charAt(index++);\n  }\n\n  function scanComment() {\n    tokenStart = index;\n    index += 2; // --\n\n    var character = input.charAt(index)\n      , content = ''\n      , isLong = false\n      , commentStart = index\n      , lineStartComment = lineStart\n      , lineComment = line;\n\n    if ('[' === character) {\n      content = readLongString(true);\n      if (false === content) content = character;\n      else isLong = true;\n    }\n    if (!isLong) {\n      while (index < length) {\n        if (isLineTerminator(input.charCodeAt(index))) break;\n        ++index;\n      }\n      if (options.comments) content = input.slice(commentStart, index);\n    }\n\n    if (options.comments) {\n      var node = ast.comment(content, input.slice(tokenStart, index));\n      if (options.locations) {\n        node.loc = {\n            start: { line: lineComment, column: tokenStart - lineStartComment }\n          , end: { line: line, column: index - lineStart }\n        };\n      }\n      if (options.ranges) {\n        node.range = [tokenStart, index];\n      }\n      if (options.onCreateNode) options.onCreateNode(node);\n      comments.push(node);\n    }\n  }\n\n  function readLongString(isComment) {\n    var level = 0\n      , content = ''\n      , terminator = false\n      , character, stringStart, firstLine = line;\n\n    ++index; // [\n    while ('=' === input.charAt(index + level)) ++level;\n    if ('[' !== input.charAt(index + level)) return false;\n\n    index += level + 1;\n    if (isLineTerminator(input.charCodeAt(index))) consumeEOL();\n\n    stringStart = index;\n    while (index < length) {\n      while (isLineTerminator(input.charCodeAt(index))) consumeEOL();\n\n      character = input.charAt(index++);\n      if (']' === character) {\n        terminator = true;\n        for (var i = 0; i < level; ++i) {\n          if ('=' !== input.charAt(index + i)) terminator = false;\n        }\n        if (']' !== input.charAt(index + level)) terminator = false;\n      }\n      if (terminator) {\n        content += input.slice(stringStart, index - 1);\n        index += level + 1;\n        return content;\n      }\n    }\n\n    raise(null, isComment ?\n                errors.unfinishedLongComment :\n                errors.unfinishedLongString,\n          firstLine, '');\n  }\n\n  function next() {\n    previousToken = token;\n    token = lookahead;\n    lookahead = lex();\n  }\n\n  function consume(value) {\n    if (value === token.value) {\n      next();\n      return true;\n    }\n    return false;\n  }\n\n  function expect(value) {\n    if (value === token.value) next();\n    else raise(token, errors.expected, value, tokenValue(token));\n  }\n\n  function isWhiteSpace(charCode) {\n    return 9 === charCode || 32 === charCode || 0xB === charCode || 0xC === charCode;\n  }\n\n  function isLineTerminator(charCode) {\n    return 10 === charCode || 13 === charCode;\n  }\n\n  function isDecDigit(charCode) {\n    return charCode >= 48 && charCode <= 57;\n  }\n\n  function isHexDigit(charCode) {\n    return (charCode >= 48 && charCode <= 57) || (charCode >= 97 && charCode <= 102) || (charCode >= 65 && charCode <= 70);\n  }\n\n  function isIdentifierStart(charCode) {\n    if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode)\n      return true;\n    if (features.extendedIdentifiers && charCode >= 128)\n      return true;\n    return false;\n  }\n\n  function isIdentifierPart(charCode) {\n    if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode || (charCode >= 48 && charCode <= 57))\n      return true;\n    if (features.extendedIdentifiers && charCode >= 128)\n      return true;\n    return false;\n  }\n\n  function isKeyword(id) {\n    switch (id.length) {\n      case 2:\n        return 'do' === id || 'if' === id || 'in' === id || 'or' === id;\n      case 3:\n        return 'and' === id || 'end' === id || 'for' === id || 'not' === id;\n      case 4:\n        if ('else' === id || 'then' === id)\n          return true;\n        if (features.labels && !features.contextualGoto)\n          return ('goto' === id);\n        return false;\n      case 5:\n        return 'break' === id || 'local' === id || 'until' === id || 'while' === id;\n      case 6:\n        return 'elseif' === id || 'repeat' === id || 'return' === id;\n      case 8:\n        return 'function' === id;\n    }\n    return false;\n  }\n\n  function isUnary(token) {\n    if (Punctuator === token.type) return '#-~'.indexOf(token.value) >= 0;\n    if (Keyword === token.type) return 'not' === token.value;\n    return false;\n  }\n\n  function isBlockFollow(token) {\n    if (EOF === token.type) return true;\n    if (Keyword !== token.type) return false;\n    switch (token.value) {\n      case 'else': case 'elseif':\n      case 'end': case 'until':\n        return true;\n      default:\n        return false;\n    }\n  }\n  var scopes\n    , scopeDepth\n    , globals;\n  function createScope() {\n    var scope = scopes[scopeDepth++].slice();\n    scopes.push(scope);\n    if (options.onCreateScope) options.onCreateScope();\n  }\n  function destroyScope() {\n    var scope = scopes.pop();\n    --scopeDepth;\n    if (options.onDestroyScope) options.onDestroyScope();\n  }\n  function scopeIdentifierName(name) {\n    if (options.onLocalDeclaration) options.onLocalDeclaration(name);\n    if (-1 !== indexOf(scopes[scopeDepth], name)) return;\n    scopes[scopeDepth].push(name);\n  }\n  function scopeIdentifier(node) {\n    scopeIdentifierName(node.name);\n    attachScope(node, true);\n  }\n  function attachScope(node, isLocal) {\n    if (!isLocal && -1 === indexOfObject(globals, 'name', node.name))\n      globals.push(node);\n\n    node.isLocal = isLocal;\n  }\n  function scopeHasName(name) {\n    return (-1 !== indexOf(scopes[scopeDepth], name));\n  }\n\n  var locations = []\n    , trackLocations;\n\n  function createLocationMarker() {\n    return new Marker(token);\n  }\n\n  function Marker(token) {\n    if (options.locations) {\n      this.loc = {\n          start: {\n            line: token.line\n          , column: token.range[0] - token.lineStart\n        }\n        , end: {\n            line: 0\n          , column: 0\n        }\n      };\n    }\n    if (options.ranges) this.range = [token.range[0], 0];\n  }\n  Marker.prototype.complete = function() {\n    if (options.locations) {\n      this.loc.end.line = previousToken.lastLine || previousToken.line;\n      this.loc.end.column = previousToken.range[1] - (previousToken.lastLineStart || previousToken.lineStart);\n    }\n    if (options.ranges) {\n      this.range[1] = previousToken.range[1];\n    }\n  };\n\n  Marker.prototype.bless = function (node) {\n    if (this.loc) {\n      var loc = this.loc;\n      node.loc = {\n        start: {\n          line: loc.start.line,\n          column: loc.start.column\n        },\n        end: {\n          line: loc.end.line,\n          column: loc.end.column\n        }\n      };\n    }\n    if (this.range) {\n      node.range = [\n        this.range[0],\n        this.range[1]\n      ];\n    }\n  };\n  function markLocation() {\n    if (trackLocations) locations.push(createLocationMarker());\n  }\n  function pushLocation(marker) {\n    if (trackLocations) locations.push(marker);\n  }\n\n  function FullFlowContext() {\n    this.scopes = [];\n    this.pendingGotos = [];\n  }\n\n  FullFlowContext.prototype.isInLoop = function () {\n    var i = this.scopes.length;\n    while (i --> 0) {\n      if (this.scopes[i].isLoop)\n        return true;\n    }\n    return false;\n  };\n\n  FullFlowContext.prototype.pushScope = function (isLoop) {\n    var scope = {\n      labels: {},\n      locals: [],\n      deferredGotos: [],\n      isLoop: !!isLoop\n    };\n    this.scopes.push(scope);\n  };\n\n  FullFlowContext.prototype.popScope = function () {\n    for (var i = 0; i < this.pendingGotos.length; ++i) {\n      var theGoto = this.pendingGotos[i];\n      if (theGoto.maxDepth >= this.scopes.length)\n        if (--theGoto.maxDepth <= 0)\n          raise(theGoto.token, errors.labelNotVisible, theGoto.target);\n    }\n\n    this.scopes.pop();\n  };\n\n  FullFlowContext.prototype.addGoto = function (target, token) {\n    var localCounts = [];\n\n    for (var i = 0; i < this.scopes.length; ++i) {\n      var scope = this.scopes[i];\n      localCounts.push(scope.locals.length);\n      if (Object.prototype.hasOwnProperty.call(scope.labels, target))\n        return;\n    }\n\n    this.pendingGotos.push({\n      maxDepth: this.scopes.length,\n      target: target,\n      token: token,\n      localCounts: localCounts\n    });\n  };\n\n  FullFlowContext.prototype.addLabel = function (name, token) {\n    var scope = this.currentScope();\n\n    if (Object.prototype.hasOwnProperty.call(scope.labels, name)) {\n      raise(token, errors.labelAlreadyDefined, name, scope.labels[name].line);\n    } else {\n      var newGotos = [];\n\n      for (var i = 0; i < this.pendingGotos.length; ++i) {\n        var theGoto = this.pendingGotos[i];\n\n        if (theGoto.maxDepth >= this.scopes.length && theGoto.target === name) {\n          if (theGoto.localCounts[this.scopes.length - 1] < scope.locals.length) {\n            scope.deferredGotos.push(theGoto);\n          }\n          continue;\n        }\n\n        newGotos.push(theGoto);\n      }\n\n      this.pendingGotos = newGotos;\n    }\n\n    scope.labels[name] = {\n      localCount: scope.locals.length,\n      line: token.line\n    };\n  };\n\n  FullFlowContext.prototype.addLocal = function (name, token) {\n    this.currentScope().locals.push({\n      name: name,\n      token: token\n    });\n  };\n\n  FullFlowContext.prototype.currentScope = function () {\n    return this.scopes[this.scopes.length - 1];\n  };\n\n  FullFlowContext.prototype.raiseDeferredErrors = function () {\n    var scope = this.currentScope();\n    var bads = scope.deferredGotos;\n    for (var i = 0; i < bads.length; ++i) {\n      var theGoto = bads[i];\n      raise(theGoto.token, errors.gotoJumpInLocalScope, theGoto.target, scope.locals[theGoto.localCounts[this.scopes.length - 1]].name);\n    }\n  };\n\n  function LoopFlowContext() {\n    this.level = 0;\n    this.loopLevels = [];\n  }\n\n  LoopFlowContext.prototype.isInLoop = function () {\n    return !!this.loopLevels.length;\n  };\n\n  LoopFlowContext.prototype.pushScope = function (isLoop) {\n    ++this.level;\n    if (isLoop)\n      this.loopLevels.push(this.level);\n  };\n\n  LoopFlowContext.prototype.popScope = function () {\n    var levels = this.loopLevels;\n    var levlen = levels.length;\n    if (levlen) {\n      if (levels[levlen - 1] === this.level)\n        levels.pop();\n    }\n    --this.level;\n  };\n\n  LoopFlowContext.prototype.addGoto =\n  LoopFlowContext.prototype.addLabel =\n  function () { throw new Error('This should never happen'); };\n\n  LoopFlowContext.prototype.addLocal =\n  LoopFlowContext.prototype.raiseDeferredErrors =\n  function () {};\n\n  function makeFlowContext() {\n    return features.labels ? new FullFlowContext() : new LoopFlowContext();\n  }\n\n  function parseChunk() {\n    next();\n    markLocation();\n    if (options.scope) createScope();\n    var flowContext = makeFlowContext();\n    flowContext.allowVararg = true;\n    flowContext.pushScope();\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    if (EOF !== token.type) unexpected(token);\n    if (trackLocations && !body.length) previousToken = token;\n    return finishNode(ast.chunk(body));\n  }\n\n  function parseBlock(flowContext) {\n    var block = []\n      , statement;\n\n    while (!isBlockFollow(token)) {\n      if ('return' === token.value || (!features.relaxedBreak && 'break' === token.value)) {\n        block.push(parseStatement(flowContext));\n        break;\n      }\n      statement = parseStatement(flowContext);\n      consume(';');\n      if (statement) block.push(statement);\n    }\n    return block;\n  }\n\n  function parseStatement(flowContext) {\n    markLocation();\n\n    if (Punctuator === token.type) {\n      if (consume('::')) return parseLabelStatement(flowContext);\n    }\n    if (features.emptyStatement) {\n      if (consume(';')) {\n        if (trackLocations) locations.pop();\n        return;\n      }\n    }\n\n    flowContext.raiseDeferredErrors();\n\n    if (Keyword === token.type) {\n      switch (token.value) {\n        case 'local':    next(); return parseLocalStatement(flowContext);\n        case 'if':       next(); return parseIfStatement(flowContext);\n        case 'return':   next(); return parseReturnStatement(flowContext);\n        case 'function': next();\n          var name = parseFunctionName();\n          return parseFunctionDeclaration(name);\n        case 'while':    next(); return parseWhileStatement(flowContext);\n        case 'for':      next(); return parseForStatement(flowContext);\n        case 'repeat':   next(); return parseRepeatStatement(flowContext);\n        case 'break':    next();\n          if (!flowContext.isInLoop())\n            raise(token, errors.noLoopToBreak, token.value);\n          return parseBreakStatement();\n        case 'do':       next(); return parseDoStatement(flowContext);\n        case 'goto':     next(); return parseGotoStatement(flowContext);\n      }\n    }\n\n    if (features.contextualGoto &&\n        token.type === Identifier && token.value === 'goto' &&\n        lookahead.type === Identifier && lookahead.value !== 'goto') {\n      next(); return parseGotoStatement(flowContext);\n    }\n    if (trackLocations) locations.pop();\n\n    return parseAssignmentOrCallStatement(flowContext);\n  }\n\n  function parseLabelStatement(flowContext) {\n    var nameToken = token\n      , label = parseIdentifier();\n\n    if (options.scope) {\n      scopeIdentifierName('::' + nameToken.value + '::');\n      attachScope(label, true);\n    }\n\n    expect('::');\n\n    flowContext.addLabel(nameToken.value, nameToken);\n    return finishNode(ast.labelStatement(label));\n  }\n\n  function parseBreakStatement() {\n    return finishNode(ast.breakStatement());\n  }\n\n  function parseGotoStatement(flowContext) {\n    var name = token.value\n      , gotoToken = previousToken\n      , label = parseIdentifier();\n\n    flowContext.addGoto(name, gotoToken);\n    return finishNode(ast.gotoStatement(label));\n  }\n\n  function parseDoStatement(flowContext) {\n    if (options.scope) createScope();\n    flowContext.pushScope();\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    expect('end');\n    return finishNode(ast.doStatement(body));\n  }\n\n  function parseWhileStatement(flowContext) {\n    var condition = parseExpectedExpression(flowContext);\n    expect('do');\n    if (options.scope) createScope();\n    flowContext.pushScope(true);\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    expect('end');\n    return finishNode(ast.whileStatement(condition, body));\n  }\n\n  function parseRepeatStatement(flowContext) {\n    if (options.scope) createScope();\n    flowContext.pushScope(true);\n    var body = parseBlock(flowContext);\n    expect('until');\n    flowContext.raiseDeferredErrors();\n    var condition = parseExpectedExpression(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    return finishNode(ast.repeatStatement(condition, body));\n  }\n\n  function parseReturnStatement(flowContext) {\n    var expressions = [];\n\n    if ('end' !== token.value) {\n      var expression = parseExpression(flowContext);\n      if (null != expression) expressions.push(expression);\n      while (consume(',')) {\n        expression = parseExpectedExpression(flowContext);\n        expressions.push(expression);\n      }\n      consume(';'); // grammar tells us ; is optional here.\n    }\n    return finishNode(ast.returnStatement(expressions));\n  }\n\n  function parseIfStatement(flowContext) {\n    var clauses = []\n      , condition\n      , body\n      , marker;\n    if (trackLocations) {\n      marker = locations[locations.length - 1];\n      locations.push(marker);\n    }\n    condition = parseExpectedExpression(flowContext);\n    expect('then');\n    if (options.scope) createScope();\n    flowContext.pushScope();\n    body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    clauses.push(finishNode(ast.ifClause(condition, body)));\n\n    if (trackLocations) marker = createLocationMarker();\n    while (consume('elseif')) {\n      pushLocation(marker);\n      condition = parseExpectedExpression(flowContext);\n      expect('then');\n      if (options.scope) createScope();\n      flowContext.pushScope();\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      if (options.scope) destroyScope();\n      clauses.push(finishNode(ast.elseifClause(condition, body)));\n      if (trackLocations) marker = createLocationMarker();\n    }\n\n    if (consume('else')) {\n      if (trackLocations) {\n        marker = new Marker(previousToken);\n        locations.push(marker);\n      }\n      if (options.scope) createScope();\n      flowContext.pushScope();\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      if (options.scope) destroyScope();\n      clauses.push(finishNode(ast.elseClause(body)));\n    }\n\n    expect('end');\n    return finishNode(ast.ifStatement(clauses));\n  }\n\n  function parseForStatement(flowContext) {\n    var variable = parseIdentifier()\n      , body;\n\n    if (options.scope) {\n      createScope();\n      scopeIdentifier(variable);\n    }\n    if (consume('=')) {\n      var start = parseExpectedExpression(flowContext);\n      expect(',');\n      var end = parseExpectedExpression(flowContext);\n      var step = consume(',') ? parseExpectedExpression(flowContext) : null;\n\n      expect('do');\n      flowContext.pushScope(true);\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      expect('end');\n      if (options.scope) destroyScope();\n\n      return finishNode(ast.forNumericStatement(variable, start, end, step, body));\n    }\n    else {\n      var variables = [variable];\n      while (consume(',')) {\n        variable = parseIdentifier();\n        if (options.scope) scopeIdentifier(variable);\n        variables.push(variable);\n      }\n      expect('in');\n      var iterators = [];\n      do {\n        var expression = parseExpectedExpression(flowContext);\n        iterators.push(expression);\n      } while (consume(','));\n\n      expect('do');\n      flowContext.pushScope(true);\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      expect('end');\n      if (options.scope) destroyScope();\n\n      return finishNode(ast.forGenericStatement(variables, iterators, body));\n    }\n  }\n\n  function parseLocalStatement(flowContext) {\n    var name\n      , declToken = previousToken;\n\n    if (Identifier === token.type) {\n      var variables = []\n        , init = [];\n\n      do {\n        name = parseIdentifier();\n\n        variables.push(name);\n        flowContext.addLocal(name.name, declToken);\n      } while (consume(','));\n\n      if (consume('=')) {\n        do {\n          var expression = parseExpectedExpression(flowContext);\n          init.push(expression);\n        } while (consume(','));\n      }\n      if (options.scope) {\n        for (var i = 0, l = variables.length; i < l; ++i) {\n          scopeIdentifier(variables[i]);\n        }\n      }\n\n      return finishNode(ast.localStatement(variables, init));\n    }\n    if (consume('function')) {\n      name = parseIdentifier();\n      flowContext.addLocal(name.name, declToken);\n\n      if (options.scope) {\n        scopeIdentifier(name);\n        createScope();\n      }\n      return parseFunctionDeclaration(name, true);\n    } else {\n      raiseUnexpectedToken('', token);\n    }\n  }\n\n  function parseAssignmentOrCallStatement(flowContext) {\n    var previous = token\n      , marker, startMarker;\n    var lvalue, base, name;\n\n    var targets = [];\n\n    if (trackLocations) startMarker = createLocationMarker();\n\n    do {\n      if (trackLocations) marker = createLocationMarker();\n\n      if (Identifier === token.type) {\n        name = token.value;\n        base = parseIdentifier();\n        if (options.scope) attachScope(base, scopeHasName(name));\n        lvalue = true;\n      } else if ('(' === token.value) {\n        next();\n        base = parseExpectedExpression(flowContext);\n        expect(')');\n        lvalue = false;\n      } else {\n        return unexpected(token);\n      }\n\n      both: for (;;) {\n        var newBase;\n\n        switch (StringLiteral === token.type ? '\"' : token.value) {\n        case '.':\n        case '[':\n          lvalue = true;\n          break;\n        case ':':\n        case '(':\n        case '{':\n        case '\"':\n          lvalue = null;\n          break;\n        default:\n          break both;\n        }\n\n        base = parsePrefixExpressionPart(base, marker, flowContext);\n      }\n\n      targets.push(base);\n\n      if (',' !== token.value)\n        break;\n\n      if (!lvalue) {\n        return unexpected(token);\n      }\n\n      next();\n    } while (true);\n\n    if (targets.length === 1 && lvalue === null) {\n      pushLocation(marker);\n      return finishNode(ast.callStatement(targets[0]));\n    } else if (!lvalue) {\n      return unexpected(token);\n    }\n\n    expect('=');\n\n    var values = [];\n\n    do {\n      values.push(parseExpectedExpression(flowContext));\n    } while (consume(','));\n\n    pushLocation(startMarker);\n    return finishNode(ast.assignmentStatement(targets, values));\n  }\n\n  function parseIdentifier() {\n    markLocation();\n    var identifier = token.value;\n    if (Identifier !== token.type) raiseUnexpectedToken('', token);\n    next();\n    return finishNode(ast.identifier(identifier));\n  }\n\n  function parseFunctionDeclaration(name, isLocal) {\n    var flowContext = makeFlowContext();\n    flowContext.pushScope();\n\n    var parameters = [];\n    expect('(');\n    if (!consume(')')) {\n      while (true) {\n        if (Identifier === token.type) {\n          var parameter = parseIdentifier();\n          if (options.scope) scopeIdentifier(parameter);\n\n          parameters.push(parameter);\n\n          if (consume(',')) continue;\n        }\n        else if (VarargLiteral === token.type) {\n          flowContext.allowVararg = true;\n          parameters.push(parsePrimaryExpression(flowContext));\n        } else {\n          raiseUnexpectedToken(' or \\'...\\'', token);\n        }\n        expect(')');\n        break;\n      }\n    }\n\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    expect('end');\n    if (options.scope) destroyScope();\n\n    isLocal = isLocal || false;\n    return finishNode(ast.functionStatement(name, parameters, isLocal, body));\n  }\n\n  function parseFunctionName() {\n    var base, name, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    base = parseIdentifier();\n\n    if (options.scope) {\n      attachScope(base, scopeHasName(base.name));\n      createScope();\n    }\n\n    while (consume('.')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      base = finishNode(ast.memberExpression(base, '.', name));\n    }\n\n    if (consume(':')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      base = finishNode(ast.memberExpression(base, ':', name));\n      if (options.scope) scopeIdentifierName('self');\n    }\n\n    return base;\n  }\n\n  function parseTableConstructor(flowContext) {\n    var fields = []\n      , key, value;\n\n    while (true) {\n      markLocation();\n      if (Punctuator === token.type && consume('[')) {\n        key = parseExpectedExpression(flowContext);\n        expect(']');\n        expect('=');\n        value = parseExpectedExpression(flowContext);\n        fields.push(finishNode(ast.tableKey(key, value)));\n      } else if (Identifier === token.type) {\n        if ('=' === lookahead.value) {\n          key = parseIdentifier();\n          next();\n          value = parseExpectedExpression(flowContext);\n          fields.push(finishNode(ast.tableKeyString(key, value)));\n        } else {\n          value = parseExpectedExpression(flowContext);\n          fields.push(finishNode(ast.tableValue(value)));\n        }\n      } else {\n        if (null == (value = parseExpression(flowContext))) {\n          locations.pop();\n          break;\n        }\n        fields.push(finishNode(ast.tableValue(value)));\n      }\n      if (',;'.indexOf(token.value) >= 0) {\n        next();\n        continue;\n      }\n      break;\n    }\n    expect('}');\n    return finishNode(ast.tableConstructorExpression(fields));\n  }\n\n  function parseExpression(flowContext) {\n    var expression = parseSubExpression(0, flowContext);\n    return expression;\n  }\n\n  function parseExpectedExpression(flowContext) {\n    var expression = parseExpression(flowContext);\n    if (null == expression) raiseUnexpectedToken('', token);\n    else return expression;\n  }\n\n  function binaryPrecedence(operator) {\n    var charCode = operator.charCodeAt(0)\n      , length = operator.length;\n\n    if (1 === length) {\n      switch (charCode) {\n        case 94: return 12; // ^\n        case 42: case 47: case 37: return 10; // * / %\n        case 43: case 45: return 9; // + -\n        case 38: return 6; // &\n        case 126: return 5; // ~\n        case 124: return 4; // |\n        case 60: case 62: return 3; // < >\n      }\n    } else if (2 === length) {\n      switch (charCode) {\n        case 47: return 10; // //\n        case 46: return 8; // ..\n        case 60: case 62:\n            if('<<' === operator || '>>' === operator) return 7; // << >>\n            return 3; // <= >=\n        case 61: case 126: return 3; // == ~=\n        case 111: return 1; // or\n      }\n    } else if (97 === charCode && 'and' === operator) return 2;\n    return 0;\n  }\n\n  function parseSubExpression(minPrecedence, flowContext) {\n    var operator = token.value\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (isUnary(token)) {\n      markLocation();\n      next();\n      var argument = parseSubExpression(10, flowContext);\n      if (argument == null) raiseUnexpectedToken('', token);\n      expression = finishNode(ast.unaryExpression(operator, argument));\n    }\n    if (null == expression) {\n      expression = parsePrimaryExpression(flowContext);\n      if (null == expression) {\n        expression = parsePrefixExpression(flowContext);\n      }\n    }\n    if (null == expression) return null;\n\n    var precedence;\n    while (true) {\n      operator = token.value;\n\n      precedence = (Punctuator === token.type || Keyword === token.type) ?\n        binaryPrecedence(operator) : 0;\n\n      if (precedence === 0 || precedence <= minPrecedence) break;\n      if ('^' === operator || '..' === operator) --precedence;\n      next();\n      var right = parseSubExpression(precedence, flowContext);\n      if (null == right) raiseUnexpectedToken('', token);\n      if (trackLocations) locations.push(marker);\n      expression = finishNode(ast.binaryExpression(operator, expression, right));\n\n    }\n    return expression;\n  }\n\n  function parsePrefixExpressionPart(base, marker, flowContext) {\n    var expression, identifier;\n\n    if (Punctuator === token.type) {\n      switch (token.value) {\n        case '[':\n          pushLocation(marker);\n          next();\n          expression = parseExpectedExpression(flowContext);\n          expect(']');\n          return finishNode(ast.indexExpression(base, expression));\n        case '.':\n          pushLocation(marker);\n          next();\n          identifier = parseIdentifier();\n          return finishNode(ast.memberExpression(base, '.', identifier));\n        case ':':\n          pushLocation(marker);\n          next();\n          identifier = parseIdentifier();\n          base = finishNode(ast.memberExpression(base, ':', identifier));\n          pushLocation(marker);\n          return parseCallExpression(base, flowContext);\n        case '(': case '{': // args\n          pushLocation(marker);\n          return parseCallExpression(base, flowContext);\n      }\n    } else if (StringLiteral === token.type) {\n      pushLocation(marker);\n      return parseCallExpression(base, flowContext);\n    }\n\n    return null;\n  }\n\n  function parsePrefixExpression(flowContext) {\n    var base, name, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (Identifier === token.type) {\n      name = token.value;\n      base = parseIdentifier();\n      if (options.scope) attachScope(base, scopeHasName(name));\n    } else if (consume('(')) {\n      base = parseExpectedExpression(flowContext);\n      expect(')');\n    } else {\n      return null;\n    }\n    for (;;) {\n      var newBase = parsePrefixExpressionPart(base, marker, flowContext);\n      if (newBase === null)\n        break;\n      base = newBase;\n    }\n\n    return base;\n  }\n\n  function parseCallExpression(base, flowContext) {\n    if (Punctuator === token.type) {\n      switch (token.value) {\n        case '(':\n          if (!features.emptyStatement) {\n            if (token.line !== previousToken.line)\n              raise(null, errors.ambiguousSyntax, token.value);\n          }\n          next();\n          var expressions = [];\n          var expression = parseExpression(flowContext);\n          if (null != expression) expressions.push(expression);\n          while (consume(',')) {\n            expression = parseExpectedExpression(flowContext);\n            expressions.push(expression);\n          }\n\n          expect(')');\n          return finishNode(ast.callExpression(base, expressions));\n\n        case '{':\n          markLocation();\n          next();\n          var table = parseTableConstructor(flowContext);\n          return finishNode(ast.tableCallExpression(base, table));\n      }\n    } else if (StringLiteral === token.type) {\n      return finishNode(ast.stringCallExpression(base, parsePrimaryExpression(flowContext)));\n    }\n\n    raiseUnexpectedToken('function arguments', token);\n  }\n\n  function parsePrimaryExpression(flowContext) {\n    var literals = StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral\n      , value = token.value\n      , type = token.type\n      , marker;\n\n    if (trackLocations) marker = createLocationMarker();\n\n    if (type === VarargLiteral && !flowContext.allowVararg) {\n      raise(token, errors.cannotUseVararg, token.value);\n    }\n\n    if (type & literals) {\n      pushLocation(marker);\n      var raw = input.slice(token.range[0], token.range[1]);\n      next();\n      return finishNode(ast.literal(type, value, raw));\n    } else if (Keyword === type && 'function' === value) {\n      pushLocation(marker);\n      next();\n      if (options.scope) createScope();\n      return parseFunctionDeclaration(null);\n    } else if (consume('{')) {\n      pushLocation(marker);\n      return parseTableConstructor(flowContext);\n    }\n  }\n\n  exports.parse = parse;\n\n  var versionFeatures = {\n    '5.1': {\n    },\n    '5.2': {\n      labels: true,\n      emptyStatement: true,\n      hexEscapes: true,\n      skipWhitespaceEscape: true,\n      strictEscapes: true,\n      relaxedBreak: true\n    },\n    '5.3': {\n      labels: true,\n      emptyStatement: true,\n      hexEscapes: true,\n      skipWhitespaceEscape: true,\n      strictEscapes: true,\n      unicodeEscapes: true,\n      bitwiseOperators: true,\n      integerDivision: true,\n      relaxedBreak: true\n    },\n    'LuaJIT': {\n      labels: true,\n      contextualGoto: true,\n      hexEscapes: true,\n      skipWhitespaceEscape: true,\n      strictEscapes: true,\n      unicodeEscapes: true,\n      imaginaryNumbers: true,\n      integerSuffixes: true\n    }\n  };\n\n  function parse(_input, _options) {\n    if ('undefined' === typeof _options && 'object' === typeof _input) {\n      _options = _input;\n      _input = undefined;\n    }\n    if (!_options) _options = {};\n\n    input = _input || '';\n    options = assign({}, defaultOptions, _options);\n    index = 0;\n    line = 1;\n    lineStart = 0;\n    length = input.length;\n    scopes = [[]];\n    scopeDepth = 0;\n    globals = [];\n    locations = [];\n\n    if (!Object.prototype.hasOwnProperty.call(versionFeatures, options.luaVersion)) {\n      throw new Error(sprintf(\"Lua version '%1' not supported\", options.luaVersion));\n    }\n\n    features = assign({}, versionFeatures[options.luaVersion]);\n    if (options.extendedIdentifiers !== void 0)\n      features.extendedIdentifiers = !!options.extendedIdentifiers;\n\n    if (!Object.prototype.hasOwnProperty.call(encodingModes, options.encodingMode)) {\n      throw new Error(sprintf(\"Encoding mode '%1' not supported\", options.encodingMode));\n    }\n\n    encodingMode = encodingModes[options.encodingMode];\n\n    if (options.comments) comments = [];\n    if (!options.wait) return end();\n    return exports;\n  }\n  exports.write = write;\n\n  function write(_input) {\n    input += String(_input);\n    length = input.length;\n    return exports;\n  }\n  exports.end = end;\n\n  function end(_input) {\n    if ('undefined' !== typeof _input) write(_input);\n    if (input && input.substr(0, 2) === '#!') input = input.replace(/^.*/, function (line) {\n      return line.replace(/./g, ' ');\n    });\n\n    length = input.length;\n    trackLocations = options.locations || options.ranges;\n    lookahead = lex();\n\n    var chunk = parseChunk();\n    if (options.comments) chunk.comments = comments;\n    if (options.scope) chunk.globals = globals;\n    if (locations.length > 0)\n      throw new Error('Location tracking failed. This is most likely a bug in luaparse');\n\n    return chunk;\n  }\n\n}));\n\n});\n\nace.define(\"ace/mode/lua_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar luaparse = require(\"../mode/lua/luaparse\");\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            luaparse.parse(value);\n        } catch(e) {\n            if (e instanceof luaparse.SyntaxError) {\n                errors.push({\n                    row: e.line - 1,\n                    column: e.column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"],"mappings":"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","names":["require_c224886a075dcbcf9433ec9416f08206","__commonJSMin","exports","window","msgs","message","file","line","col","err","parentId","moduleName","chunks","base","previous","id","module","path","resolveModuleId","paths","testPath","tail","alias","i","deps","factory","req","childId","returnExports","dep","topLevelNamespaces","EventEmitter","oop","Sender","data","callbackId","name","main","sender","e","msg","clazz","require","ctor","superCtor","obj","mixin","key","proto","throwDeltaError","delta","errorText","positionInDocument","docLines","position","validateDelta","start","end","numRangeRows","numRangeLastLineChars","doNotValidate","row","startColumn","lines","args","endColumn","endRow","stopPropagation","preventDefault","eventName","listeners","defaultHandler","callback","_self","newCallback","resolve","handlers","old","disabled","capturing","index","comparePoints","p1","p2","Range","startRow","range","column","cmp","p","firstRow","lastRow","session","screenPosStart","screenPosEnd","Anchor","doc","point","$getTransformedPoint","noClip","pos","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","applyDelta","Document","textOrLines","text","len","match","newLineMode","l","length","deleteFirstNewLine","deleteLastNewLine","startCol","endCol","deletedLines","deltas","isInsert","docLength","MAX","from","to","chunk","newlineLength","deepCopy","copy","a","string","count","result","trimBeginRegexp","trimEndRegexp","array","arr","map","props","value","str","regExp","matches","fcn","timer","deferred","timeout","defaultTimeout","lang","Mirror","deferredUpdate","d","root","input","options","features","encodingMode","defaultOptions","encodeUTF8","codepoint","highMask","toHex","num","digits","checkChars","rx","s","m","raise","errors","encodingModes","EOF","StringLiteral","Keyword","Identifier","NumericLiteral","Punctuator","BooleanLiteral","NilLiteral","VarargLiteral","ast","label","clauses","condition","body","variables","init","expression","identifier","parameters","isLocal","variable","step","iterators","type","raw","fields","operator","left","right","argument","indexer","finishNode","node","trackLocations","location","locations","slice","toString","indexOf","element","indexOfObject","property","sprintf","format","assign","dest","src","prop","fixupError","token","error","lineStart","tokenValue","raiseUnexpectedToken","unexpected","found","near","lookahead","previousToken","comments","tokenStart","lex","skipWhiteSpace","scanComment","charCode","next","isIdentifierStart","scanIdentifierOrKeyword","scanStringLiteral","scanNumericLiteral","isDecDigit","scanVarargLiteral","scanPunctuator","scanLongStringLiteral","consumeEOL","peekCharCode","isLineTerminator","isWhiteSpace","isIdentifierPart","isKeyword","delimiter","beginLine","beginLineStart","stringStart","beforeEscape","escapeValue","readEscapeSequence","readLongString","character","literal","readHexLiteral","readDecLiteral","foundImaginaryUnit","readImaginaryUnitSuffix","foundInt64Suffix","readInt64Suffix","fraction","binaryExponent","binarySign","digit","fractionStart","exponentStart","digitStart","isHexDigit","foundFraction","foundBinaryExponent","foundExponent","readUnicodeEscapeSequence","sequenceStart","escStart","b","frag","ddd","content","isLong","commentStart","lineStartComment","lineComment","isComment","level","terminator","firstLine","consume","expect","isUnary","isBlockFollow","scopes","scopeDepth","globals","createScope","scope","destroyScope","scopeIdentifierName","scopeIdentifier","attachScope","scopeHasName","createLocationMarker","Marker","loc","markLocation","pushLocation","marker","FullFlowContext","isLoop","theGoto","target","localCounts","newGotos","bads","LoopFlowContext","levels","levlen","makeFlowContext","parseChunk","flowContext","parseBlock","block","statement","parseStatement","parseLabelStatement","parseLocalStatement","parseIfStatement","parseReturnStatement","parseFunctionName","parseFunctionDeclaration","parseWhileStatement","parseForStatement","parseRepeatStatement","parseBreakStatement","parseDoStatement","parseGotoStatement","parseAssignmentOrCallStatement","nameToken","parseIdentifier","gotoToken","parseExpectedExpression","expressions","parseExpression","declToken","startMarker","lvalue","targets","both","newBase","parsePrefixExpressionPart","values","parameter","parsePrimaryExpression","parseTableConstructor","parseSubExpression","binaryPrecedence","minPrecedence","parsePrefixExpression","precedence","parseCallExpression","table","literals","parse","versionFeatures","_input","_options","write","luaparse","Worker"],"sourceRoot":"","file":"c224886a075dcbcf9433ec9416f08206.js"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy